您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:44 来源:vckbase.com

本文章共1559字,分2页,当前第1页,快速翻页:
 

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

作者:天津 赵春生

下载源代码
逆@风@者

一:程序说明:

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

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

LVM_GETITEMTEXT

wParam = (WPARAM) (int) iItem;

lParam = (LPARAM) (LV_ITEM FAR *) pitem;



LVM_SETITEMSTATE

wParam = (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消息》
 

本文章更多内容1 - 2 - 下一页>>
相关文章

在VC中调用 WebService (非托管)
自动查找并删除VC生成的临时文件
一步步制作真彩工具条
如何定制浮动工具条
一个完善的ODBC数据库程序
一个简单的时钟程序
利用OpenGL实现动画效果
实现类似Excel和Visual C 里文件夹式样的标
深入浅出 CPropertySheet
对《一个简单的学生成绩管理系统》优化的一
用C#语言实现http协议下的多线程文件传输
如何提取网页中所有链接
DCT快速变换
think window procedure
关于CEdit控件的透明 --作者:monsoon
创建分层窗口,实现图像渐变
关于调试时输出的字符串信息
SendMessage和PostMessage,total ordering
用udp协议通讯示例
用VC 制作QQ自动登陆软件

相关评论


本文章所属分类:首页 VC++

  热门关键字: