有关Shellhook的问题(100分)

  • 主题发起人 主题发起人 ysq
  • 开始时间 开始时间
Y

ysq

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个shellhook,但奇怪的是他只能得到本进程的窗口创建等一系列消息,对于其他进程创建的窗口就不会引发这个hook,真得很奇怪。我现在想hook其他窗口创建和destroy怎么办?下面是我的代码。<br><br>function shellHookProc(iCode:Integer;wParam1:wParam;lParam1:lParam):LRESULT;stdcall;<br>begin<br>&nbsp; Result:=0;<br>&nbsp; DebugOutput(inttostr(iCode));<br>&nbsp; if iCode&lt;0 then Result := CallNextHookEx(hHook1,iCode,wParam1,lParam1);<br>end;<br><br>procedure SetshellHook(hnd:HWND);<br>begin<br>&nbsp; hHook1:=SetwindowsHookEx(WH_SHELL,TaskHookProc,hInstance,0);<br>&nbsp; if hHook1 &lt;=0 then messagebox(0,'hookError','task',16);<br>end;<br><br>procedure RemoveshellHook;<br>begin<br>&nbsp; &nbsp;UnhookWindowsHookEx(hhook1);<br>end;<br>
 
呵呵, 查查吧, &nbsp;好多的<br>这于windows 的memory 管理有关.<br>简单的说 ,你用 createmapfile 创建内存印象. &nbsp; 然后 &nbsp;传递 application.handle .就可以用了
 
begin<br>// DLL 初始化部分<br>HookMutex:=CreateMutex(nil,True,HOOK_MUTEX_NAME);<br>// 通过建立内存映象文件以共享内存<br>MemFile:=OpenFileMapping(FILE_MAP_WRITE,False,<br>HOOK_MEM_FILENAME);<br>if MemFile=0 then<br>MemFile:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,<br>SizeOf(TShared) ,HOOK_MEM_FILENAME);<br>Shared:=MapViewOfFile(MemFile,File_MAP_WRITE,0,0,0);<br>ReleaseMutex(HookMutex);<br>CloseHandle(HookMutex);<br>ProcSaveExit := ExitProc; // 保存DLL的ExitProc<br>ExitProc := @KeyHookExit; // 设置DLL新的ExitProc<br>end.<br>
 
一般而言,只有放在DLL中的Hook才能钩到其他进程的消息。
 
接受答案了.
 
后退
顶部