fuyu0409701
41864
|
2011/9/19 11:38:41 |
XP 5.1 |
fuyu0409701
41863
|
2011/9/19 11:36:41 |
除了UNHOOK有效,其它按钮都无效 |
fuyu0409701
41862
|
2011/9/19 9:09:46 |
HookSG--lichengbin 这个里面的HOOK后没有任何变化,获取不了数据,不知道为什么? |
hupeh
34503
|
2008/6/6 14:53:35 |
我测试过了,如果目标是C++Builder写的程序,可以HOOK成功,但无法获取。 有没有办法读C++Builder写的程序? |
qwestar
23220
|
2006/4/26 16:02:06 |
学习中,谢谢! |
siow
14385
|
2005/4/27 12:51:52 |
如果目标程序是其它语言写的呢?比如PB |
lichina
13017
|
2005/3/6 22:06:25 |
能否取得其他程序的DBGrid中的数据呢? |
liumazi
12962
|
2005/3/1 11:48:59 |
看来还是要利用Hook进去, :D |
lichengbin
12951
|
2005/3/1 9:14:24 |
麻子兄,上面的代码在9x下不行。VirtualAllocEx/VirtualFreeEx只能工作于NT内核的系统平台下。 |
liumazi
12943
|
2005/2/28 23:42:03 |
对阿, 就是取其他进程 ListView 内容的, 不过在 9x 不知道是否可以, 因为不清楚是否支持远程内存分配, 我这边只装了 XP, :-) |
vagrant
12753
|
2005/2/23 9:12:34 |
liumazi 你这个是做什么的? 是取得其它程序的ListView吗? |
liumazi
12681
|
2005/2/20 13:41:22 |
uses CommCtrl;
function ListView_GetItemText_Ex(hwndLV: HWND; i, iSubItem: Integer; pszText: PChar; cchTextMax: Integer): Integer; var LVItem: TLVItem; ProcessID, ProcessHD, Temp: DWORD; MemPoint: Pointer; begin GetWindowThreadProcessId(hwndLV, ProcessID);
ProcessHD := OpenProcess( PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, FALSE, ProcessID);
MemPoint := VirtualAllocEx(ProcessHD, nil, SizeOf(TLVItem) + cchTextMax, MEM_COMMIT, PAGE_READWRITE);
LVItem.iSubItem := iSubItem; LVItem.cchTextMax := cchTextMax; LVItem.pszText := PChar(Integer(MemPoint) + SizeOf(TLVItem)); WriteProcessMemory(ProcessHD, MemPoint, @LVItem, SizeOf(TLVItem), Temp); Result := SendMessage(hwndLV, LVM_GETITEMTEXT, i, Integer(MemPoint));
ReadProcessMemory(ProcessHD, Pointer(Integer(MemPoint) + SizeOf(TLVItem)), pszText, cchTextMax, Temp);
VirtualFreeEx(ProcessHD, MemPoint, SizeOf(TLVItem) + cchTextMax, MEM_DECOMMIT); VirtualFreeEx(ProcessHD, MemPoint, 0, MEM_RELEASE); end;
procedure TForm1.Button1Click(Sender: TObject); var TextBuffer: array[0..100] of Char; begin ListView_GetItemText_Ex($01590346, 0, 0, TextBuffer, 100); ShowMessage(TextBuffer); end; |
pnnyy
12572
|
2005/2/17 12:26:40 |
我也试试,如果可以读其它程序的ListView就更好了。 |
gemouzhi2
12475
|
2005/2/5 14:53:28 |
谢谢lichengbin大哥的指点和提的问题,小弟改进一下。。。。 li大哥的文章是读的很爽的,呵呵。。。。 |
lichengbin
12470
|
2005/2/5 10:33:54 |
谢谢gemouzi兄! gemouzi兄采用远程线程注入DLL,通过发送线程消息进行Hook控制,思路很好。我之所以采用钩子(实际上可以只针对目标线程挂钩子)注入DLL,是因为那样一来代码写起来简单容易理解一些,二来CreateRemoteThread在Win98下是没有实现的,基于通用性的考虑。 不过,gemouzi兄现在的代码还有一点点问题,启动后第一次可以Hook获取到StringGrid的列数,当Stop之后重新再Start,就不能正确返回列数啦。 |
|
|