簡體   English   中英

可能有Win32應用程序阻止直到退出?

[英]Possible to have Win32 application block until it exits?

當我在Windows( cmd )中打開命令行並啟動程序(例如calc ,提示符將立即返回並啟動程序(顯示計算器窗口)。

這與我從Linux領域了解到的情況相反:當我啟動(可能是通過GUI)應用程序時,直到退出退出的程序,提示才會返回。

示例:計算器仍在運行,但是用戶已經可以在提示符下輸入新命令

使用w32 api,是否可以對其進行編程,以便我的應用程序顯示一個窗口,但是僅在用戶關閉窗口后才返回提示?

可能有Win32應用程序阻止直到退出?

調用 CreateProcess創建過程。 這將產生對返回的 PROCESSINFORMATION結構中的過程的句柄。 將該過程句柄傳遞給 WaitForSingleObject以等待直到發出該過程信號為止。


根據評論,您似乎真正想要的是一個可執行文件,當其父進程是控制台應用程序時,其行為將類似於控制台應用程序。 並且表現得像GUI應用程序。 不可能從單個可執行文件中同時執行這兩個操作。 目標子系統由可執行文件中的元數據確定。

處理此問題的標准方法是擁有兩個可執行文件,每個可執行文件針對不同的子系統。 一個是控制台應用程序,另一個是GUI應用程序。 常見的示例是java.exe和javaw.exe,python.exe和pythonw.exe。

使用w32 api,是否可以對其進行編程,以便我的應用程序顯示一個窗口,但是僅在用戶關閉窗口后才返回提示?

我認為這里有幾個問題。

首先,如何在Windows中創建進程? 要創建Windows進程,請使用CreateProcess

第二, CreateProcess如何工作? CreateProcess顯然會創建一個新進程(例如calc.exe ),並且它提供了許多創建進程的選項。 它還會返回BOOL來通知您呼叫是否成功。

如果呼叫失敗,您將立即失敗。 這是一個“同步”失敗,您可以繼續執行過程。

在調用成功的情況下,您的過程與孩子“分離”了。 它更像是對函數的“異步”調用。 您可以與子進程同步,並且可以通過等待PROCESS_INFORMATION結構的hProcess成員來了解其已退出。

第三,並不是每個人都從命令行啟動進程。 可以通過在桌面上單擊將其啟動。 在Linux / X11(et al)世界中也是如此。

第四,我相信您可以在Windows命令行中將CALL用於其他批處理文件。 但我不記得它是否也適用於程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM