Переключиться из меню Пуск на рабочий стол в Windows 8

Есть ли способ программно переключаться из меню «Пуск» на рабочий стол. Например, если у вас есть служба, которая запускается после входа пользователя в систему, и вы хотите, чтобы эта служба переключалась в режим рабочего стола после входа пользователя? Я не могу найти способ обойти это. Я пробовал виртуальное нажатие клавиши Windows, но это не сработало?

1

Решение

Я не совсем уверен, с чем именно вы столкнулись. «Программно переключаться из меню« Пуск »на рабочий стол» можно интерпретировать несколькими разными способами.

Однако, поскольку вы сказали: «Вы хотели, чтобы эта служба переключалась на рабочий стол», «Я пробовал виртуальное нажатие клавиши 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,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]