Есть ли способ программно переключаться из меню «Пуск» на рабочий стол. Например, если у вас есть служба, которая запускается после входа пользователя в систему, и вы хотите, чтобы эта служба переключалась в режим рабочего стола после входа пользователя? Я не могу найти способ обойти это. Я пробовал виртуальное нажатие клавиши Windows, но это не сработало?
Я не совсем уверен, с чем именно вы столкнулись. «Программно переключаться из меню« Пуск »на рабочий стол» можно интерпретировать несколькими разными способами.
Однако, поскольку вы сказали: «Вы хотели, чтобы эта служба переключалась на рабочий стол», «Я пробовал виртуальное нажатие клавиши Windows», я предполагаю, что вы пытаетесь установить связь с окнами на рабочем столе с помощью службы, что невозможно сделать. Это сделано специально для обеспечения безопасности. Если вы откроете диспетчер задач и сделаете просмотр -> выберите столбцы -> идентификатор сеанса, вы заметите, что служба работает в сеансе 0, тогда как «настольные» приложения запускаются в сеансе вошедшего в систему пользователя. Приложения не могут общаться через сообщения Windows между сессиями.
Существует обходной путь, хотя требуется больше усилий, чем просто отправка виртуальной клавиши. Обходной путь — заставить ваш сервис создать процесс в сеансе пользователя, который затем выполняет ваши задачи за вас (например, метод виртуального нажатия клавиш будет работать в этом приложении).
Вызовы API, которые вам понадобятся для этого:
CreateProcessAsUser
WTSGetActiveConsoleSessionId
WTSQueryUserToken
DuplicateTokenEx
РЕДАКТИРОВАТЬ
Если вы хотите управлять меню «Пуск», для этого также нет простого способа. Если вы должны это сделать, я предлагаю вам использовать инструмент под названием Spy ++ (поставляется с Visual Studio — см. Microsoft Visual Studio x.x \ Common7 \ Tools или может быть загруженный). Используйте функцию «Найти окно», чтобы просмотреть сообщения, отправленные на кнопку «Пуск» Windows, когда вы нажимаете ее, а затем вы можете увидеть, какие сообщения вы хотите отправить на кнопку, чтобы управлять ею так, как вам нужно.
Например, вы можете увидеть WM_LBUTTONDOWN
сообщение отправлено на кнопку запуска. это переключает меню «Пуск». Вы можете использовать FindWindow
возможно с GetDesktopWindow
чтобы получить указатель на кнопку запуска, а затем отправить сообщения, которыми вы хотите управлять SendMessage
, Вы также можете проверить, отображается ли меню «Пуск», используя ту же процедуру, чтобы получить указатель на меню «Пуск» и используя IsWindowVisible
,
Других решений пока нет …