delphi执行外部程序等待程序运行成功,而不是程序退出

回味一下 2009-12-27 04:22:12
我想用delphi执行一个外部程序,等外部程序完全运行(这个程序不能关闭),并取得这个外部程序中的Edit句柄
在主程序运行的时候需要外部程序辅助,我现在用CreateProcess运行程序以后,因为程序太快edit句柄有时取不到,如何等待,这个外部程序完全打开了,再往下读句柄
...全文
1154 34 打赏 收藏 举报
写回复
34 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
chengran1984 2012-05-11
  • 打赏
  • 举报
回复
做个标记,虽然我也遇到了同样的问题,但是好像这个帖子里面没有实际的解决到楼主的问题。
回味一下 2010-01-22
  • 打赏
  • 举报
回复
我的软件上没有输入,运行成功了再点击一个按钮,全是软件控制的
CreateProcess(nil,zAppName,nil,nil,false,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,zCurDir,StartupInfo,ProcessInfo)
我用这个打开了一个软件,但是这个软件运行时会读写一个文件,读写的这个文件不以默认文件夹了,我用opendilag打个哪个文件夹就建到哪个文件夹,我要怎么写这个函数的能参数
我用了以上函数就出现问题,怎么把读写文件都在这个软件的默认目录,不在默认目录程序运行就出错了
无条件为你 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 daijie_1 的回复:]
我想用delphi执行一个外部程序,等外部程序完全运行(这个程序不能关闭),并取得这个外部程序中的Edit句柄
在主程序运行的时候需要外部程序辅助,我现在用CreateProcess运行程序以后,因为程序太快edit句柄有时取不到,如何等待,这个外部程序完全打开了,再往下读句柄
[/Quote]

把你要控制的外部程序发给我,我帮你写代码。你留下QQ。
cnzdgs 2010-01-09
  • 打赏
  • 举报
回复
你的目的不是要等新进程窗口初始化完毕吗?我前面回复的函数不能满足你的要求吗?
[Quote=引用 5 楼 cnzdgs 的回复:]
WaitForInputIdle
[/Quote]
回味一下 2010-01-08
  • 打赏
  • 举报
回复
加分了,这回可以回答了吧,我也不知道要加分啊,有要求提,只要能实现目标
回味一下 2010-01-08
  • 打赏
  • 举报
回复
不会有输入的,运行成功以后就自动运行别的了,你这等于死循环
Bear_hx 2010-01-08
  • 打赏
  • 举报
回复
应该把两个结合起来,先用WinExecAndWait32,然后用WaitForInputIdle,有用户输入了,肯定就成功了
回味一下 2010-01-08
  • 打赏
  • 举报
回复
我个方法我会,就是不准所以才想要找一段准确的等软件完全运行的代码,因为我取的是软件中第几个控件,我做好编号的,如果没有完全运行,就会取错控件句柄
starwlj 2010-01-08
  • 打赏
  • 举报
回复
简单的办法就是CreateProcess创建进程后不要等待进程退出,
自己写sleep等待一个时间段后再进行下一步操作获取,获取不到等待一段时间再重试
无条件为你 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 daijie_1 的回复:]
怎么没有人能回答我的问题啊,这个不好监测?
[/Quote]

不是没有人回答,是你不愿意加分。
无条件为你 2010-01-06
  • 打赏
  • 举报
回复
楼主只要加分,代码10行内,精短实现楼主要求,正如我12楼所述。
ahjoe 2010-01-05
  • 打赏
  • 举报
回复
什么叫运行成功了?
回味一下 2010-01-04
  • 打赏
  • 举报
回复
我现在就是想知道,如何来叛断,我的进程完全起来了,虽说起一个软件的时间很短,但是往往在这最短的时候会出现错误,造成程序出错
回味一下 2010-01-04
  • 打赏
  • 举报
回复
怎么没有人能回答我的问题啊,这个不好监测?
sanguomi 2010-01-02
  • 打赏
  • 举报
回复
开个线程,一直去遍历进程,看开启的EXE的进程是否起来了
如果起来了 执行你要的操作
回味一下 2010-01-02
  • 打赏
  • 举报
回复
我试了一下两位的代码,一个是死循环,一个是外部程序打开了一直在那等,直到我手动关闭这个程序才会返回;都不能实现我想要的功能, 其实我是想自动控制拔号软件,如果等拔号软件关闭了才有返回那我拔号还有什么意义,拔号软件一关我的程序上不了网,就没有往下写的意义了,如果程序没有完全打开我就取句柄,取的句柄不准确,也实现不了我的功能.请有经验的大哥给指点一下
回味一下 2010-01-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 iseekcode 的回复:]
引用 3 楼 daijie_1 的回复:
iseekcode你的代码能保证我运行的外部程序在运行吗,不能退出我在以后还要用他,你的代理我看怎么像要等外部程序关闭以后才会返回啊


注意这句:
while WaitforSingleObject(ProcessInfo.hProcess, 10) = WAIT_TIMEOUT

你可以修改10这个值。


WaitforSingleObject参数:
Parameters
hHandle [in]
A handle to the object. For a list of the object types whose handles can be specified, see the following Remarks section.

If this handle is closed while the wait is still pending, the function's behavior is undefined.

The handle must have the SYNCHRONIZE access right. For more information, see Standard Access Rights.

dwMilliseconds [in]
The time-out interval, in milliseconds. If a nonzero value is specified, the function waits until the object is signaled or the interval elapses. If dwMilliseconds is zero, the function does not enter a wait state if the object is not signaled; it always returns immediately. If dwMilliseconds is INFINITE, the function will return only when the object is signaled.

Return Value
If the function succeeds, the return value indicates the event that caused the function to return. It can be one of the following values.

[/Quote]

iseekcode 请问一下我要如何来修改这个值,使等待程序完全运行完毕后返回,并不让打开的程序退出
请指点1 2,初次使用这个

还有huhuc朋友对你发的程序意图不太明白,可否解释一下,功能和实现的效果;

slmax1 2009-12-30
  • 打赏
  • 举报
回复
还有汇编,
hjkto 2009-12-30
  • 打赏
  • 举报
回复
我是说整段代码部分,没太看懂
hjkto 2009-12-30
  • 打赏
  • 举报
回复
14楼的代码,关于汇编部分的作用,有哪位高手注释一下。
加载更多回复(14)
发帖
Windows SDK/API

1177

社区成员

Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
帖子事件
创建了帖子
2009-12-27 04:22
社区公告
暂无公告