WEB开发网
开发学院软件开发VC 遍历和查找外部程序Tree-View中的项目 阅读

遍历和查找外部程序Tree-View中的项目

 2007-10-04 20:11:12 来源:WEB开发网   
核心提示:用SPY++的[Find Window]功能获得目标TV的句柄;将句柄值输入到TV_Demo_SeqShow中的[Tree-View Control''s Handle:];点击[GO!];如果你把[Windows 资源管理器]中的[文件夹]作为目标,那你可要作好心理准备了…&hellip

用SPY++的[Find Window]功能获得目标TV的句柄;

将句柄值输入到TV_Demo_SeqShow中的[Tree-View Control''s Handle:];

点击[GO!];

如果你把[Windows 资源管理器]中的[文件夹]作为目标,那你可要作好心理准备了……如果实在忍受不了这种刺激,干脆把管理器关掉就可以了。

第二部分:查找外部程序Tree-View中的项目

一:程序说明:

我们已经成功得对外部程序Tree-View中的项目进行了遍历,如果能在遍历的过程中读取每一个项目的名称,结合我们给定的项目名进行比较,那么查找某个项目的问题将变得易如反掌。由此可见:关键的问题是如何读取项目的名称。

读取项目的名称要发送TVM_GETITEM消息,由于该消息需要为LPARAM参数提供一个TV_ITEM结构的地址,在跨进程发送消息的前提下,为了使外部程序正常使用该内存地址,所以我们必须将TV_ITEM结构插入到目标进程的地址空间中去,代码如下:

ptvitem=(TVITEM*)VirtualAllocEx(hProcess,NULL,sizeof(TVITEM),MEM_COMMIT,PAGE_READWRITE);//分配内存
WriteProcessMemory(hProcess,ptvitem,&tvitem,sizeof(TVITEM),NULL);//写入内存
在写入内存之前,要将TV_ITEM结构配置好:  tvitem.mask=TVIF_TEXT;
   tvitem.cchTextMax=512;
   tvitem.pszText=pItem;
mask要设置成TVIF_TEXT,因为我们需要的是pszText的值;cchTextMax可以设置得稍微大一些,cchTextMax=512即可;hItem的值用来指定究竟哪个项目来接收TVM_GETITEM消息,该值在遍历的过程中动态获得;重要的是用来存放项目名称的缓冲区地址,即pszText参数的设置:和TV_ITEM结构一样,也要把她插入到目标进程的地址空间中去:pItem=(char*)VirtualAllocEx(hProcess,NULL,16,MEM_COMMIT,PAGE_READWRITE);二:具体实践:

作为演示,下面的这段程序将在我们指定的Tree-View控件中查找我们需要的项目,在发现第一个部分匹配的项目后,程序将停止运行,不再进行查找操作。作为演示程序,程序并没有做速度上的优化,大家在具体应用的过程中可自行修改。程序找到目标后的效果图(图 三):

上一页  1 2 3 4  下一页

Tags:遍历 查找 外部

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接