先上300分,不够再加300分,高手请进。(delphi 控制 vb)(300分)

  • 主题发起人 主题发起人 errun
  • 开始时间 开始时间
E

errun

Unregistered / Unconfirmed
GUEST, unregistred user!
<br>因为工作需要,我要用DELPHI来编程实现操作另一VB程序的目的(VB程序只有可执行文件)<br>我要实现的就是先打开VB程序,在界面(formA)上单击一个按钮,弹出另外一个界面(formB),再在上面的输入框中输入一些信息,然后再单击一个按键即可。<br><br>我用工具查看了一下,VB的FORM类是ThunderRT6FormDC(两个FORM都是一样了)<br>我的主要程序如下:<br> 回调函数:<br>function enumuserproc(hwnd:integer;lparam:longint):boolean;stdcall;<br>var<br>&nbsp;buffer:array[0..255] of char;<br>begin<br>&nbsp;result:=true;<br>&nbsp;getwindowtext(hwnd,buffer,256);<br>&nbsp;if buffer=str then &nbsp;begin<br>&nbsp; &nbsp; sendmessage(hwnd,wm_lbuttondown,mk_lbutton,0);<br>&nbsp; &nbsp; sendmessage(hwnd,wm_lbuttonup,mk_lbutton,0);<br>&nbsp;end;<br>end;<br><br>  button中代码:<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; hwnd:integer;<br>begin<br>&nbsp; hwnd:=findwindow(nil,'资料传输');//'资料传输'是FORM2的标题<br>&nbsp; if hwnd&lt;&gt;0 then begin<br>&nbsp; &nbsp; str:='上传设置';//按钮名<br>&nbsp; &nbsp; enumchildwindows(hwnd,@enumuserproc,0);<br>&nbsp; end;<br>&nbsp; hwnd:=findwindow(nil,'设置');//'设置'是FORM2的标题<br>&nbsp; if hwnd&lt;&gt;0 then begin<br>&nbsp; &nbsp; str:='确定';//按钮名<br>&nbsp; &nbsp; enumchildwindows(hwnd,@enumuserproc,0);<br>&nbsp; end;<br>end;<br><br>程序想实现两个FORM上按钮的自动单击。<br>但是,我在DLEPHI程序上第一次单击按钮后,没有效果,<br>第二次单击按钮后,VB程序的form2出现,但此时并没有出现单击form2上按钮的效果(form2上的‘确定’按钮,没有被自动单击),delphi的程序就好像死掉一样,不能对其进行任何操作。但只要关闭VB的form2程序,delphi程序又自动恢复正常。<br><br>我尝试用delphi作了有两个form的程序作被调用的测试,但结果一切正常。<br><br>请问为什么VB的程序我要两次按按钮后才能调用,而且会出现上面所述的问题??????<br>有什么方法可以解决。<br>代码可以发到:zjg_aynes@hotmail.com
 
在回调函数中用sendmessage发按钮消息不好吧<br>建设在回调函数中只返回按钮的句柄<br><br>然后在外部用postmessage发模似按键的消息<br>
 
哪应该如何修改呢?<br>我试试看
 
hwnd:=findwindow('ThunderRT6FormDC','资料传输');<br><br>function enumuserproc(hwnd:integer;lparam:longint):boolean;stdcall;<br>var<br>&nbsp;buffer:array[0..255] of char;<br>begin<br>&nbsp;result:=true;<br>&nbsp;getclassname(hwnd,buffer,256);<br>&nbsp;if not SameText(strpas(buffer),'ThunderRT6CommandButton') then<br>&nbsp; &nbsp;exit;<br><br>&nbsp;getwindowtext(hwnd,buffer,256);<br>&nbsp;if buffer=str then &nbsp;begin<br>&nbsp; &nbsp; sendmessage(hwnd,wm_lbuttondown,mk_lbutton,0);<br>&nbsp; &nbsp; sendmessage(hwnd,wm_lbuttonup,mk_lbutton,0);<br>&nbsp; &nbsp; sendmessage(hwnd,wm_lbuttondown,mk_lbutton,0); &nbsp;//重复一次[:)]<br>&nbsp; &nbsp; sendmessage(hwnd,wm_lbuttonup,mk_lbutton,0);<br>&nbsp; &nbsp; result:=false;<br>&nbsp;end;<br>end;<br><br>然后脱离IDE后运行试试看如何
 
是进程间的问题,用两个线程作就没问题了。
 
to aynes<br>&nbsp; &nbsp;可以了,谢了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部