使用SW_HIDE无法隐藏通过ShellExecuteA启动的自定义C++应用
解决ShellExecuteA启动自定义程序时SW_HIDE失效的问题
排查自定义程序自身的窗口逻辑
你的myapp.exe大概率是自己硬编码了窗口显示状态,比如在WinMain里直接写了ShowWindow(hwnd, SW_SHOW),完全忽略了启动时传入的显示参数。改成用WinMain的nCmdShow参数就行:
ShowWindow(hwnd, nCmdShow);
这样程序就会尊重外部启动时指定的窗口状态,包括SW_HIDE。
换用CreateProcess直接控制进程
ShellExecute是通过系统Shell关联启动,部分程序会无视它的显示参数。改用CreateProcess能更精准控制窗口:
STARTUPINFOA si = {0}; PROCESS_INFORMATION pi = {0}; si.cb = sizeof(STARTUPINFOA); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; // 替换成你的myapp.exe完整路径或文件名(如果在环境变量路径里) if (!CreateProcessA(NULL, "myapp.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { // 可以用GetLastError()查错误原因 } else { // 用完记得关闭进程和线程句柄 CloseHandle(pi.hProcess); CloseHandle(pi.hThread); }
检查是否有子进程弹窗
如果myapp.exe启动后会拉起子进程,子进程的窗口可能会显示出来。这种情况要么修改myapp.exe让子进程也隐藏,要么在启动子进程时同样传递隐藏参数。
内容的提问来源于stack exchange,提问作者Potato master
相关产品推荐
相关产品推荐

