你修改一下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了。

解决方案 »

  1.   

    这样的话,很多东西都要由b来做了,比如如果要实现自动提交也就是输入完成后,自动触发b德button控件,这样需要对b进行很多更改!
    所以,不能更改b,实现自动输入,提交等动作。谢谢各位!继续
      

  2.   

    有个笨办法,建立一个文件data,A程序有内容发给B时就把数据写到这个文件data,对于接收数据的B程序则可在其中引入一timer控件,在timer_tick()事件中,读出文件data中的数据,然后就可满足你启动button1或改变textbox什么的要求了。
      

  3.   

    ZSharp(张夏普):
    你的办法比较简单并且可行,但是,呵呵:)
    这里关键是有个前提就是不能修改B。
      

  4.   

    CNET,
    进程间通讯和数据交换有多种方式:消息、共享内存、匿名(命名)管道等等几种方式,但是任何进程都是不能无限被其他进程控制的,只有有限实现定义好的接口可以被外部进程共享使用。所以绝对不修改B是不现实的。我在你的另一篇帖子中用SendMessage 来实现数据传递,当然,接受消息的一方要定义好接受以后的动作。http://expert.csdn.net/Expert/topic/1099/1099171.xml?temp=.2949488
      

  5.   

    >> 但是如果要控制外部程序,只能得到外部程序自身的句柄,却无法得到外部程序具体控件的句柄。只要你知道这个外部程序的窗口的一些特征,得到句柄也不是很困难:
    1. 如果知道Caption的话,直接用API FindWindow可以找到特定的窗口。
    2. 否则,用EnumWindows,检查所有窗口,直到发现由B创建的(用GetWindowModuleFileName)。找到特定的窗口之后,可以用EnumChildWindows取得这个窗口里面所有控件的句柄,然后向这些控件发送消息。
      

  6.   

    这种做法的限制是只能发送非常原始的消息,例如鼠标和键盘。
    有些控件消息不能用这种法师发送,因为消息参数可能包含指针等进程相关的信息,跨过进程边界之后这些东东就失效了。
    可以尝试用Reflection把B加载到A的进程空间里来,这样就为所欲为了。:)
      

  7.   

    我还是想问怎么样给系统服务程序发消息,因为系统服务程序没有winform,找不到控制句柄.
      

  8.   

    可以用PostThreadMessage, 但是即使这些服务是使用消息工作的,那些通常也会是自定义消息,你也需要知道所有这些消息的定义。
    而且,这些服务也很有可能是通过其他IPC机制工作的,例如Named Pipe或者共享内存等。