台灣最大程式設計社群網站
線上人數
1606
 
會員總數:240682
討論主題:186539
歡迎您免費加入會員
討論區列表 >> VB6 >> 開啟外部執行檔後N秒關閉
[ 變換順序 ]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
開啟外部執行檔後N秒關閉
價值 : 20 QP  點閱數:262 回應數:16

樓主

ChenLo
門外漢
0 1
34 6
發送站內信

小弟昨天剛碰觸VB6
還有很多問題需要學習


但是目前卡在一個CommandButton開啟外部執行檔(*.exe)後
1.
System.Threading.Sleep (3000)
Shell "cmd.exe /c TaskKill /F /IM *.exe"
這個方法會顯示Error 424

2.
新增Timer設定N秒後sendkeys ESC關閉外部執行檔
但這個方法只要project1.exe不關閉 他就會無限迴圈

請問各位大師有什麼比較好的做法
請給我提示就好,我想要慢慢找出錯誤

拜託各位了

搜尋相關Tags的文章: [ CommandButton ] , [ Timer ] ,
本篇文章發表於2017-07-27 10:03
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

P陳
檢舉此回應
將 timer1 關掉即可

timer1.enabled=false
本篇文章回覆於2017-07-27 10:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

小魚
檢舉此回應
Error 424好像是需要物件,
你應該是用WinForm或WPF的吧,
在Load事件直接處理物件會出現這樣的情況,
所以你用了Timer就可以使用了,
因為物件已經建起來了,

另外你的問題牽扯到你是用什麼方法去做這個動作,
因為你說得不清楚所以只能用猜的,
我猜你可能要用另一個執行緒去執行這個動作,
而且外部的程式基本上不用動到主Form,
如果會影響到主Form的動作,
還要使用委派.
本篇文章回覆於2017-07-27 12:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

ChenLo
檢舉此回應
P陳:可是 timer1.enabled=false 之後他就不會N秒後按ESC了

小魚:簡單來說 就是我想要CommandButton按下之後在N秒後按ESC
可是有一個timer1再無限迴圈 就一定要把project.exe關閉後才會停
本篇文章回覆於2017-07-27 19:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

小魚
檢舉此回應
沒看到Code不能肯定,
不過你可以Debug看看有沒有觸發到鍵盤事件,
你如果Timer關掉那個程式會跟著關閉嗎?
如果可以的話按下ESC的時候關閉Timer看看。
本篇文章回覆於2017-07-27 20:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

ChenLo
檢舉此回應
小魚:我目前是這樣用
Private Sub Timer1_Timer()

SendKeys "{esc}"
Timer1.Enabled = False

End Sub

Private Sub 啟動_Click(Index As Integer)

Timer1.Enabled = True
Shell "cmd.exe /c start *.exe"
Shell "cmd.exe /c TaskKill /F /IM Pcaui.exe"
End Sub


Private Sub 連結_Click(Index As Integer)

Shell "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe " & "https://www.****/"

End Sub
本篇文章回覆於2017-07-28 00:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

ChenLo
檢舉此回應
小魚: 不小心按到確定= =

這樣子是可以關閉*.exe
但是外部執行檔如果不是在置頂視窗的話沒辦法關閉
本篇文章回覆於2017-07-28 00:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

P陳
檢舉此回應
如果是初學 請從VB.net 入手

這段怪怪的 (start 後 馬上又 taskKill 了)


好像要這樣才對 (這樣才是 N秒後 送ESC 及 執行 TaskKill)

本篇文章回覆於2017-07-28 05:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

P陳
檢舉此回應
VB.net 我是用 Process 來關掉 TASK 的 (但不知 VB6 有沒有)

請參考
Dim Process1 As Process
For Each Process1 In Process.GetProcesses
If Process1.ProcessName = "Pcaui" Then
Process1.Kill()
End If
Next
本篇文章回覆於2017-07-28 05:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

ChenLo
檢舉此回應
P陳: 因為pcaui.exe是開啟*.exe之後會先跳出的一個win7有關相容性問題的視窗
關掉之後才會跳出*.exe

啟動按鈕-> 跳出pcaui.exe-> 執行*.exe
所以如果是先發送ESC再執行TaskKill 會沒有辦法正確的關閉*.exe

而且啟動按鈕下去之後pcaui.exe是會馬上跳出
然後終止後過大約1~2秒才會跳出*.exe
本篇文章回覆於2017-07-28 06:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

ChenLo
檢舉此回應
P陳:還是有其他語法可以不透過cmd來達成關閉應用程式

因為用tkaskkill的話 程式還是在藏在處理程序裡面
要進去工作管理員結束之後*.exe才能再度開啟
本篇文章回覆於2017-07-28 06:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

小魚
檢舉此回應
我很好奇 *.exe 是什麼東東,
還是說這是馬賽克,
其實只是一個程式的名字?
本篇文章回覆於2017-07-28 07:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

小魚
檢舉此回應
另一個問題,
你有試過用執行緒讓他跑嗎?
有強制開啟*.exe的時候原本的Form不能做其他事嗎?
如果要獨立作業的話,
可以考慮用一個執行緒去跑*.exe
本篇文章回覆於2017-07-28 07:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

P陳
檢舉此回應
當您按下 啟動 時會去開 *.exe
3秒後
A. Send esc 2.關 Pcaui
再 1秒
A.關 *.exe B.停 timer1

您的意思是這樣嗎?



本篇文章回覆於2017-07-28 09:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

ChenLo
檢舉此回應
小魚: 其實也只是一個想自己試試看能力到哪裡而已^_^"

P陳:有關這個問題我是已經解決了
他的流程是 按下啟動同時使用taskkill關閉pucui.exe
在過2~3秒後發送esc

只是我現在要用checkbox設定打勾後才可以點選啟動
If check1.vuale = "1" then
start.enabled = true
他這邊會找不到enabled的選項
本篇文章回覆於2017-07-28 23:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

P陳
檢舉此回應
start.enabled = true

應該是 啟動.enabled 吧
本篇文章回覆於2017-07-29 06:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   

回覆
如要回應,請先登入.