c++ - 全局键盘 Hook 不起作用

标签 c++

我一直在尝试在 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_KEYDOWNWM_KEYUPWM_SYSKEYDOWNWM_SYSKEYUP

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

关于c++ - 全局键盘 Hook 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6882854/

相关文章:

c++ - Win32 API - 将 LO/HIWORD 转换为 HANDLE

C++ MFC 对话框 - 如何在列表控件中显示 MySQL 数据库中的项目?

c++ - 如何获取HDF5文件的数据集信息

c++ - 使用 -std=c++17 编译时在 GCC 中恢复 std::auto_ptr

c++ - 无法用 C++ 编译 cython

c++ - 挑战使用 Visual Studio 和 VC++?

c++ - 将过剩与 Qt 联系起来

c++ - 如何访问 iPod/iPhone 上的图片文件?

c++ - 使用数码相机进行相机校准

c++ - 为什么有人将对象定义为指针?