![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день!
Подскажите пожалуйста как создавать и переключать рабочие столы используя Win10 API |
#2
|
|||
|
|||
![]() а что, в гугле забанили.
На запрос он даже сам дает маленькую табличку с описанием: Цитата:
|
#3
|
|||
|
|||
![]() lmikle, я облазил весь инет перед тем как задавать вопрос, вы мне скопипастили текст на английском, хотя такого текста полно и на русском как это делать ручками, я ж спрашиваю использую WINAPI значит программно, например пользователь поместил мою программу на второй рабочий стол, потом ушел на первый рабочий стол, программа как завершила свои действия программно выполнит переход на тот рабочий стол где она находится, чтоб пользователь сразу увидел, да много для чего это нужно, если пользуешься virtualbox`ом то там давно реализована такая функция перехода на тот рабочий стол где выполнятся виртуальная машина.
|
#4
|
|||
|
|||
![]() Кажись не весь облазил еще) нашел на забугорном форуме http://stackoverflow.com/questions/4...ager-in-delphi
Просто нужно было гуглить IVirtualDesktop и IVirtualDesktopManager, а на русском гуглил гуглил и ниче нужного не на гуглил, над исправлять это дело) |
#5
|
|||
|
|||
![]() Нельзя так делать. Мало ли чем пользователь в это время занят.
Вставляй сообщение в Message Center. |
#6
|
||||
|
||||
![]() Да об этом можно много рассуждать, кого-то это может раздражать когда чужая программа поверх сама внезапно становится, кого-то наоборот радовать что сразу перед их глазами и они сразу видят что нужно в ней сделать, а не нужно вчитываться в эти сообщения, конечно по всякой фигне отвлекать пользователя таким образом не собираюсь, да и опция будет как уведомлять.
Теперь давайте по теме) на том форуме я нашел рабочий код Код:
А как программно перейти к нужному рабочему? Вот я получил TGUID рабочего стола на котором находится моя программа, пользователь сидит на первом рабочем столе и что нужно выполнить чтобы произошел переход к рабочему столу где находится моя программа? Читал что нужный рабочий стол автоматически активируется если передать фокус программе, но уже перепробовал разные функции для передачи фокуса программе, единственно Код:
|
#7
|
||||
|
||||
![]() Попробуй через другой интерфейс GitHub
(SwitchDesktop) Код:
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
TidusX (16.02.2017)
|
#8
|
|||
|
|||
![]() О благодарю, осталось вспомнить навыки программирования по си))) чтоб перевести его на делфи, а то меня хоть и учили в институте по нему кодить, но мне больше нравится синтаксис делфи, он более проще и понятней и о си уже как 5 лет не вспоминаю)
|
#9
|
|||
|
|||
![]() Спасибо всем отписавшимся, провозился пол дня так и не получилось перевести на делфийский, там оказалось не всё так просто, поэтому для себя нашел другое решение, а именно готовая библиотека VirtualDesktopAccessor.dll в которой реализизованы эти функции, подключил к своему приложению и вызываю нужные процедуры. Кому нужно пользуйтесь
https://github.com/Ciantic/VirtualDesktopAccessor |
#10
|
|||
|
|||
![]() Дык это IDL.
Перевод по аналогии с тем, который ты уже нашел. Ну или можно попробовать импортировать чеерз Import ActiveX меню, если сможешь найти этот интерфейс в списке. Только при импорте просто создавай файл, не надо генерировать компонент для палитры. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
TidusX (16.02.2017)
|
#11
|
|||
|
|||
![]() Попробую, спасибо.
|
#12
|
||||
|
||||
![]() В принципе не особо сложного было перевести. Однако пои познания в С настолько скудны, что я не смог перевести в Delphi
Код:
Так что если спецы подскажут, буду премного благодарен. А так, вот функция выводит количество виртуальных десктопов. Остается только перевести остальные ф-ции и задача решена. Код:
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. Последний раз редактировалось dr. F.I.N., 16.02.2017 в 19:35. |
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
TidusX (16.02.2017)
|
#13
|
|||
|
|||
![]() Браво! Проверил всё правильно показывает кол-во столов, ну да остальные функции до ума довести осталось и на этом форуме появится раньше дельфийский такой модуль) а если попробовать обойтись пока без **ppDesktop? Чтобы функцию замутить SwitchDesktop нужно написать интерфейс IVirtualDesktop, и создать структуру IApplicationView, там указатель на указатель не нужно делать.
|
#14
|
||||
|
||||
![]() Столкнулся с еще одно проблемой. В зависимости от сборки винды IID_IVDMI может иметь три разных значения. Переделал для стабильной работы, функцию укоротил (попробую отредактировать предыдущее сообщение).
Что касается остального, то с интерфейсом IApplicationView не все так однозначно. По нему описания практически нету. Да и проще найти GUID экрана на котором программа и сравнить с активным, после чего переключить при необходимости. Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#15
|
||||
|
||||
![]() Вопрос решен. Постараюсь завтра выложить готовый модуль. Может кому и пригодится.
![]() Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |