Можно ли перехватить всплывающее меню «Пуск» Windows с помощью клавиши Windows (возможно, без перехвата)? - PullRequest
2 голосов
/ 19 августа 2011

Я работал над системой ввода событий. Я сопоставил все клавиши на своей клавиатуре, коды сканирования и т. Д., Включая обе клавиши Windows. Когда я нажимаю их, программа успешно получает для них четкие события нажатия клавиш без каких-либо проблем. Однако когда я отпускаю клавиши, появляется меню «Пуск», скрывая программу в режиме Windows или даже минимизируя ее в полноэкранном режиме.

Так что моя проблема в том, чтобы подавить это.

Arma 2, военный симулятор / игра позволяет отображать команды на эти клавиши без каких-либо проблем.

Где я должен поймать это событие? Могу ли я сделать это для своего окна, если оно имеет фокус? Собираюсь ли я застрять с отключенным win-ключом, пока он работает? Или что-то еще?

Поиск в Google был в основном бесплодным из-за того, что ключ Windows также ссылался на ключ продукта, и когда я что-то находил, он обычно отключал целую кнопку. Я просто хочу подавить всплывающее окно.

Edit: Я пытался

case WM_SYSCOMMAND:
        switch(wParam)
        {

        case SC_TASKLIST:
            return 0;

        default:
            break;
        }

Но это дало мне очень странные результаты. Если бы я спамил спам и только спам, это сработало, и как только я переместил мышь, это не сработало, меню пуск снова всплыло.

Edit: Я также пробовал хуки, но на win7 они удаляются, если обратный вызов занимает слишком много времени, что может случиться при загрузке больших данных, поэтому они предлагают для этого выделенный поток, но я думаю, что это излишне только для одного ключа, который требует обработки.

Я просто хочу знать, где вызывается меню «Пуск». Моя собственная программа? Система? Это чертовски раздражает, я обдумываю попытки связаться с людьми из Bohemia Interactive и спросить их, как они это сделали.

Только этот один ключ, боже, Microsoft ... даже с поисковыми терминами "Супер ключ / суперключ", я обычно получаю только откровенные методы отключения, от изменений реестра до сторонних фоновых программ.

Ба!

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Эта статья относится к C #, но может указать вам правильное направление;

От MSDN :

Глобальныйhook отслеживает сообщения для всех потоков на том же рабочем столе, что и вызывающий поток.Хук, зависящий от потока, отслеживает сообщения только для отдельного потока.Глобальная подключаемая процедура может быть вызвана в контексте любого приложения на том же рабочем столе, что и вызывающий поток, поэтому процедура должна находиться в отдельном модуле DLL.Хук-специфичная для потока процедура вызывается только в контексте связанной нити.

Это была самая полезная ссылка для ответа на вопрос в статье выше

1 голос
/ 20 августа 2011

Необработанный API ввода должен решить вашу проблему.

http://msdn.microsoft.com/en-us/library/ms645543.aspx

...