鱼C论坛

 找回密码
 立即注册
查看: 651|回复: 2

桌面图标位置

[复制链接]
发表于 2023-4-21 07:17:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一般都是双击桌面的图标启动程序的

比如:现在我想让程序自动寻找桌面的QQ图标的坐标,如何寻找  ??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-21 11:42:37 | 显示全部楼层
要在Windows的MFC编程中自动寻找桌面上特定图标的坐标,可以通过以下几个步骤来实现:

1. 获取桌面窗口句柄:
HWND hDesktop = ::FindWindow(_T("Progman"), _T("Program Manager"));

2. 遍历桌面窗口的子窗口以获取所有图标:
BOOL CALLBACK EnumChildProc(HWND hWnd, LPARAM lParam)
{
    TCHAR className[MAX_PATH];
    ::GetClassName(hWnd, className, MAX_PATH);
    if (_tcscmp(className, _T("SHELLDLL_DefView")) == 0)
    {
        // 获取桌面图标所在的列表视图句柄
        HWND hListView = ::FindWindowEx(hWnd, NULL, _T("SysListView32"), NULL);

        // 调用查找图标的函数
        FindQQIcon(hListView);
    }
    return TRUE;
}

::EnumChildWindows(hDesktop, EnumChildProc, NULL);

3. 在查找图标的函数中遍历列表视图中的所有项目,找到需要的图标:
void FindQQIcon(HWND hListView)
{
    int nItemCount = ListView_GetItemCount(hListView);
    LVITEM item;
    TCHAR szText[MAX_PATH];

    for (int i = 0; i < nItemCount; i++)
    {
        memset(&item, 0, sizeof(LVITEM));
        item.mask = LVIF_TEXT;
        item.iItem = i;
        item.pszText = szText;
        item.cchTextMax = MAX_PATH;
        
        ListView_GetItem(hListView, &item);
        
        // 如果找到了"QQ"图标
        if (_tcsstr(szText, _T("QQ")) != NULL)
        {
            // 获取图标的矩形区域
            RECT rect;
            ListView_GetItemRect(hListView, i, &rect, LVIR_ICON);

            // 计算图标的中心坐标
            POINT ptIcon;
            ptIcon.x = rect.left + (rect.right - rect.left) / 2;
            ptIcon.y = rect.top + (rect.bottom - rect.top) / 2;

            // 在此处处理找到的图标坐标,例如将其保存在全局变量中
            // g_ptQQIcon = ptIcon;
            break;
        }
    }
}

上述代码示例遍历了桌面的图标,找到名为"QQ"的图标,并计算了它的中心坐标。当然,这只是一个示例,您可以根据需要修改查找条件和处理逻辑。

注意:这段代码需要包含以下头文件和库文件:
#include <Windows.h>
#include <tchar.h>
#include <CommCtrl.h>

#pragma comment(lib, "Comctl32.lib")

同时,您可能需要在项目设置中定义 _WIN32_IE 和 _WIN32_WINNT 的值。例如,将这些宏定义添加到预编译头中:
#define _WIN32_IE 0x0300
#define _WIN32_WINNT 0x0501



假设你已经成功获取了QQ图标的坐标,接下来你可能想要根据获取到的坐标执行一些操作。例如,你可以将鼠标移动到图标的位置并执行双击打开它。

要实现这个功能,你需要调用 `SetCursorPos` 函数设置鼠标位置,然后使用 `mouse_event` 函数(或 `SendInput`)模拟鼠标点击。以下是一个示例:
// 假设我们已经获取到了QQ图标的中心坐标,存储在 POINT ptIcon 结构中

// 移动鼠标到图标位置
::SetCursorPos(ptIcon.x, ptIcon.y);

// 模拟鼠标左键按下
::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);

// 延时一小段时间,模拟人类操作
::Sleep(100);

// 模拟鼠标左键抬起
::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

// 延时一小段时间,模拟人类操作
::Sleep(100);

// 再次模拟鼠标左键按下
::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);

// 延时一小段时间,模拟人类操作
::Sleep(100);

// 再次模拟鼠标左键抬起
::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

注意:上述代码只是一个简单的示例,实际应用中可能需要考虑其他因素,如检查目标窗口是否已打开、确保程序在各种屏幕分辨率下都能正常工作等。

这样,你的程序就能实现自动寻找桌面上的QQ图标的坐标,并根据坐标模拟鼠标双击操作。你可以将这些代码集成到你的MFC应用程序中,并根据实际需求进行适当的调整。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-22 10:04:26 | 显示全部楼层


要让程序自动寻找桌面上QQ图标的坐标,可以使用自动化工具来实现。以下是可能的步骤:

1. 使用自动化工具,如AutoHotkey、Selenium等,打开桌面。

2. 使用自动化工具中的图像识别功能,在桌面上搜索QQ图标的图像。可以使用QQ图标的截图来进行搜索。

3. 找到QQ图标的位置后,使用自动化工具中的坐标识别功能,获取QQ图标的坐标。

4. 将QQ图标的坐标保存到程序中,以便后续使用。

需要注意的是,自动化工具的具体操作方式可能因工具而异,具体实现方式需要根据具体工具的使用文档进行。另外,程序需要在桌面启动后才能进行搜索,因此需要考虑延迟等待桌面加载完成的时间。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 10:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表