【发布时间】:2020-08-17 03:05:15
【问题描述】:
我写了一个程序来获取键盘钩子。我想要的是,当用户按下 Enter 键时,应该从函数返回键入的文本,例如:“hello world”,我存储在 exportMsg 中。
我想制作一个dll并导出exportMsg。
这是我的代码。提前致谢。
#include <Windows.h>
#include <stdio.h>
#include <iostream>
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
HHOOK keyboardHook;
HWND prevWindow;
std::string exportMsg="";
int main()
{
keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, 0, 0);
MSG msg{ 0 };
while (GetMessage(&msg, NULL, 0, 0) != 0);
UnhookWindowsHookEx(keyboardHook);
return 0;
}
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
wchar_t title[256];
HWND fwindow = GetForegroundWindow();
PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lParam;
//a key was pressed
if (wParam == WM_KEYDOWN && nCode == HC_ACTION )
{
//return if enter pressed
if (key->vkCode == '\r')
{
std::cout << exportMsg << std::endl;
}
else
{
exportMsg.push_back(key->vkCode);
}
}
return CallNextHookEx(keyboardHook, nCode, wParam, lParam);
}
【问题讨论】:
-
SetWindowsHookEx最重要的部分是第三个参数,你把它留空了。 -
@Andy 如何将
exportMsg关联到SetWindowsHookEx以获取消息? -
你需要钩子所在的模块实例。所以在你的情况下,它将是
GetModuleHandle(NULL)。所以你可以这样称呼它:SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, GetModuleHandle(NULL), 0); -
抱歉,没看懂问题。我以为我读到它根本不起作用。您确实应该填写第三个参数。您能否重新措辞以解释当他们按下回车键时您想要发生的事情?您希望它“导出到 DLL”没有多大意义。
-
问题是我想发送
exportMsg,只要按下回车键。
标签: c++ winapi dll keyboard-hook