/* CreateProcess initialization */
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(si));
memset(&pi, 0, sizeof(pi));
si.cb = sizeof(si);
long ret;
// si.wShowWindow = SW_HIDE;
// hide process window.... // run in background..
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
if (!CreateProcess(0, exe,
0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)) {
return;
}
//int prez = WaitForSingleObject(pi.hProcess, INFINITE);
//CloseHandle(pi.hProcess);
答案 0 :(得分:5)
您可以尝试将dwFlags
结构的STARTF_USESHOWWINDOW
成员设置为wShowWindow
,将SW_HIDE
成员设置为CreateProcess()
。
这会使nCmdShow
作为STARTUPINFO
的ShowWindow()
参数传递0。但是,并非所有Windows应用程序都表现良好,并将此值用于对{{1}}的初始调用。
答案 1 :(得分:0)
新流程的创建者不是您将新流程注册到任务栏中。这是创建顶级窗口的新过程,该窗口决定是否在任务栏中。此决定基于该顶级窗口的扩展样式,该窗口由新过程确定。
换句话说,为了做到这一点,你必须在这个其他过程的顶层窗口戳。
答案 2 :(得分:0)
您可以找到与已启动流程相关联的窗口(请参阅FindWindow
和EnumWindows
),然后使用ShowWindow
调用SW_HIDE
功能。或者,您可以删除WS_EX_APPWINDOW
并添加WS_EX_TOOLWINDOW
。
如果启动过程遵循设置,最简单的方法仍然是使用第一个答案中描述的STARTUPINFO。