获取其它进程中TreeView控件的内容

翻译|其它|编辑:郝浩|2007-10-30 09:57:10.000|阅读 1202 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

获取其它进程中TreeView控件的内容

extern "C" long EXPORT __stdcall GetRootItem (long Thwnd,char *filestr) {
           TVITEM tvi, *_tvi;             
           char *_item;
           char item[256];
           unsigned long pid;
           HANDLE process;
           long ret=(long)((CTreeCtrl*)CWnd::FromHandle((HWND)Thwnd))->GetRootItem();
           if (ret) {
/*
GetWindowThreadProcessId
说明
获取与指定窗口关联在一起的一个进程和线程标识符
返回值
Long,拥有窗口的线程的标识符
参数表
参数 类型及说明
lpdwProcessId Long,指定一个变量,用于装载拥有那个窗口的一个进程的标识符
hwnd Long,指定窗口句柄
*/
           GetWindowThreadProcessId((HWND)Thwnd, &pid);
           //用全部权限打开进程
           process=OpenProcess(PROCESS_VM_OPERATION |PROCESS_VM_READ | PROCESS_VM_WRITE |PROCESS_QUERY_INFORMATION, FALSE, pid);
           //给_lvi,_item分配进程级的虚拟内存空间
           _tvi=(TVITEM*)VirtualAllocEx(process, NULL, sizeof(TVITEM), MEM_COMMIT, PAGE_READWRITE);
           _item=(char*)VirtualAllocEx(process, NULL, 256, MEM_COMMIT, PAGE_READWRITE);
           tvi.cchTextMax=256;
           tvi.hItem=(HTREEITEM)ret;
           tvi.mask=TVIF_TEXT;
           tvi.pszText=_item;
           //把_lvi 写入进程
           WriteProcessMemory(process, _tvi, &tvi, sizeof(TVITEM), NULL);
           //发消息得到数据
           ::SendMessage((HWND)Thwnd, TVM_GETITEM, 0 , (LPARAM)_tvi);
           //从进程中读出数据
           ReadProcessMemory(process, _item, item, 256, NULL);
           //copy data
           memcpy(filestr,item,256);
           //free memory
           VirtualFreeEx(process, _tvi, 0, MEM_RELEASE);
           VirtualFreeEx(process, _item, 0, MEM_RELEASE);
         }
         return ret;
}
extern "C" long EXPORT __stdcall GetNextItem (HWND Thwnd,long next,char *filestr) {
           TVITEM tvi, *_tvi;
           char item[256];
           char *_item;
           unsigned long pid;
           HANDLE process;
           long ret=(long)((CTreeCtrl*)CWnd::FromHandle(Thwnd))->GetNextSiblingItem((HTREEITEM)next);
           if (ret) {
                      GetWindowThreadProcessId(Thwnd, &pid);
                      process=OpenProcess(PROCESS_VM_OPERATION |PROCESS_VM_READ |                       PROCESS_VM_WRITE |PROCESS_QUERY_INFORMATION, FALSE, pid);
                      _tvi=(TVITEM*)VirtualAllocEx(process, NULL, sizeof(TVITEM), MEM_COMMIT, PAGE_READWRITE);
                      _item=(char*)VirtualAllocEx(process, NULL, 256, MEM_COMMIT, PAGE_READWRITE);
                      tvi.cchTextMax=256;
                      tvi.hItem=(HTREEITEM)ret;
                      tvi.mask=TVIF_TEXT;
                      tvi.pszText=_item;
                      WriteProcessMemory(process, _tvi, &tvi, sizeof(TVITEM), NULL);
                      ::SendMessage(Thwnd, TVM_GETITEM, 0 , (LPARAM)_tvi);
                      ReadProcessMemory(process, _item, item, 256, NULL);
                      memcpy(filestr,item,256);
                      VirtualFreeEx(process, _tvi, 0, MEM_RELEASE);
                      VirtualFreeEx(process, _item, 0, MEM_RELEASE);
           }
           return ret;
}


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:csdn

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP