C++ 全局键盘挂钩不工作

C++ 全局键盘挂钩不工作,c++,C++,我一直在尝试在Visual C++中编写一个全局键盘钩子程序,它在文件“log .txt”中编写击键。…我是windows编程新手,我通过msdn库了解了钩子…我认为我在理论上理解了钩子的概念,但当我实现代码时,它不起作用…编译器在DLL文件和EXE文件中都没有显示任何错误…而且“Log.txt”文件从未创建过。。。 下面是代码文件 第一个Dll文件: #include<windows.h> #include<stdio.h> HHOOK g_hhk;

我一直在尝试在Visual C++中编写一个全局键盘钩子程序,它在文件“log .txt”中编写击键。…我是windows编程新手,我通过msdn库了解了钩子…我认为我在理论上理解了钩子的概念,但当我实现代码时,它不起作用…编译器在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;
}
#包括
#包括
HHOOK g_hhk;
__declspec(dllexport)LRESULT回调KeyProc(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM)
{
如果(nCode>=0)
{
char ch;
文件*fp;
fp=fopen(“log.txt”,“a”);

如果((wParam==VK_SPACE)| |(wParam==VK_RETURN)| |(wParam>=0x2f)&&(wParamwParam应具有以下值之一:
WM\u KEYDOWN
WM\u keydup
WM\u SYSKEYDOWN
WM\u syskeydup


要获得按下的键的虚拟键代码,您必须使用:
((KBDLLHOOKSTRUCT*)lParam)->vkCode

此问题可能对您有用: