获取桌面图标位置

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

获取桌面图标位置. 2k, 98 方法不同.

////////////////// for NT based /////////////////////

/* 取桌面 ListView 的句柄 */

HWND hDeskTop;

hDeskTop = FindWindow("progman", NULL);

hDeskTop = FindWindowEx(hDeskTop, 0, "shelldll_defview", NULL);

hDeskTop = FindWindowEx(hDeskTop, 0, "syslistview32", NULL);

/* 取 explorer.exe 句柄. 注意 OpenProcess 的参数 */

DWORD dwProcessId;

GetWindowThreadProcessId(hDeskTop, &dwProcessId);

HANDLE hProcess = OpenProcess(PROCESS_VM_READ | PROCESS_VM_OPERATION, FALSE, dw

ProcessId);

/* 在 explorer.exe 空间内分配内存 */

PVOID pv = VirtualAllocEx(hProcess, NULL, sizeof(POINT), MEM_COMMIT, PAGE_READW

RITE);

/* 给桌面 ListView 窗口发一 LVM_GETITEMPOSITION 取 "我的电脑" 坐标 */

ListView_GetItemPosition(hDeskTop, 1, pv);

/* 把由 LVM_GETITEMPOSITION 获得的坐标数据复制到 pt 结构 */

POINT pt;

ReadProcessMemory(hProcess, pv, &pt, sizeof(POINT), NULL);

/* 释放内存, 句柄 */

VirtualFreeEx(hProcess, pv, 0, MEM_RELEASE);

CloseHandle(hProcess);

////////////////// for 9x /////////////////////

/* 取桌面 ListView 的句柄 */

HWND hDeskTop;

hDeskTop = FindWindow("progman", NULL);

hDeskTop = FindWindowEx(hDeskTop, 0, "shelldll_defview", NULL);

hDeskTop = FindWindowEx(hDeskTop, 0, "syslistview32", NULL);

/* 分配一共享内存 */

HANDLE hmm = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, s

izeof(POINT), NULL);

POINT * ppt;

ppt = (POINT *)MapViewOfFile(hmm, FILE_MAP_ALL_ACCESS, 0, 0, 0);

/* 给桌面 ListView 窗口发一 LVM_GETITEMPOSITION 取 "我的电脑" 坐标 */

ListView_GetItemPosition( hDeskTop, 0, ppt);

/* 释放内存. 对 ppt 的操作要在这之前做. */

UnmapViewOfFile(ppt);

CloseHandle(hmm);

不同版本的 EXPLORER 中, "我的电脑" 可能有不同的 index, 就是传给 ListView_GetItem

Position 的第 2 个参数. 2000 下是 1, 98 下似乎是 0.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航