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

转载 2012年03月22日 09:32:33

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


不注入 枚举桌面图标名称与坐标

看到核心编程22章的 dips  线程钩子注入dll  保存与获取图标名称及坐标 想写个小程序直接枚举图标名称与坐标 没想到 LVM_GETITEMTEXT  的 LVITEM参数必须是listvie...
  • whitehack
  • whitehack
  • 2011年02月17日 22:06
  • 3574

读取Windows桌面图标的名字和位置,32bit程序读取64bit进程

关于读取Windows桌面的图标名字和位置,网上能找到很多现成的程序 例如 http://stackoverflow.com/questions/5369155/getting-text-from-s...
  • jackflit
  • jackflit
  • 2015年12月06日 22:08
  • 1406

如何获取当前GPS坐标附近最近的地点名称?

这两天公司群里发了一个滴滴打车司机端的截图 相当喜感,司机端显示的乘客上车地点居然叫: “当前位置” 这这这,你这让司机师傅很忧伤啊,地名都没,如何才能接到你? 无独有偶,正好我前段时间刚刚解决了...
  • zyktojo
  • zyktojo
  • 2017年05月04日 14:58
  • 486

MFC基本图形的绘制(二)坐标映射

在讨论坐标之前,先看下列语句: pDC->Rectangle(CRect(0,0,200,200)); 这是在某个设备环境中绘制一个高为200个像素,宽也为200个像素的方块。由于默认的映射模式是MM...
  • shufac
  • shufac
  • 2014年03月26日 00:28
  • 1319

C++遍历托盘图标,获取输出坐标等信息源码

#include #include #include #include #include using namespace std; typedef BOOL (WINAPI *LPFN_...
  • zhuofeilong
  • zhuofeilong
  • 2017年07月08日 17:30
  • 420

MFC各种坐标转换

在某个视图的WM_LBUTTONDOWN消息响应函数下做了一些试验,验证各种坐标系下的坐标转换。 注意:这里的窗口指 该视图以及包围它的边框所组成的区域。...
  • weili82830
  • weili82830
  • 2014年08月28日 17:45
  • 6918

iOS App桌面图标和名称

1、App桌面图标如下图: 2、App桌面名称如下图: OK!祝您生活愉快! 要是对您有用,问好,谢谢。...
  • u014068781
  • u014068781
  • 2016年08月13日 14:43
  • 1111

MFC获取控件在屏幕上的绝对坐标

通过鼠标点击事件可以获取控件在当前客户区的相对坐标,但有些时候不同地方获取的坐标值不一致,如,在派生PICTURE控件类内部的鼠标事件所获取的坐标值是相对该控件的,与在主窗体所获取的坐标是不对应的(无...
  • Kelvin_Yan
  • Kelvin_Yan
  • 2016年03月02日 12:28
  • 3267

MFC中关于设备(屏幕)坐标和逻辑坐标

设备坐标(Device Coordinate)又称为物理坐标(Physical Coordinate),是指输出设备上的坐标。通常将屏幕上的设备坐标称为屏幕坐标。设备坐标用对象距离窗口左上角的水平距离...
  • ylwdi
  • ylwdi
  • 2013年09月15日 16:35
  • 3505

精品代码收藏,AU3规划桌面图标坐标。

#NoTrayIcon #AutoIt3Wrapper_icon=D:\autoit3\Aut2Exe\Icons\FOLDER.ico #AutoIt3Wrapper_Compression=4...
  • nmgwddj
  • nmgwddj
  • 2011年11月28日 06:32
  • 1219
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC取得桌面图标信息,名称与坐标
举报原因:
原因补充:

(最多只允许输入30个字)