- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是这个问题的后续:Alt Tab overlay Win32 identificator .
我尝试使用 Winuser API 中的 SetWinEventHook 函数捕捉 alt-tab 切换菜单打开(和退出)的时刻。 但是, Hook 不会捕获任何事件(例如最小化窗口),因此不会调用 HandleWinEvent。
以下代码极大地受到了 MSDN page 上提供的代码的启发。
#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
我使用的是带有 MinGW/GCC 编译器 4.5 版的 Windows XP。
最佳答案
来自 MSDN:调用 SetWinEventHook 的客户端线程必须有一个消息循环才能接收事件。您的主线程等待“q”按钮,而不运行消息循环。
关于c++ - SetWinEventHook 不捕获任何事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12931235/
我目前正在开发一个程序,该程序使用的功能应该在其他进程的窗口最大化/最大化时提醒我。对于最大化事件,我的意思是按下右上角关闭按钮旁边的符号。 为此,我使用了 SetWinEventHook功能。问题是
我正在使用 SetWinEventHook Hook 来检测编辑控件的选择。在事件钩子(Hook)回调函数中,有没有办法指定自定义数据?在我的例子中,自定义数据将是 VKeyboard 实例。 请查看
这是这个问题的后续:Alt Tab overlay Win32 identificator . 我尝试使用 Winuser API 中的 SetWinEventHook 函数捕捉 alt-tab 切换
我正在尝试调用SetWinEventHook如上所述here for C#但是来自nodejs。 我正在使用ffi-napi绑定(bind)到该函数。到目前为止,这是我的代码: const ffi =
我一直在做一个需要检测当前事件窗口并连续获取事件窗口标题的项目。谁能解释一下如何使用 SetWinEventHook() 函数获取 Active Window changed 消息。[ 我使用带有计时
我编写了一些代码来监 window 口标题的更改。它在我的 Windows 7 中的不同窗口中运行良好。我像这样使用 SetWinEventHook: SetWinEventHook(EVENT_OB
我在进程上创建了一个 Hook ,以便在其窗口移动时进行注册。我使用事件常量 EVENT_OBJECT_LOCATIONCHANGE,根据 MSDN An object has changed loc
我想用 SetWinEventHook 设置一些事件并等待。在五个事件之后,我想退出消息循环。问题是代码卡在 getMessage 中而没有进入循环。每当事件发生时,都会正确调用回调函数。 HWINE
是否最好使用相同的 WinEventProc() 回调函数注册多个 SetWinEventHook() 函数,并在函数代码中单独处理每个事件类型,或者根据需要处理多个事件类型。 编辑:我发布了三个不同
我正在使用 CreateProcess 打开一个窗口,但我在理解 SetWinEventHook 时遇到了很多麻烦。 在调用函数中,我有: HWINEVENTHOOK hook = SetWinEve
对于我正在制作的应用程序,我想拦截来自外部进程的窗口消息(很像 spy++ 的做法)。我发现我可以使用 SetWinEventHook 来做到这一点。这是我的代码。 class Program
我想获取从特定应用程序弹出的每个新对话框的句柄。 我知道我应该设置一个钩子(Hook) SetWinEventHook它在 Windows 中的 user32.dll 中,但我不知道如何在 pytho
我是一名优秀的程序员,十分优秀!