自己VC控制别的软件解决方案

自己VC控制别的软件
一个老外的软件,我想通过我自己的VC程序来控制它。有办法不?比如点我程序的几个按钮,相当于点了它的对应的几个按钮。
  我用FindWindow得到了它的句柄m_hWnd。然后通过句柄给它发消息。因为不知道我想要控制的那几个按钮的ID号,所以我从100到90000循环发送消息.
  void CMainFrame::OnMagnifyPicture()
{

  ////发送一个按钮单击消息。IDcount ,我假设是ID号
while(IDcount < 90000)
{
SendMessage(WM_COMMAND,MAKEWPARAM(IDcount,BN_CLICKED),(LPARAM)m_hWnd); 
IDcount++;
}
CString pi;
pi.Format("%d",IDcount);
MessageBox(pi);
MessageBox("没反应!");
}
1)发现不是没反应,就是控制了我自己的写的软件。可是明明是老外那个软件的句柄,求解?
2)这个方法没见到效果后,我用SPY++查看老外的软件,发现我要控制的那几个按钮是Class: ToolbarWindow32,Style: 5000005D,而更蛋疼的是我总共想控制6个按钮,却发现是两两一对的ToolBar图片,就更没法精确控制每一个按钮了。
不知各位有思路实现没有?

------解决方案--------------------
1、你可以EnumChildWindow去找按钮
2、你的SendMessage实际上是this->SendMessage,你向自己发消息了,使用API就多一个参数
::SendMessage

 

------解决方案--------------------
::PostMessage(句柄)...
------解决方案--------------------
楼主你把老外软件发出来呗,我们也来做一下,做好了给你贴代码
------解决方案--------------------
EnumChildWindow里面需要用到的回调函数是你调用EnumChildWindow的时候调用的,也就说你不调用EnumChildWindow的话,回调函数也不会调用。


综上所述,如果你在按钮的事件处理程序里调用的话,回调函数就在按钮事件里调用
------解决方案--------------------
楼主,人家的按钮是Class: ToolbarWindow32,我估计你找到窗口句柄用处也不大,我看你还不如用SPY++,看看当你按下老外的那个按钮的时候,都引发了什么事件,你再依样画葫芦的给发那样的消息过去,我觉得可能还是比较靠谱的
------解决方案--------------------
EnumChildWindow是吧一个窗口的子窗口挨个给你枚举一遍,每次枚举一个子窗口的时候,就把你传给EnumChildWindow的那个函数指针调用一下,告诉你发现了一个子窗口。
------解决方案--------------------
最保险的是先FindWindow找到主窗体, 然后使用8楼的方法EnumChildWindow来找。 FindChildWindow不是很靠谱, 曾经试验过另一种控制对话框的程序。 另外, 用SPY++找出对方软件的ID号, 通过ID号找到句柄, 接着向这个句柄发送消息。 理论上是这样, 不过搞不清楚toolbar它的实现机制, 我没用过, 如果你知道的话, 就发送对应的消息。 另外, 有一种情况你需要搞清楚, toolbar是否支持跨进程消息传递机制(这样说应该不恰当, 因为很长时间没有写控件这样的东西了), 我记得 微软对 按钮以后开发的控件不支持这样的消息直接控制了(请注意描述还是不准确), 也就是说 对于获取某些信息等总是失败。 保证100%成功的最靠谱的方法是 使用一个DLL注入到指定进程, 然后通过自己的进程与指定的DLL进行通信, 通过注入的DLL发出实际的消息来控制进程的控制转向。
------解决方案--------------------
void CXXXDlg::OnBnClickedClock()
{
if(::FindWindow(NULL, "钟表"))
{
//MessageBox("您已经打开窗口了,请关闭后再打开,谢谢!", "温馨提示!", NULL);
clockdlg.OnBnClickedCancel();
return;
}
clockdlg.WndCreate(this); //把父窗口的指针传给子窗口 

}
------解决方案--------------------
简单的触发消息可以通过findwindow获取句柄
复杂的数据设置需要通过代码注入来完成
------解决方案--------------------
IDcount 这是你本地的吧,TOOLBAR是个内部结构,有消息可以获取里面的东西的
------解决方案--------------------
那个软件有没有什么接口提供啊?试试能不能直接用程序操控嘛
------解决方案--------------------
什么牛X软件 几个G?
------解决方案--------------------
探讨

折腾一半天,终于得到它的消息了。
WM_NCHITTEST
WM_NOTIFY
WM_SETCURSOR
TB_GETTOOLTIPS
TB_GETITEMRECT
WM_MOUSEMOVE...

------解决方案--------------------
探讨
引用:

引用:

折腾一半天,终于得到它的消息了。
WM_NCHITTEST
WM_NOTIFY
WM_SETCURSOR
TB_GETTOOLTIPS
TB_GETITEMRECT
WM_MOUSEMOVE...

找到鼠标抬起之后的消息

嗯,得到了,可以控制了,只不过我去猜它的ID,猜得蛋疼....

------解决方案--------------------