鼠标钩子破坏了所有Windows输入

mouse hook broke all windows input

本文关键字:Windows 输入 坏了 鼠标      更新时间:2023-10-16

我是c++编程新手,我正在尝试制作一个小报告工具,当鼠标和键盘在一段时间内没有被触摸时,它将检测到。

我一直在寻找一些示例鼠标钩子代码,发现这个

#define _WIN32_WINNT 0x0400
#pragma comment( lib, "user32.lib" )
#include <windows.h>
#include <stdio.h>
HHOOK hMouseHook;
__declspec(dllexport) LRESULT CALLBACK KeyboardEvent (int nCode, WPARAM wParam, LPARAM lParam)
{
    MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;
    if (pMouseStruct != NULL)
        printf("Mouse position X = %d  Mouse Position Y = %dn", pMouseStruct->pt.x,pMouseStruct->pt.y);
    return CallNextHookEx(hMouseHook,
        nCode,wParam,lParam);
}
void MessageLoop()
{
    MSG message;
    while (GetMessage(&message,NULL,0,0)) {
        TranslateMessage( &message );
        DispatchMessage( &message );
    }
}
DWORD WINAPI MyMouseLogger(LPVOID lpParm)
{
    HINSTANCE hInstance = GetModuleHandle(NULL);
    if (!hInstance) hInstance = LoadLibrary((LPCSTR) lpParm);
    if (!hInstance) return 1;
    hMouseHook = SetWindowsHookEx ( 
        WH_MOUSE_LL,
        (HOOKPROC) KeyboardEvent, 
        hInstance,                
        NULL                      
        );
    MessageLoop();
    UnhookWindowsHookEx(hMouseHook);
    return 0;
}
int main(int argc, char** argv)
{
    HANDLE hThread;
    DWORD dwThread;
    hThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)
        MyMouseLogger, (LPVOID) argv[0], NULL, &dwThread);
    if (hThread)
        return WaitForSingleObject(hThread,INFINITE);
    else return 1;
}

我编译并运行这个测试,它似乎做了我想要的。在那之后,我开始测试一些东西。编译在c++和g++为地狱它。删除了pMouseStruct并测试了"if(lParam)"。一切似乎都很正常,天晚了,所以我决定第二天再来。

当我今天启动windows时,我不能移动鼠标或用键盘输入任何东西。似乎输入窗口内(正常和安全模式)不再工作了。有什么办法解决这个问题吗?

使用Windows 7 64bit

到目前为止,我已经尝试了以下方法:
-扭转了最近的超频调整。
-将代码返回到我玩它之前的方式,重新编译并运行。
——谷歌。
—系统盘的CHKDSK/f。
-系统恢复(不像raid)
-从朋友那里拷贝了user32.dll。

请原谅我的无知:-)

最后我重新安装了windows 7,很快就遇到了更多奇怪的问题。从那以后,我发现待机会破坏各种东西,于是就不再使用它了。现在我正在运行一个从未进入休眠状态的windows 7新安装。到现在还没有任何奇怪的问题:-)