捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:获取其他程序中的StringGrid的内容
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,就不能正确返回列数啦。
第一页 上一页 下一页 最后页 有 15 条纪录 共1页 1 - 15
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表