X
xinhe
Unregistered / Unconfirmed
GUEST, unregistred user!
<br> 很奇怪的一个问题,以前竟然没注意到。随便设一个Hook DLL,在EXE中调用。<br> 如果这个程序是从IE中启动的(打开“我的电脑”,选到程序的那个目录,双点EXE<br> 文件,或用文件管理器选择双点EXE),程序启动并设置好Hook函数后,去关闭启动<br> 程序的IE窗口时会出错,并不是每次都出,但一般每三四次就会出一次,提示““该<br> 程序招待了非法操作,即将关闭”和“Cannot run multiple instances of a DLL<br> under WIN32s”<br><br> 以下是我用来测试的DLL,其实就是随便写的一个最简单的Hook而已。<br><br>#define DLLEXPORT extern "C" __declspec(dllexport)<br><br>LRESULT CALLBACK MyHookProc(int nCode,WPARAM wParam,LPARAM lParam);<br>HHOOK ghHook=NULL;<br>HINSTANCE ghDllInst=NULL;<br><br>#pragma argsused<br>int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)<br>{<br> ghDllInst=hinst;<br> return 1;<br>}<br>//---------------------------------------------------------------------------<br>DLLEXPORT BOOL WINAPI UnInstallHook(void)<br>{<br> return UnhookWindowsHookEx(ghHook);<br>}<br><br>DLLEXPORT BOOL WINAPI InstallHook(HINSTANCE hInst)<br>{<br> ghHook = SetWindowsHookEx( WH_MOUSE,(HOOKPROC)MyMenuHookProc,ghDllInst,NULL);<br> if(ghHook==NULL)return FALSE;<br> else return TRUE;<br>}<br><br>LRESULT CALLBACK MyHookProc(int nCode,WPARAM wParam,LPARAM lParam)<br>{<br> if(nCode<0)return CallNextHookEx(ghHook, nCode, wParam, lParam);<br> MessageBeep(-1);<br> return CallNextHookEx(ghHook, nCode, wParam, lParam);<br>}<br><br>应用程序就只是放了一个按钮,调用了一下InstallHook函数,这里就不写了。<br>程序是用BCB5写的。<br>