我正試圖在隱藏模式下創建一個進程(Internet Explorer「iexplore.exe」),但沒有成功。如何在隱藏模式下創建GUI進程?
我曾嘗試用下面的代碼:
#include "stdafx.h"
BOOL WINAPI GetIePath(LPTSTR Buffer, DWORD Length)
{
HKEY hKey;
if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\IEXPLORE.EXE"), 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS)
return FALSE;
if(::RegQueryValueEx(hKey, NULL, 0, NULL, (LPBYTE)Buffer, &Length) != ERROR_SUCCESS)
{
::RegCloseKey(hKey);
return FALSE;
}
::RegCloseKey(hKey);
return TRUE;
}
int _tmain(int argc, _TCHAR* argv[])
{
//::ShellExecute(NULL, /*_T("open")*/ NULL, _T("iexplore.exe"), _T("https://www.google.com"), NULL, SW_FORCEMINIMIZE);
PROCESS_INFORMATION PI = { 0 };
STARTUPINFO SI = { 0 };
SI.cb = sizeof(STARTUPINFO);
SI.dwFlags = STARTF_USESHOWWINDOW;
SI.wShowWindow = SW_FORCEMINIMIZE;
TCHAR lpsziepath[MAX_PATH] = { 0 };
if (!GetIePath(lpsziepath, MAX_PATH - 1))
return 1;
if(!::CreateProcess(lpsziepath, _T("iexplore.exe https://www.google.com") /*::GetCommandLine()*/, NULL, NULL, FALSE, /*CREATE_SUSPENDED*/ 0, NULL, NULL, &SI, &PI))
return 1;
//::ResumeThread(PI.hThread);
//if ((hwnd = ::FindWindow(_T("IEFrame"), _T("https://www.google.com/ - Internet Explorer") /*NULL*/)) == NULL)
// return 1;
//::ShowWindow(hwnd, SW_HIDE);
return 0;
}
SW_HIDE標誌從來沒有爲我工作,而SW_FORCEMINIMIZE的作品,但它並不穩定(並不能保證總是迫使它處於隱藏狀態,它有時在正常狀態下顯示過程「顯示」)。
有沒有更好的方法來做到這一點?
謝謝您的理解。
編輯: 我發現只有第一進程也將被創建隱藏我的代碼,如果我試圖創建一個使用發射exe文件(代碼EXE)所有的IE實例將隨後產生的其它實例正常模式(如圖所示)。
聽起來像[XY問題](http://xyproblem.info/)給我。你最終想要完成什麼? – IInspectable
也許真正的解決方案涉及到根本不啓動IE瀏覽器 –
還要注意'wShowWindow'標誌最好是* advisory *。啓動的應用程序不是*必需的*來履行它。大多數應用程序將會,但有些則不會。 –