/* 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);
问问题
7297 次
3 回答
5
您可以尝试将结构的dwFlags
成员设置为并将成员设置为。STARTUPINFO
STARTF_USESHOWWINDOW
wShowWindow
SW_HIDE
这将使CreateProcess()
传递 0 作为 的nCmdShow
参数WinMain
。但是,并非所有 Windows 应用程序都表现良好并使用此值来初始调用ShowWindow()
.
于 2011-01-21T15:51:25.437 回答
0
将新进程注册到任务栏中的不是您,新进程的创建者。它是创建一个决定是否在任务栏中的顶级窗口的新进程。此决定基于该顶级窗口的扩展样式,该样式由新进程确定。
换句话说,您必须在其他进程中戳顶级窗口才能执行此操作。
于 2011-01-21T11:07:01.320 回答
0
您可以找到与已启动进程关联的窗口(请参阅FindWindow
和EnumWindows
),并使用 调用ShowWindow
函数SW_HIDE
。或者,您可以通过删除WS_EX_APPWINDOW
和添加来修改窗口的扩展样式WS_EX_TOOLWINDOW
。
如果启动的过程尊重设置,最简单的方法仍然是使用第一个答案中描述的 STARTUPINFO 。
于 2011-03-03T14:38:31.060 回答