longteng670603753 2023-09-22 15:04 采纳率: 44.4%
浏览 27
已结题

VS2019 SPY++ 获取句柄操作

#怎么用SPY++ 点击 “ 打开程序”

img

img

img

hwnd 获取到了当前窗体的句柄,但是不知道怎么通过 这个窗口的句柄 获取 ” 打开程序“ 这个按钮的句柄

  • 写回答

9条回答 默认 最新

  • Leodong. 2023-09-22 16:58
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    【第一种实现方式】
    要获取"打开程序"按钮的句柄,你可以使用Spy++工具。首先,确保你已经安装了Spy++。然后按照以下步骤操作:

    1. 打开Spy++。
    2. 在Spy++窗口中,点击菜单栏的"Search",然后选择"Find Window"。
    3. 在"Find Window"对话框中,输入你想要查找的窗口类名,例如"Button"。
    4. 在"Search Subtree"选项卡中,点击"Search"按钮。
    5. Spy++将搜索并列出所有匹配的窗口。你应该能在列表中找到"打开程序"按钮。
    6. 选中"打开程序"按钮,然后在右侧的"Handle"列中查看其句柄。

    现在你已经获取了"打开程序"按钮的句柄,可以将其用于你的C#代码中。在你的代码中,可以将hwnd变量替换为从Spy++获取到的句柄值。例如:

    private void btnUploadProgramFromPLCF_Click(object sender, EventArgs e)
    {
        const int BM_CLICK = 0xF5;
        int buttonHandle = /* 从Spy++获取到的句柄值 */;
        SendMessage(buttonHandle, BM_CLICK, IntPtr.Zero, IntPtr.Zero);
    }
    

    请注意,你需要将/* 从Spy++获取到的句柄值 */替换为实际的句柄值。


    【第二种实现方式】
    要使用Spy++获取窗口句柄和控件句柄,您可以按照以下步骤进行操作:

    1. 打开Spy++:在Visual Studio中,选择“工具(Tools)”菜单,然后选择“Spy++”选项。

    2. 启动目标程序:在Spy++中,选择“搜索(Search)”菜单,然后选择“查找窗口(Find Window)”选项。在弹出的对话框中,选择目标程序的窗口,然后点击“确定”。

    3. 获取窗口句柄:在Spy++中,选择目标程序的窗口,可以看到窗口的句柄(Window Handle)。将窗口句柄记录下来,以便后续使用。

    4. 获取控件句柄:在Spy++中,选择“搜索(Search)”菜单,然后选择“查找(Find)”选项。在弹出的对话框中,选择“句柄(Handle)”选项卡,并输入窗口句柄。点击“查找下一个(Find Next)”按钮,可以查找到该窗口下的所有控件句柄。

    5. 记录按钮句柄:找到您需要的按钮控件后,将按钮的句柄记录下来,以便后续使用。

    在您的C#代码中,通过使用窗口句柄和控件句柄,您可以执行相应的操作。以下是一个示例:

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
    
    private const int BM_CLICK = 0xF5;
    
    // 在按钮点击事件中执行点击操作
    private void btnUploadProgramFromPLC_Click(object sender, EventArgs e)
    {
        IntPtr formHandle = FindWindow(null, "Form1"); // 根据窗口标题查找窗口句柄
        IntPtr buttonHandle = FindWindowEx(formHandle, IntPtr.Zero, "WindowsForms10.BUTTON.app.0.141b42a_r7_ad1", null); // 根据控件类名查找按钮句柄
    
        // 发送点击消息给按钮
        SendMessage(buttonHandle, BM_CLICK, IntPtr.Zero, IntPtr.Zero);
    }
    

    请注意,以上示例中的窗口标题和控件类名是根据您提供的信息推测的,如果不准确,请根据实际情况进行调整。

    希望这能帮助到您!如果您有任何其他问题,请随时提问。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 10月3日
  • 已采纳回答 9月25日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 Pyqt 如何正确的关掉Qthread,并且释放其中的锁?
  • ¥30 网站服务器通过node.js部署了一个项目!前端访问失败
  • ¥15 WPS访问权限不足怎么解决
  • ¥15 java幂等控制问题
  • ¥15 海湾GST-DJ-N500
  • ¥15 氧化掩蔽层与注入条件关系
  • ¥15 Django DRF 如何反序列化得到Python对象类型数据
  • ¥15 多数据源与Hystrix的冲突
  • ¥15 如何在线硕士了解,广告太多,希望有真实接触过的人回答下?(标签-学习|关键词-在线硕士)
  • ¥15 zabbix6.4与frp如何进行联动