gpt4 book ai didi

c++ - 消息循环在这个程序中的作用?还有几个问题

转载 作者:行者123 更新时间:2023-11-27 23:23:52 29 4
gpt4 key购买 nike

下面的代码工作正常。当用户按下某个键时,它会发出消息。但是有些事情我不知道。 Message Loop here 的作用是什么?我读到调用 SetWindowsHookEx(...) 向窗口注册一个函数,当注册类型的事件发生时,Windows 会自动调用适当的函数。毫无疑问,如果不给消息循环空格,我就看不到输出。

#include<iostream>
#include <windows.h>
using namespace std;

HINSTANCE hinst = NULL;
static HHOOK handleKeyboardHook = NULL;
static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);

void setWinHook() {
handleKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc,NULL, 0);
if(handleKeyboardHook == NULL) {
cout << "is NULL";
} else {
cout << "is not NULL";
}
cout<<("Inside function setWinHook !");
}

static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
cout << ("You pressed a key !\n");
return CallNextHookEx(handleKeyboardHook, nCode, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
handleKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

编辑

退出程序是否(关闭控制台窗口)注销钩子(Hook)?

编辑 2

Dispatch Message 有什么作用?在这里玩?根据文档,它向窗口过程发送一条消息,但在这里即使我排除它,它也不会影响输出。

最佳答案

Windows 中的所有事件,甚至您的示例中使用的低级键盘事件,都是使用普通消息事件发送的。因此,为了让程序能够感知键盘事件,它必须使用事件循环处理消息。

关于c++ - 消息循环在这个程序中的作用?还有几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10795373/

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