如题,
   现在我软件1可以确认使用c#的windform写的一个传递数据信息的窗体
   软件2是公司给我的一个已经做好可用软件,并且我也不知道软件2是什么语言编写的(注意给我的时候没有该软件的源代码,只有可运行的界面,软件2可以是窗体,可以使网站并不固定)要求:我编写的代码只能在软件1写(因为软件2只是个界面,不能操作软件2源码),怎么把软件1里数据传递到软件2中呢,之间怎么联系(如软件1有一个文本框 里面值是2 ,我怎么把这个2 数据传递到软件2里面某个文本框让他值为 2 呢)编程语言软件

解决方案 »

  1.   

    windows消息、socket(tcp、udp)通信是比较好的。尤其是socket灵活不受限制
      

  2.   


    哈哈,同情楼主!
    这种情况,以前也碰到过,第三方是一个牛气哄哄的公司,我当时的解决办法是这样:
    1  首先通过windows API 找到该程序(exe的名称,exe打开后 窗体 title 的名称),对应好,开始
    2  置顶该form,(也就是软件2),将form 移动到指定的坐标点。
    3  将各个需要录入字段的 textBox 的位置存储到一个xml 中,(如果分辨率不一致会影响软件2的窗口控件位置,重新计算分辨率),然后读取到一个列表数组中。
    4  根据列表数组和位置对应,每个出现的位置发送一个点击命令,然后发送一个 剪贴板的 ctrl +V 命令,顺序录完,在发送一个点击命令在 软件2 的提交按钮。自动录入结束...
      

  3.   

    另一个解决方法也差不多,
    楼主先测试一下,点击窗口标题位置后,按 tab 键,看光标焦点是不是顺序切换到不同的 textbox,如果是顺序切换,或有规律切换,也可以不存储各个各个字段位置,直接在在软件2置顶,点击title,依次发送 tab 命令和 ctrl +V 命令即可。
      

  4.   


    对,大概是意思,我也不想这么复杂,因为软件1是我们公司要求要做的软件, 软件2是别人公司软件,就是相当于我自己公司做一款软件1工具,给其他公司 软件2录入数据,(别的公司软件2也可以录入数据,但每次要手动录入数据,而我做好的这款,就可以让他自动填上数据,省去了好多不便之处)这是有客户需求额的,,思路:
    游戏外挂、按键精灵、
    使用WINDOWS鼠标键盘消息机制,
    Send鼠标键盘消息到软件2的录入界面上,模拟人工操作。
      

  5.   


    对,大概是意思,我也不想这么复杂,因为软件1是我们公司要求要做的软件, 软件2是别人公司软件,就是相当于我自己公司做一款软件1工具,给其他公司 软件2录入数据,(别的公司软件2也可以录入数据,但每次要手动录入数据,而我做好的这款,就可以让他自动填上数据,省去了好多不便之处)这是有客户需求额的,,思路:
    游戏外挂、按键精灵、
    使用WINDOWS鼠标键盘消息机制,
    Send鼠标键盘消息到软件2的录入界面上,模拟人工操作。
    如果软件2是网页,则模拟http 进行 get、post数据。
      

  6.   


    十分感谢你的回答,我想知道你这个方法对与软件2不是c#windform写的,是其他语言写的,如java,c,c++等,而且有可能不是窗体程序,有可能是网站,也可以的实用吗,你上面说 -- 将各个需要录入字段的 textBox 的位置存储到一个xml 中 --这里的textbox位置怎么去,什么意思呢。非常感谢
      

  7.   

    我可不可以理解为UI的自动化呢,自动抓到网页上面ui元素,然后付值呢
      

  8.   

    up 18楼,使用windows API获取句柄是最有效的
      

  9.   

    windows api好像只能获得窗体的句柄,但是如果是网站中的网页的控件就获得不了
      

  10.   

    windows api好像只能获得窗体的句柄,但是如果是网站中的网页的控件就获得不了
    你的意思是你的软件用的是http协议的网页吗?
      

  11.   

    windows api好像只能获得窗体的句柄,但是如果是网站中的网页的控件就获得不了
    你的意思是你的软件用的是http协议的网页吗?不是我软件1是用windform写的窗体, 软件2可能是窗体,也可能是网站中的网页 
      

  12.   

    tcp 需要握手吧 udp。。但是 又无法操作软件2.。。那怎么传。
    excel之间 也得都打开吧。
      

  13.   


    对,难点就在这里,我想了好多天了,还是不能解决,要疯了!!!!!!!不过目前觉得 用windows api  可以试试   难点在于定位软件2 文本框的位置   需要不断尝试吧   个人观点
      

  14.   

    每个控件都有句柄~
    这个可以做的
    你查下WINDOWS API的对应方法吧
    HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName)
    BOOL SetWindowText(HWND hwnd,LPCTSTR lpStrjng)根据进程名字获取进程的句柄
    再根据控件的名字以及窗体的名字获取控件的句柄
    将文本赋值给指定句柄的控件
      

  15.   

    还是socket吧,
    TCP/IP协议是通用的。或者,如果你指的不是传递数据包,,是软件通信的话可以用接口。
      

  16.   


    不同语言写的网站控件,读不到句柄,,这个想法只能实现一小部分的如果是网站的话   那就模拟http 进行 get、post数据
    这个方法是可行的~
    当然  具体情况具体分析
    这也只是一个思路
      

  17.   

    获取类名和句柄,用API SetWindowText设置其内容。
      

  18.   


    对,大概是意思,我也不想这么复杂,因为软件1是我们公司要求要做的软件, 软件2是别人公司软件,就是相当于我自己公司做一款软件1工具,给其他公司 软件2录入数据,(别的公司软件2也可以录入数据,但每次要手动录入数据,而我做好的这款,就可以让他自动填上数据,省去了好多不便之处)这是有客户需求额的,,既然是软件1的功能,是代替手动的录入数据,那你要看平常是用的方式弄入进数据呀,
    1、打开软件2,一笔一笔的输入数据,提交;
    2、打开软件2,导入TXT文件或EXECL,提交。
    具体看你是用的哪一种 ,如果是第一种,那你要可以根据数据库的字段,写一个接口程序,直接用第二种模式或者自动把相关数据写入软件2的数据库内,不就OK了???
      

  19.   

    楼主的问题属于自动化测试中经常遇到的问题,说白了就是GUI的各种操作罢了,用C#的话很简单,有个库叫UIAutomation,啥都能干了
      

  20.   

    软件2是客户端程序的话,可以试下用windows API去实现!
    如果是网页的话直接post到对方的URL!
      

  21.   


    很感谢,不知道前辈有这方面的代码吗。。可以贴上来吗
    首先你先下一个叫UISpy的工具,这个工具可以捕获控件信息,然后根据捕获的控件信息进行操作,一般都是先找到相应元素对象,然后调用对象提供的方法即可,代码就我就不写了,网上一搜一大片
      

  22.   

    楼主,分太少了;我先告诉你答案;你可以考虑加到一百分再送出来;首先,你要EXE1控制,EXE2;必须为两个程序都打开才行;解决办法,EXE1时时检查EXE2运行否,通过PROCESS.START(EXE2路径);打开EXE2;
    第二步:所为的参数就是数据,而在不同程序间像你想要的那样传,只有两个东西.一是字符串,二是事件;
    解决办法为先找到窗口,再得到控件.设置它的值或者发送按键或者鼠标信息;
    FINDWINDOW('EXE2 TITLE'NIL); enumwindows枚举控件;得到你想要的控件;SETTEXT(??)设置值;
     SENDMESSAGE(??)发送事件;因为我做过,所以这些名字记得大概,楼主自己去了解清楚就好了.楼主开帖太少了.我开帖都是一百分的.不然谁花时间来回答你的问题呢... 
      

  23.   

    一个人吃鱼翅,不代表着他就能跑到捕沙鲨鱼的远洋船上去当船长。如果你自己都深入不了“软件2”,不能重写它,甚至你都不能列举它所有需要接受数据的机制而只能含糊其辞地描述“软件2”,那么那些随便在csdn上能找到的只言片语式的回答,是解决不了你的问题的。这个问题我认为你只能搁置。不如先把“软件2”废弃掉,到那个时候再说。
      

  24.   

    菜鸡插插嘴,会不会他们textbox中的内容放在配置ini中,找到ini直接去修改。
      

  25.   

    取窗口句柄,取控件句柄,往控件里面填数据...FindWindow 之类的函数,自己去查吧。C#没做过,VC做比较简单
      

  26.   

    使用vs自带的spy 工具查看窗口资源,可以看到句柄之类的内容
      

  27.   


    很感谢,不知道前辈有这方面的代码吗。。可以贴上来吗
    首先你先下一个叫UISpy的工具,这个工具可以捕获控件信息,然后根据捕获的控件信息进行操作,一般都是先找到相应元素对象,然后调用对象提供的方法即可,代码就我就不写了,网上一搜一大片请问这个方法对网站的网页控件有用吗,还是说只对窗体呢,比如获得给网页的文本框传值等
      

  28.   


    很感谢,不知道前辈有这方面的代码吗。。可以贴上来吗
    首先你先下一个叫UISpy的工具,这个工具可以捕获控件信息,然后根据捕获的控件信息进行操作,一般都是先找到相应元素对象,然后调用对象提供的方法即可,代码就我就不写了,网上一搜一大片请问这个方法对网站的网页控件有用吗,还是说只对窗体呢,比如获得给网页的文本框传值等网页得用另一种方法,其实网页更加容易,不论操作什么,都是先获取HTMLElement对象,然后调用相应方法即可,都在Microsoft.mshtml.dll里面,具体的你网上一搜一大片
      

  29.   

    spy看能捕获到不.能捕获就api直接付值.
    不然就模拟鼠标,键盘来实现,