鼠标钩打破了所有窗口输入

时间:2013-01-05 07:34:36

标签: c++ windows

我是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 = %d\n", 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 64位。

到目前为止,我尝试了以下内容:
- 扭转了最近的超频调整 - 将代码恢复到我玩它之前的方式,重新编译并运行。
- 谷歌搜索。
- 系统驱动器上的chkdsk / f - 系统恢复(不喜欢突袭)
- 从朋友那里复制了user32.dll。

Plz原谅我的无知: - )

1 个答案:

答案 0 :(得分:0)

我最终重新安装了Windows 7,很快遇到了更多奇怪的问题。我发现备用数据已经破坏了各种各样的东西,并且已经停止使用它。现在,我正在运行一个从未进入睡眠状态的全新Windows 7。直到今天仍然没有任何奇怪的问题: - )