我一直在尝试在 Visual C++ 中制作一个全局键盘 Hook 程序,该程序将击键写入文件“log.txt”。我是 Windows 编程的新手,我已经浏览了 msdn 库以了解 Hook 。 ...我想我已经从理论上理解了这个概念但是当我实现代码时它不起作用..编译器在 DLL 文件和 EXE 文件中都没有显示任何错误....而且“Log.txt “文件永远不会被创建... 这是代码文件
第一个 Dll 文件:
#include<windows.h>
#include<stdio.h>
HHOOK g_hhk;
__declspec(dllexport) LRESULT CALLBACK KeyProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode>=0)
{
char ch;
FILE *fp;
fp=fopen("log.txt","a");
if((wParam==VK_SPACE)||(wParam==VK_RETURN)||(wParam>=0x2f ) &&(wParam<=0x100))
{
if(wParam==VK_RETURN)
ch='\n';
fwrite(&ch,1,1,fp);
}
else
{
BYTE ks[256];
GetKeyboardState(ks);
WORD w;
UINT scan;
scan=0;
ToAscii(wParam,scan,ks,&w,0);
ch =char(w);
fwrite(&ch,1,1,fp); // copy character to log file
}
fclose(fp);
}
return CallNextHookEx(g_hhk, nCode, wParam, lParam);
}
Now the EXE file:
#include<windows.h>
HOOKPROC hkprckb;
static HINSTANCE hinstDLL;
static HHOOK hhookkb;
int WINAPI WinMain(HINSTANCE hInstance1,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
hinstDLL=LoadLibrary(TEXT("C:\\Documents and Settings\\Attar Singh\\My Documents\\Visual Studio 2008\\Projects\\key\\Debug\\key.dll"));
hkprckb=(HOOKPROC)GetProcAddress(hinstDLL,"KeyProc");
hhookkb=SetWindowsHookEx(
WH_KEYBOARD_LL,
hkprckb,
hinstDLL,
0);
MessageBox(NULL,NULL,NULL,MB_OK);
return 1;
}
这个程序让我做噩梦...任何形式的帮助将不胜感激...提前致谢...
最佳答案
wParam 应该具有以下值之一:
WM_KEYDOWN
、WM_KEYUP
、WM_SYSKEYDOWN
或 WM_SYSKEYUP
。
要获取按下的键的虚拟键码,您必须使用:((KBDLLHOOKSTRUCT*)lParam)->vkCode
关于c++ - 全局键盘 Hook 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6882854/