注册 登录
编程论坛 VB6论坛

如何调用exe文件后获得返回结果

hfq 发布于 2016-12-26 17:23, 5147 次点击
已经编好一个exe文件A(Text1用来输入数据,Text2用来输出数据)。我想编一个测试程序B(Command1是“测试”按钮),点击B中“测试”按钮→调用打开A→将测试数据传给A→A的运行结果返回到B。

我的方法是:
第一步:在B中用ShellExecute函数将数据传到A中
第二步:在B中用FindWindow去找句柄。(这一步失败。情况1:若我在运行B之前就打开了A,那么我运行B后获取的句柄是之前已经打开的A程序的句柄。情况2:若我只打开B程序而没有打开A,则句柄为0,即找不到句柄)

所以我的遇到的问题是,findwindow只能找到之前已经打开的程序的句柄,但我要的是用ShellExecute新打开一个程序,然后找到句柄。
已经想了快一礼拜了。快疯了。求指点,谢谢!!

代码如下:
Private Sub Command4_Click()
Dim m, r, t As Long
Dim a As String * 1024
r = ShellExecute(0, "open", App.Path & "\" & Label1.Caption & ".exe", " 899", "0", 1)
m = FindWindow("ThunderRT6FormDC", "Form1")
End Sub
4 回复
#2
风吹过b2016-12-26 19:13
你这个 R 返回的是什么?

返回值
执行成功会返回应用程序句柄
返回的HINSTANCE可以将它转换为一个整数(%d),并比较它的值大于还是小于32或比较它的错误代码
返回值大于32表示执行成功
返回值小于32表示执行错误
返回值可能的错误有: = 0 {内存不足}
ERROR_FILE_NOT_FOUND = 2; {文件名错误}
ERROR_PATH_NOT_FOUND = 3; {路径名错误}
ERROR_BAD_FORMAT = 11; {EXE 文件无效}
SE_ERR_SHARE = 26; {发生共享错误}
SE_ERR_ASSOCINCOMPLETE = 27; {文件名不完全或无效}
SE_ERR_DDETIMEOUT = 28; {超时}
SE_ERR_DDEFAIL = 29; {DDE 事务失败}
SE_ERR_DDEBUSY = 30; {正在处理其他 DDE 事务而不能完成该 DDE 事务}
SE_ERR_NOASSOC = 31; {没有相关联的应用程序}
#3
风吹过b2016-12-26 19:53
你这个代码有一个问题,window是多进程的os ,你调用外部进程后,window后台正在启动外部进程,而你的代码开始查找进程,这时进程正在启动,怎么能查到?
#4
hfq2016-12-27 11:41
回复 2楼 风吹过b
返回值是42
#5
hfq2016-12-27 12:01
回复 3楼 风吹过b
谢谢谢谢!真是太感谢了。我让程序等待一段时间再运行就可以了。

Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Dim Savetime As Double
Savetime = timeGetTime ’记下开始时的时间
While timeGetTime < Savetime + 3000  ’循环等待
    DoEvents  ’转让控制权,以便让操作系统处理其它的事件。
Wend
1