gpt4 book ai didi

c++ - 赢 API : How to catch every message from user input?

转载 作者:太空宇宙 更新时间:2023-11-04 12:21:50 24 4
gpt4 key购买 nike

我要抓:

  1. 窗口调整大小/移动/最小化/最大化/关闭消息。
  2. 鼠标点击和键盘按下。
  3. 当用户按 enter 或 dblclick 执行任何程序时。 (如果可能的话?)

这应该与键锁程序的工作方式相同:如果您执行某些事件,我可以通过我的程序决定是让 Windows 处理它,还是由我处理,或两者兼而有之。

我该怎么做?

最佳答案

正如 Hans Passant 指出的那样,您需要 SetWindowsHookEx功能。
在链接中详细解释了所有可能的钩子(Hook),以及您需要实现的钩子(Hook)函数。这是一个小例子,如何安装一个全局钩子(Hook),在消息被窗口处理后处理消息。

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){

HHOOK msgHook = SetWindowsHookEx(WH_CALLWNDPROCRET, msgHook, hInstance, 0);

if(msgHook == NULL){
//Error handling here
cout << "Failed to set hook";
}
else{
//Hook has been set and will automatically be removed, when your application exits.
}

//A clean shutdown should always unhook everything it has installed
UnhookWindowsHookEx(msgHook);

return 0;
}

您可以在 MSDN 中查找 Hook 函数定义,但它可能如下所示:

LRESULT CallWndRetProc(int nCode, WPARAM wParam, LPARAM lParam){

CWPRETSTRUCT* theMessage = (CWPRETSTRUCT*)lParam;

//now you can read all message parameters and the return value
//...

//Always return by calling the next hook in the chain
return CallNextHookEx(0, nCode, wParam, lParam);
}

您要安装的其他钩子(Hook)遵循相同的原则。

另见

关于c++ - 赢 API : How to catch every message from user input?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4547909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com