c – 64位全局挂钩锁定32位应用程序
发布时间:2020-12-16 06:56:46 所属栏目:百科 来源:网络整理
导读:我试图创建一个简单的DLL挂钩到Win7 x64上的64位应用程序. 我的程序使用64位进程,每按一次键就会产生一个消息框.但是,当我按下32位应用程序中的任何键时,该应用程序将锁定,直到删除该挂钩.为什么64位挂钩会干扰32位应用程序? 代码如下. hook.h #ifdef MYHOO
我试图创建一个简单的DLL挂钩到Win7 x64上的64位应用程序.
我的程序使用64位进程,每按一次键就会产生一个消息框.但是,当我按下32位应用程序中的任何键时,该应用程序将锁定,直到删除该挂钩.为什么64位挂钩会干扰32位应用程序? 代码如下. hook.h #ifdef MYHOOK_EXPORTS #define MYHOOK_DLL __declspec(dllexport) __stdcall #else #define MYHOOK_DLL __declspec(dllimport) __stdcall #endif void MYHOOK_DLL installHook(); void MYHOOK_DLL removeHook(); hook.cpp: #include "hook.h" #include <windows.h> // hook handle stored in a shared data segment #pragma data_seg(".myshared") HHOOK hhook = 0; #pragma data_seg() #pragma comment(linker,"/SECTION:.myshared,RWS") static HMODULE hmodule = 0; LRESULT CALLBACK keyboardProc(int code,WPARAM wParam,LPARAM lParam) { // Replace this with sending a message to another window or writing to a file MessageBox(NULL,L"Hello,world!",L"Alert",0); return CallNextHookEx(hhook,code,wParam,lParam); } void MYHOOK_DLL installHook() { if (!hhook) hhook = SetWindowsHookEx(WH_KEYBOARD,keyboardProc,hmodule,0); } void MYHOOK_DLL removeHook() { if (hhook) UnhookWindowsHookEx(hhook); hhook = 0; } BOOL APIENTRY DllMain(HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: hmodule = hModule; } return TRUE; } install.cpp: #include "hook.h" #include <stdio.h> int wmain() { installHook(); getchar(); removeHook(); return 0; } 我已经读过你应该检查一下你是否处于64位进程中,但是我不确定如何以及在哪里. 我知道WH_KEYBOARD_LL不需要注入DLL,但我试图理解为什么这个钩子不起作用. 解决方法
a)您无法从Hook过程调用MessageBox.不要那样做. b)钩子几乎总是解决任何问题的错误方法.我建议反对他们.你真的想做什么?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |