注册 登录
编程论坛 VC++/MFC

寻找桌面图标

lm68140318 发布于 2023-04-21 07:17, 865 次点击
一般都是双击桌面的图标启动程序的

比如:现在我想让程序自动寻找桌面的QQ图标的坐标,如何寻找  ??
2 回复
#2
东海ECS2023-04-21 19:08
要寻找桌面的QQ图标的坐标,可以使用Windows API中的FindWindow和FindWindowEx函数来找到该图标所在的窗口句柄和控件句柄,然后使用GetWindowRect函数获取该控件的坐标。

以下是一个C++的示例代码,可以自动寻找桌面的QQ图标的坐标:

程序代码:
#include <iostream>
#include <Windows.h>
using namespace std;

int main()
{
    HWND hDeskTopWnd = GetDesktopWindow(); // 获取桌面窗口句柄
    HWND hFolderWnd = FindWindowEx(hDeskTopWnd, NULL, "Progman", "Program Manager"); // 获取"Progman"窗口句柄

   
// 发送消息打开"Program Manager"窗口的子窗口
    SendMessage(hFolderWnd, 0x052C, NULL, NULL);
    SendMessage(hFolderWnd, 0x0110, NULL, NULL);
    SendMessage(hFolderWnd, 0x052C, NULL, NULL);

    // 获取"Program Manager"窗口下的所有子窗口
    HWND hWorkerWnd = NULL;
    while ((hWorkerWnd = FindWindowEx(hDeskTopWnd, hWorkerWnd, "WorkerW", NULL)) != NULL) {
        HWND hShellWnd = FindWindowEx(hWorkerWnd, NULL, "SHELLDLL_DefView", NULL); // 获取SHELLDLL_DefView窗口句柄
        if (hShellWnd != NULL) {
            HWND hShellViewWnd= FindWindowEx(hShellWnd, NULL, "SysListView32", "FolderView"); // 获取SysListView32窗口句柄
            if (hShellViewWnd != NULL) {
                // 获取SysListView32窗口的坐标
                RECT rect;
                GetWindowRect(hShellViewWnd, &rect);
                cout << "QQ icon's coordinates: (" << rect.left << ", " << rect.top << ")" << endl;
                break;
            }
        }
    }

    return 0;
}

注意,Windows API的操作需要管理员权限才能访问桌面上的图标,因此需要以管理员身份运行程序才能成功找到QQ图标的坐标。同时,程序中使用了一些Windows特定的常量和函数,需要包含Windows.h头文件,或者手动声明这些常量和函数。
#3
lm681403182023-04-22 20:58
SendMessage(hFolderWnd, 0x052C, NULL, NULL);
    SendMessage(hFolderWnd, 0x0110, NULL, NULL);
    SendMessage(hFolderWnd, 0x052C, NULL, NULL);


没有窗口打开  ??
1