MFC取得桌面图标信息,名称与坐标

本文介绍了一种通过编程方式抓取Windows桌面图标信息的方法,包括图标名称及坐标等,并提供了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

桌面信息是跟explorer.exe息息相关的,我们感兴趣的信息便可以在里面找到。

获取它的句柄后,我们可以发送一系列的消息,将我们所感兴趣的信息列举下来,一系列的初始化代码:

if(((hWnd = FindWindowEx(NULL, NULL, “Progman”, NULL)) == NULL) ||
((hWnd = FindWindowEx(hWnd, NULL, “SHELLDLL_DefView”, NULL)) == NULL) ||
((hWnd = FindWindowEx(hWnd, NULL, “SysListView32″, NULL)) == NULL))
{
MessageBox(“Could not get desktop window.”);
}

这段代码不难理解,这便是要寻找桌面窗口的句柄。

接下来代码:

GetWindowThreadProcessId(hWnd, &dwPID);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
pData = VirtualAllocEx(hProcess, NULL, ALLOC_SIZE, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
pString = VirtualAllocEx(hProcess, NULL, ALLOC_SIZE, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
pPt = VirtualAllocEx(hProcess, NULL, ALLOC_SIZE, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);

接着向初始化好的内存中写入:

WriteProcessMemory(hProcess, pData, &lvi, sizeof(LVITEM), &BytesWritten);

接下来便是发送消息吧。

得到桌面图标个数:

::SendMessage(hWnd, LVM_GETITEMCOUNT, (WPARAM)0, (LPARAM)0);

返回值便是一个int类型值。

获取相应图标名称:

::SendMessage(hWnd, LVM_GETITEMTEXT, (WPARAM)count, (LPARAM)pData);
ReadProcessMemory(hProcess, pString, szText, ALLOC_SIZE, &BytesRead);

count为相应第几个图标,szText中则为存贮的信息。

获取相应图标坐标:

POINT pt;
::SendMessage(hWnd,LVM_GETITEMPOSITION,(WPARAM)count,(LPARAM)pPt);
fResult = ReadProcessMemory(hProcess, pPt, &pt, sizeof(POINT), &BytesRead);

pt即为所得。

效果如图:


原文链接:http://www.limou.net/?p=780


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值