获取键盘消息有关问题
求助获取键盘消息问题
我想实现,在任意窗口输入键盘消息,在指定的edit下显示,如何利用全局键盘钩子实现?尽量展示代码!!
------解决方案--------------------
最简单的:
------解决方案--------------------
老妖的代码最好,够简洁
再加个判断避免打印两次vkCode好看点
if (key->flags == LLKHF_UP)
Form1->Edit1->Text = key->vkCode;
------解决方案--------------------
你要的是全局钩子,用啥dll啊,又不是钩特定进程。
你那代码,得在每个函数前表面__stdcall,比如
LRESULT __stdcall CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam);
我想实现,在任意窗口输入键盘消息,在指定的edit下显示,如何利用全局键盘钩子实现?尽量展示代码!!
------解决方案--------------------
最简单的:
HHOOK g_hHook;
//---------------------------------------
long CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *key = (KBDLLHOOKSTRUCT *)lParam;
Form1->Edit1->Text = key->vkCode;
return 0;
}
// ---------------------------------------
bool InstallHook()
{
if (!g_hHook)
g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyProc, HInstance, NULL);
return g_hHook != NULL;
}
// ---------------------------------------
bool UninstallHook()
{
if (g_hHook && UnhookWindowsHookEx(g_hHook))
g_hHook = NULL;
return g_hHook == NULL;
}
// ---------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
InstallHook();
}
// ---------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
UninstallHook();
}
------解决方案--------------------
老妖的代码最好,够简洁
再加个判断避免打印两次vkCode好看点
if (key->flags == LLKHF_UP)
Form1->Edit1->Text = key->vkCode;
------解决方案--------------------
你要的是全局钩子,用啥dll啊,又不是钩特定进程。
你那代码,得在每个函数前表面__stdcall,比如
LRESULT __stdcall CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam);