C#通过句柄操作“第三方应用程序“

前言

下面展示一部分代码,全部放在百度网盘上去了,最底下附上链接

用到工具主要有VS自带的SPY++工具

下面以抓取这四个软件软件中的按钮和菜单并单击作为实验对象

  1. 抓取"STM32 ST-LINK Utility" 的"Traget"菜单中的子菜单 "Connect"。

我们从Spy++工具抓取的结果可以看出,并没有抓取到"Traget"菜单的句柄。

查了不少资料,也问了不少大佬,下面提供一直方法可以顺利找到菜单的句柄并,并操作对应的子菜单(标注有详细注释)

            const int WM_COMMAND = 0x0111; 
            const int MF_BYCOMMAND = 0x00000000;
            const int MAX_MENU_STRING_LENGTH = 256;
            // 找到主窗体句柄
            IntPtr stmHandle = FindWindow(null, "STM32 ST-LINK Utility");
            SetForegroundwindow(stmHandle);
            //拿到了菜单句柄
            IntPtr po = GetMenu(stmHandle);
            // 菜单数量是不是7个
            int count = GetMenuItemCount(po);//7个菜单
            //拿到页面菜单中的额 Traget
            IntPtr submenuHandle = GetSubMenu(po, 3);
            textBox3.Text = submenuHandle.ToString();
            //统计Traget中子菜单个数
            int count1 = GetMenuItemCount(submenuHandle);
            // 获取子菜单项ID
            uint openFileMenuItemId = GetMenuItemID(submenuHandle, Convert.ToInt32 (8));
            textBox2.Text = openFileMenuItemId.ToString ();
            // 获取子菜单名称
            StringBuilder sb = new StringBuilder(MAX_MENU_STRING_LENGTH);
            int length = GetMenuString(submenuHandle, openFileMenuItemId, sb, MAX_MENU_STRING_LENGTH, MF_BYCOMMAND);
            string menuName = sb.ToString(0, length);
            textBox1.Text = menuName;
            // 模拟单击子菜单项
            try
            {
                SendMessage(stmHandle, WM_COMMAND, new IntPtr(openFileMenuItemId), IntPtr.Zero);
            }
            catch (Exception ex) { }

2.抓取"Renesas Flash Programmer V2.05"的"Start"按钮并点击。

抓取这个就比较简单了,因为从Spy++工具抓取来看能抓取到"Start"按钮的句柄

3.抓取"ProWriter","加载工程"按钮并单击。

抓取这个就要注意了因为一级主窗体下面有三个主菜单对话框

我们要找的"加载工程"按钮的信息在第一个子菜单里面

要拿到按钮的句柄就先指定按钮所在的窗体是哪一个

最后附上链接:

百度云:

链接:https://pan.baidu.com/s/10HSWbjRvQ5YqjSH7kxLN5A?pwd=6666

提取码:6666

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值