如何通过编程控制另外一个程序 本人的要要求是:现在有一个现成的程序A,需要通过编写一个程序B去控制前程序A的启动、关闭及其它的一些操作,例如程序A里有文本框、日期选择列表框、还有一些按钮.......怎么才能通过程序B去填写文本、选择日期、点击按钮等,有没有高手写过这方面的代码。在线等 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你为什么要写一个B去控制A?A都有源代码了。 因为A程序是部署到服务器上的,要时时刻刻运行,但有时候会出现一些人为的失误或机器的故障造成A程序的以外停止/关掉,所以就需要另外一个监控程序了B去重新启动程序A了 public?在B里启动A,然后逮到某个窗体。然后创建引用给窗体控件赋值?话说源代码都有了,你干嘛不重新编码再编译下? 而且人不可能时时刻刻都到服务器上去查看的,如果只单单启动程序A就不用另外写一个监控程序,但是A程序上面有很多操作,所有这个B程序就非常有必要了。 查进程,发现进程里没有,就启动一个。Process.Start() [DllImport("User32.dll", EntryPoint = "FindWindow")] 使用应用程序域加载它然后考虑Remoting通信 用WindowAPI可以的。FindWindowFindWindowExSendMessageSET_TEXTGET_TEXT以前做过,不过不是C#的,是Delphi的。 你这个问题太难了 ……2个进程本来就不不同的内存空间里面 用一个程序控制另外一个很难的……我有2个办法……1.既然你有A,B程序的代码……你吧A要操作的东西每个都封装成一个函数……然后A运行以后 将这些函数地址发送到一个地方 保存起来用B程序去访问这些地址 并且记录下来,然后注入DLL到A里面,直接用汇编调用这个地址就行2.A程序开一个TCP连接……B连接 发送命令给A 并让A返回结果给B就OK 第2个比第1个麻烦点 但是要简单的多 全用sendmessage吧,找到你要操作控件的句柄,如给textbox写值 sendmessage(hwnd,WM_SETTEXT,0,"HelloWorld");如单击按钮 sendmessage(hwnd,WM_LButtonClick,0,0);至于WM_SETTEXT,WM_LButtonClick的值记不得,但在winuser.h文件里找得到的。 还有A程序应该要先获得程序B吧,接着就是获得B程序里的控件,再到sendmessage,这些要怎么写,最好就有一个完整的例子 参考下http://blog.csdn.net/lovefootball/archive/2007/09/14/1784882.aspx如果对API不了解的话先去补充下相关知识 这种东西用C#写不太好吧,用C 或者C++更好一点 其实我觉的没有必要这么做,B来检测A,可以,如果A意外的退出或者出错后,B重新启动A但是你想问的是A启动以后如何开始工作吧?比如说工作之前需要设置一些什么的。其实这些可以再第一次启动(也就是人为的启动服务)后,将设置之类的保存到一个文档里面,当A出现故障或者等等问题被B重新启动以后,就自动读取文档或者设置然后开始启动服务至于如何判断A是第一次启动(也就是不需要或者设置文档,而是由人为的设置,启动)还是由B启动的,可以通过判断设置文档是否存在之类的办法,也就是说A在人为的关闭服务退出的时候,自动删除设置文档,这样应该就可以了一个简单的想法,呵呵! 有兴趣的可以到这里下载,需要1资源分.http://download.csdn.net/source/1550580 把程序A发过来,本人帮你写好这个程序B;e:[email protected] 有源码就好办了。最简单的办法就是HOOK. 钩子. C# winform如何判断进程中已运行的程序 C#如何才能登录上163.com的pop3服务器 判断选择内网或者外网连接问题? 压缩下载代码 c#中抓取网页时,乱码问题 C#开发C++ 有没有用vb.net做过明华RD-EB接触式IC卡的读写操作,麻烦朋友给个例子,希望得到大家的帮助,谢谢 介绍几个C#的开源网站 C#里的数据库事务是否支持非sa身份对数据库的操作???我这里事务代码报错,但用sa登陆则可以 咄咄怪事,大家来看看 C#如何从pdf中抽取文本 窗体和控件如何适应不同分辨率
在B里启动A,然后逮到某个窗体。然后创建引用给窗体控件赋值?
话说源代码都有了,你干嘛不重新编码再编译下?
然后考虑Remoting通信
FindWindow
FindWindowEx
SendMessage
SET_TEXT
GET_TEXT以前做过,不过不是C#的,是Delphi的。
2个进程本来就不不同的内存空间里面
用一个程序控制另外一个很难的……
我有2个办法……
1.
既然你有A,B程序的代码……你吧A要操作的东西每个都封装成一个函数……
然后A运行以后 将这些函数地址发送到一个地方 保存起来用B程序去访问这些地址 并且记录下来,然后注入DLL到A里面,直接用汇编调用这个地址就行2.
A程序开一个TCP连接……
B连接 发送命令给A 并让A返回结果给B就OK 第2个比第1个麻烦点 但是要简单的多
找到你要操作控件的句柄,
如给textbox写值 sendmessage(hwnd,WM_SETTEXT,0,"HelloWorld");
如单击按钮 sendmessage(hwnd,WM_LButtonClick,0,0);
至于WM_SETTEXT,WM_LButtonClick的值记不得,但在winuser.h文件里找得到的。
http://blog.csdn.net/lovefootball/archive/2007/09/14/1784882.aspx如果对API不了解的话
先去补充下相关知识
但是你想问的是A启动以后如何开始工作吧?比如说工作之前需要设置一些什么的。其实这些可以再第一次启动(也就是人为的启动服务)后,将设置之类的保存到一个文档里面,当A出现故障或者等等问题被B重新启动以后,就自动读取文档或者设置然后开始启动服务
至于如何判断A是第一次启动(也就是不需要或者设置文档,而是由人为的设置,启动)还是由B启动的,可以通过判断设置文档是否存在之类的办法,也就是说A在人为的关闭服务退出的时候,自动删除设置文档,这样应该就可以了
一个简单的想法,呵呵!
http://download.csdn.net/source/1550580
e:[email protected]
最简单的办法就是HOOK. 钩子.