关闭

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

标签: mfcnullaccess
1022人阅读 评论(3) 收藏 举报
分类:

桌面信息是跟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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:45632次
    • 积分:551
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:31篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论