2014-01-29 86 views
0

我在C++中有一個GUI。 GUI使用CreateProcess方法啓動另一個獨立的基於控制檯的應用程序。我通過在CreateProcess中傳遞CREATE_NO_WINDOW標誌來隱藏這些控制檯應用程序。現在我想讓它再次可見。我怎麼做?如何顯示由createprocess函數隱藏的控制檯應用程序窗口

+0

你不能。你有一次想要創建窗口並將其傳遞出去。該過程本身必須調用AllocConsole()。 –

+0

感謝您的回覆。如果我不能,那麼我如何實現這種功能。我想要的是,應該有兩個按鈕SHOW和HIDE,它們將顯示和隱藏由CreateProcess創建的控制檯應用程序窗口。爲此,我目前持有PROCESS_INFORMATION .. – Swapnil

回答

1

而不是使用CREATE_NO_WINDOW標誌,而是使用STARTUPINFO結構的wShowWindow成員來代替。最初將其設置爲SW_HIDE(並將dwFlags成員設置爲STARTF_USESHOWWINDOW),然後可以使用ShowWindow()在需要時顯示/隱藏控制檯窗口。要找到屬於新進程的窗口,請使用EnumWindows()GetWindowThreadProcessId()來查找其進程/線程ID與結構中返回CreateProcess()返回的ID相匹配的窗口。

+0

謝謝你的朋友...我用這種方法來獲得窗口句柄HWND。但是當我使用這個HWND在WINDOWS 7中顯示「mspaint.exe」窗口時,它在任務欄上出現了3個窗口,第一個是mspaint.exe,它不響應任何點擊,第二個是空白的GDI +窗口標題與GDI +和第三是完全空白,沒有任何標題,也沒有迴應..請給任何可靠的解決方案.... – Swapnil

0

你有一次想讓窗口創建並傳遞給它。這是正確的,但你可以在createProcess方法之後顯示或隱藏gui。

PROCESS_INFORMATION pi; 
STARTUPINFO si; 
ZeroMemory(&si,sizeof(si)); 
si.cb = sizeof(si); 
ZeroMemory(&pi, sizeof(pi); 
si.wShowWindow = SW_SHOW; 
si.dwFlags = STARTF_USESHOWWINDOW; 
si.lpTitle ="my_process_console"; 
CreateProcess(null,"my.exe",null,null,false,CREATE_NEW__CONSOLE,null,null,&si,&pi); 

我創建了process.Now我使用find方法,然後我可以顯示GUI。

HWND console_name =FindWindow(null,"my_process_console"); 
if(console_name){ 
    ShowWindow(console_name,SW_SHOW); 
} 
相關問題