你修改一下B程序不可以吗?在B程序中的Main入口函数加入string[] args参数,然后再运行程序的时候,把Main函数改为
string ss="";
if (args.Length>0)
ss=args[0];
Application.Run(new Form1(ss));
假如你的textbox控件在Form1里面的话。然后在A程序中这样启动B程序:
System.Diagnostics.Process.Start("B.exe","aaaa");
这样那个Form1就可以将这个ss值赋给textbox了。
所以,不能更改b,实现自动输入,提交等动作。谢谢各位!继续
你的办法比较简单并且可行,但是,呵呵:)
这里关键是有个前提就是不能修改B。
进程间通讯和数据交换有多种方式:消息、共享内存、匿名(命名)管道等等几种方式,但是任何进程都是不能无限被其他进程控制的,只有有限实现定义好的接口可以被外部进程共享使用。所以绝对不修改B是不现实的。我在你的另一篇帖子中用SendMessage 来实现数据传递,当然,接受消息的一方要定义好接受以后的动作。http://expert.csdn.net/Expert/topic/1099/1099171.xml?temp=.2949488
1. 如果知道Caption的话,直接用API FindWindow可以找到特定的窗口。
2. 否则,用EnumWindows,检查所有窗口,直到发现由B创建的(用GetWindowModuleFileName)。找到特定的窗口之后,可以用EnumChildWindows取得这个窗口里面所有控件的句柄,然后向这些控件发送消息。
有些控件消息不能用这种法师发送,因为消息参数可能包含指针等进程相关的信息,跨过进程边界之后这些东东就失效了。
可以尝试用Reflection把B加载到A的进程空间里来,这样就为所欲为了。:)
而且,这些服务也很有可能是通过其他IPC机制工作的,例如Named Pipe或者共享内存等。