长话短说,举个简单例子。
一个exe,运行后,窗体中出现一个菜单和两个txt控件。
可以在text1 控件中输入一个数,然后点击菜单的“求平方”按钮,text2显示出计算结果。现在我要自己写一个程序,通过我的程序向exe的text1控件发送一个数,然后向其菜单的按钮发送“click”,然后把text2中的结果取回来显示到我的程序中。求教大家!非常感谢。
help我这个现在还在加班的人吧。

解决方案 »

  1.   

    调用window api (好像是findwondiw)找到第一个程序的窗口句柄,然后根据这个句柄再找到按钮和文本框的句柄
    然后再调用window api  SetWindowText这个好像是这种控件的值SendMessage也可以做到,然后再用SendMessage给按钮发送一个点击的消息,具体api用法,消息值你再搜搜
      

  2.   

    调用按钮可以用 SendMessage 发送 WM_COMMAND 或者 WM_CLICK
    获得显示的数据要看那个是不是一个窗口控件,如果是,可以发 WM_GETTEXT 获得文本,否则,需要 Hook API 拦截 TextOut() API,同时强制刷新控件客户区,引发调用。
      

  3.   

    如果都会使用window api 了,那就查下相关函数就可以了吧,这个又没有涉及啥子逻辑
    当然我不熟悉那些api哈
      

  4.   

    你用spy++看下....sendmessage 信息给那个edit ...
      

  5.   

    其实你的exe的功能可以做成一个服务在后台一直运行,相当于一个守护进程。这样就简单多了,避免这种数值发送和获取的过程,不是很可靠。
      

  6.   

    呵呵,忽然想到一个搞笑的解决,打开Excel,在第一个格子取名为:text1,第二个格子取名为:平方结果(计算功能设置为text1平方),那么你的程序传值给Excel第一个格子text1,然后直接从第二个格子取结果。就完成功能了。c#对Excel的读取不难吧。
      

  7.   

    不是不是的,那么exe是别人做好的,不是我的,所谓平方只是举个例子。现在,我已经能够对2个txt控件进行读写了。但是,那个菜单栏的按钮却搞不定了。因为取得句柄是整个菜单栏的句柄,里面有好多图标,我如何给我需要按的那个图标发送按下的消息?
      

  8.   


    BOOL EnumSubWindowAll(HWND hMWnd, LPVOID lParam)//hMWnd是父窗口
    {
    hChildWnd = ::FindWindowEx(hMPWnd,NULL,NULL,NULL);
    while(hChildWnd)
    {
     EnumSubWindowAll(hChild,0);
     hChildWnd = ::FindWindowEx(hMPWnd,NULL,NULL,NULL);
    }
    } 遍历子窗体的子窗体...
      

  9.   

    不用那么复杂,.Net提供了专门用于解决这个问题的类库,UIAutomation详细信息,请参看以下地址:
    http://blog.csdn.net/wangyong0921/article/details/6693917