2014-01-29 65 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); 
} 
相关问题