我用一个c# 程序 通过spy++ 获取到另外一个程序的 按钮句柄 进行点击操作无效(测试的软件已经正常打开了);
我用此方法测试了 电脑自带的 计算器程序可以正常使用 代码如下
1 IntPtr okbtn = new IntPtr(0x0A0970); //spy++ 获取到的按钮句柄 2 const uint BM_CLICK = 0xF5; 3 System.Threading.Thread.Sleep(1000); 4 SendMessage(okbtn, BM_CLICK, 0, 0);
我测试几个程序发现 spy++ 获取的按钮 类名是 “Button” 都可以正常发送按钮点击操作;而我要控制的程序 不能操作的按钮 用spy++ 获取的类名是“TsBitBtn”;
同样我测试了文本框也是一样 其他程序类名为“Edit”的文本框可以正常用SendMessage(hWnd, WM_SETTEXT, IntPtr.Zero, lParam);发送文本;而我要控制的程序spy++获取的文本框类名是“TsEdit”,就控制不了
求解决,谢谢大家
解决不了,除非你知道对方的源码。
按钮可以试一下发送键盘消息Enter试试。
文本框可以试试把文本拆分成单个字符然后用键盘消息发送。
谢谢大哥的回复 我尝试了 发enter消息 没有变化
我用此方法试了其他部分程序是可以的 但是我要控制的那个程序 就好像是没有获取到句柄一样没有回应 但是我直接用spy++ 确实获到取我要控制的程序的句柄 直接操作的 还是不行
@wolly: 实在不行就取Button坐标,发鼠标点击事件吧。
既然明确了不是系统标准BUTTON窗口,而是“TsBitBtn”,那这个按钮未必对BM_CLICK有处理啊
先确定“TsBitBtn”内部用的什么消息
你调试看了句柄获取到了吗?你可以通过按钮的类名和标题名去获取他的句柄,有的控件句柄是一直变的,而且你获取的文本框它上一层是否还嵌套着控件...你先判断句柄是否得到吧