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

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 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教