如何选中其他程序ListView控件中的某个Item

2016-01-29 12:08 66 1 收藏

如何选中其他程序ListView控件中的某个Item,如何选中其他程序ListView控件中的某个Item

【 tulaoshi.com - C语言心得技巧 】

如何选中其他程序ListView控件中的某个Item

作者:天津 赵春生

下载源代码

一:程序说明:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)

题目是一位网友在我留言板上的留言,不知道大家看没看过我曾经写过的《如何向其他程序的ListView控件发送LVM_GETITEMTEXT消息》一文?在那篇拙文中,我的目的是得到某一Item的TEXT。于是我将LVITEM结构插入到了目标进程中,才使得目标进程正确响应LVM_GETITEMTEXT消息。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)

要得到某一Item的TEXT,需要发送LVM_GETITEMTEXT消息,而要选中某个Item则要发送LVM_SETITEMSTATE消息:

LVM_GETITEMTEXTwParam = (WPARAM) (int) iItem;lParam = (LPARAM) (LV_ITEM FAR *) pitem;LVM_SETITEMSTATEwParam = (WPARAM) (int) i;lParam = (LPARAM) (LV_ITEM FAR *) pitem;
看到了吗?两个消息的参数一模一样!再来看看LV_ITEM结构的设置:只需将state和stateMask设置成LVIS_SELECTED,并指定iItem即可。直接修改上篇拙文中的代码就能轻松搞定本篇要解决的问题。

作为演示,下面的这段程序将选中TaskManager中第6个项目。

二:具体实践:

/* *Send LVM_SETITEMSTATE *版权所有 (C) 2005 天津 赵春生 *2005.08.04 *http://timw.yeah.net *http://timw.126.com *本程序适用于:Win2KP+SP4[Windows TaskManager(5.0.2195.6620)] * WinXP+SP1[Windows TaskManager] *代码在Win2000P+SP4 + VC6+SP6测试通过*/#include<windows.h>#include<commctrl.h>int APIENTRY WinMain(HINSTANCE hInstance,                     HINSTANCE hPrevInstance,                     LPSTR     lpCmdLine,                     int       nCmdShow) {HWND hwnd;int iItem=0;LVITEM lvitem, *plvitem;DWORD PID;HANDLE hProcess;hwnd=FindWindow("#32770","Windows 任务管理器");hwnd=FindWindowEx(hwnd,0,"#32770",0);hwnd=FindWindowEx(hwnd,0,"SysListView32",0);if (!hwnd)MessageBox(NULL,"[Windows 任务管理器] 尚未启动!","错误!",NULL);else{GetWindowThreadProcessId(hwnd, &PID);hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID);if (!hProcess)MessageBox(NULL,"获取进程句柄操作失败!","错误!",NULL);else{plvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM),MEM_COMMIT, PAGE_READWRITE);if (!plvitem)MessageBox(NULL,"无法分配内存!","错误!",NULL);else{MessageBox(NULL,"本演示程序将选中TaskManager中的第6个项目。","提示",NULL);iItem=5;//5在这里是第六个(从零开始)lvitem.state=LVIS_SELECTED;lvitem.stateMask=LVIS_SELECTED;WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL);SendMessage(hwnd, LVM_SETITEMSTATE, (WPARAM)iItem, (LPARAM)plvitem);}}}//释放内存CloseHandle(hwnd);CloseHandle(hProcess);VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE);return 0;}
三:以上代码在Win2000P+SP4 + VC6+SP6测试通过

源码也可从我的个人主页下载。
http://timw.yeah.net
http://timw.126.com

《如何向其他程序的ListView控件发送LVM_GETITEMTEXT消息》:
可通过搜索引擎获得。

来源:https://www.tulaoshi.com/n/20160129/1484777.html

延伸阅读
关于如何操作其他窗体的控件或变量的方法!其实解决的方法有很多,在这里只做简单的总结。1. 定义全局变量其实这个方法比较简单也很好理解,我们只要在一个module里面定义了两个全局变量就可以了。例如:public frm1 as new form1() Public frm2 as new form2()这样,我们无论在哪里想访问就很容易了。但是,这样做会耗费比较多的系统资源。一...
关于如何操作其他窗体的控件或变量的方法!其实解决的方法有很多,在这里只做简单的总结。对于其他方法,请多指教!1. 定义全局变量其实这个方法比较简单也很好理解,我们只要在一个module里面定义了两个全局变量就可以了。例如:public frm1 as new form1() Public frm2 as new form2()这样,我们无论在哪里想访问就很容易了。但是,这样做会...
如何清除iPhone存储中的“其他”   16 GB的iPhone和iPad的真相是,它们没有16 GB的可用空间, 它更像是12 GB。当看到自己的iPhone内存信息时候,忍不住要诅咒那个该死的其他。 是的,其他,贪婪地占用你的手机上有限的内存空间,却没有给你的生活增加任何价值。以下,有几个简单的方法来回收这些珍贵的空间。 第一步:删...
标签: Web开发
在Javascript中 利用 document.selection 可以创建 textRange。 但其实不是什么时候都可以创建的。 我们可以利用 document.selection.type 来判断当前选中的是文本还是对象。 document.selection.type 返回三个值 "None" "Text" "Control" 只有当返回值是 Text 时,创建...
标签: 办公软件
一天笔者收到上级一个紧急通知,但该通知是Word格式的文档,由于办公室的电脑前几天刚刚重装了系统,还没有安装Office办公软件,眼下又没有原安装光盘,非常地着急。 忽然笔者想到前几天Gmail刚刚推出的“Html下查看文档”的新功能,所以马上登录Gmail邮箱,然后给自己发送了一封带有附件的邮件,其中附件就是刚刚收到的通知,接着切...

经验教程

722

收藏

61
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部