2015-02-03 1 views
0

게임을 시작하기 위해 ShellExecute와 CreateProcess를 모두 시도했습니다. 제 목표는 게임 창을 숨기는 것입니다. 이 게임은 DirectX9를 사용하여 제작되었습니다. 웬일인지 나는이 이슈에 대해 고심하고있다. 나는 ShellExecute 또는 CreateProcess에서 DirectX9 게임 창 숨기기

SHELLEXECUTEINFO ShExecInfo = {0}; 
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); 
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; 
ShExecInfo.hwnd = NULL; 
ShExecInfo.lpVerb = NULL; 
ShExecInfo.lpFile = app_exe; // Path to game   
ShExecInfo.lpParameters = ""; 
ShExecInfo.lpDirectory = NULL; 
ShExecInfo.nShow = SW_HIDE; 
ShExecInfo.hInstApp = NULL; 
ShellExecuteEx(&ShExecInfo); 
WaitForSingleObject(ShExecInfo.hProcess,INFINITE); 

그리고 CreateProcess를

와 함께 게임이 시작됩니다 두 경우 모두
ZeroMemory(&procInfo, sizeof(PROCESS_INFORMATION)); 
ZeroMemory(&startupInfo, sizeof(STARTUPINFO)); 
startupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; 
startupInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE); 
startupInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); 
startupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); 
startupInfo.wShowWindow = SW_HIDE; 

CreateProcess(app_exe, cmdline, NULL, NULL, FALSE,CREATE_NO_WINDOW , NULL, NULL,&startupInfo, &procInfo); 

WaitForSingleObject(procInfo.hProcess, INFINITE); 

성공

없이 독립적으로하지만, 다음과 같은 코드를 사용하고 있으며, 전체 화면으로 게임을 얻는다. 내가 잘못하고있는 것이 있습니까?

답변

1

STARTUPINFO.wShowWindow 플래그는 WinMain에서 최종 매개 변수 nCmdShow (https://msdn.microsoft.com/en-us/library/windows/desktop/ff381406(v=vs.85).aspx)로 끝납니다. 생성 된 프로세스가이 요청을 준수 할 필요는 없습니다. 보이는 창을 원하는대로 만들 수 있습니다. 사실이 플래그를 완전히 무시하는 것이 일반적입니다. 실행중인 응용 프로그램의 소스 코드가 있고이를 다시 컴파일 할 수 있으면이 요청을 존중하도록 만들 수 있습니다.

또한 시도하지는 않았지만 DirectX 전체 화면 창을 숨기려고하면 오류가 발생하거나 문제가 발생할 수 있다고 생각합니다.

+0

글쎄 소스 코드가 없습니다. 이렇게하면 다른 데스크톱에서 DirectX 게임을 실행할 수 있습니다. – Wajih