来自SetWindowsHookEx的Hook冻结进程并且不执行

问题描述 投票:0回答:1

我试图钩住一个进程的键盘,但是当我按任意键时,钩子的代码无法执行,并且进程冻结。我的代码基于以下帖子:How to hook external process with SetWindowsHookEx and WH_KEYBOARD

这是我的dll代码:

#include <windows.h>
#include <iostream>
#include <stdio.h>

HINSTANCE hinst = NULL;
#pragma data_seg(".shared")
HHOOK hhk = NULL;
#pragma data_seg()
#pragma comment(linker, "/SECTION:.shared,RWS")

LRESULT CALLBACK wireKeyboardProc(int code, WPARAM wParam, LPARAM lParam) {
    return CallNextHookEx(hhk, code, wParam, lParam);
}

extern "C" __declspec(dllexport) void install(unsigned long threadID) {
    hhk = SetWindowsHookEx(WH_KEYBOARD, wireKeyboardProc, hinst, threadID);
}

BOOL WINAPI DllMain(__in HINSTANCE hinstDLL, __in  DWORD fdwReason, __in  LPVOID lpvReserved) {
    hinst = hinstDLL;
    return TRUE;
}

编辑:加载dll后,我执行函数install(),该函数成功创建了钩子,但是由于某些原因,当按下键并冻结进程时,不会执行函数wireKeyboardProc。知道为什么会这样吗?

编辑2:这也是我的exe代码:

unsigned long threadID = GetWindowThreadProcessId(hWnd, &ProcessId);

    HINSTANCE hinst;
    hinst = LoadLibrary(_T("hookKbd32.dll"));

    if (hinst) {
        typedef void(*Install)(unsigned long);
        Install install = (Install)GetProcAddress(hinst, "install");
        install(threadID);
    }
c++ windows hook freeze setwindowshookex
1个回答
0
投票

我在向Nox播放器(Android模拟器)添加钩子时遇到了同样的问题。我已经在另一个模拟器上尝试了相同的代码,并且效果很好。

此后,我确定nox包含防钩子系统...可能与您的程序相同。在SetWindowsHookExA之后,Nox看起来冻结或退出,而根本没有捕获事件。

© www.soinside.com 2019 - 2024. All rights reserved.