SetWinEventHook не перехватывает ни одно событие

Это продолжение этого вопроса: Alt Tab оверлейный идентификатор Win32.

Я пытаюсь уловить момент, когда меню переключателя alt-tab открывается (и выходит), используя функцию SetWinEventHook из Winuser API. Однако ловушка не перехватывает какое-либо событие (например, сворачивает окно) и, следовательно, не вызывает HandleWinEvent.

Следующий код в значительной степени вдохновлен кодом, представленным на Страница MSDN

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif

#ifndef WINVER
#define WINVER 0x0501
#endif

#include "conio.h"#include <windows.h>
#include <iostream>// Global variable.
HWINEVENTHOOK g_hook;

// Prototype
void HandleWinEvent(HWINEVENTHOOK , DWORD , HWND ,
LONG , LONG ,
DWORD , DWORD );

// Initializes COM and sets up the event hook.
//
void InitializeMSAA()
{
CoInitialize(NULL);
g_hook = SetWinEventHook(
EVENT_MIN ,EVENT_MAX,  // Range of events .
NULL,                                          // Handle to DLL.
HandleWinEvent,                                // The callback.
0, 0,              // Process and thread IDs of interest (0 = all)
WINEVENT_OUTOFCONTEXT ); // Flags.
}

// Unhooks the event and shuts down COM.
//
void ShutdownMSAA()
{
UnhookWinEvent(g_hook);
CoUninitialize();
}

// Callback function that handles events.
//
void HandleWinEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd,
LONG idObject, LONG idChild,
DWORD dwEventThread, DWORD dwmsEventTime)
{
std::cout << std::hex << event ; // desperate attempt to see if any event is caught

if (event == EVENT_SYSTEM_SWITCHSTART)
{
std::cout << "Begin" ;
}
else if (event == EVENT_SYSTEM_SWITCHEND)
{
std::cout << "End ";
}
}int main()
{
InitializeMSAA();
while( getch()!= 'q' ){;}
ShutdownMSAA();
return 0;
}

Здание команды:

g++ -o alttab main.cpp -luser32 -lole32

Я использую Windows XP с компилятором MinGW / GCC, версия 4.5.

3

Решение

Из MSDN: Поток клиента, который вызывает SetWinEventHook, должен иметь цикл сообщений для получения событий. Ваш основной поток ожидает кнопку «q», без запуска цикла сообщений.

4

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

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

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