2017-09-15 204 views
3

如何創建/產卵Win32過程沒有鼠標和鍵盤的重點和交互?創建過程沒有鍵盤和鼠標,交互和焦點

可以提到一些最合適的Win API函數創建窗口過程而不顯示爲最頂層的窗口,但留在其他打開的窗口中?

(假設你有產卵/創建進程的(非全屏)的Direct3D可執行程序和程序由父程序therfore無需用戶交互的終止,但因此自動化它被創建時,它應該顯示在其他已經打開的窗口之後)。

+0

什麼編程語言? – Asesh

回答

3

啓動一個進程與不活動SW_ *值是不夠的,但如果你是前臺窗口您也可以撥打LockSetForegroundWindow禁用SetForegroundWindow

void backgroundcalc_simple() 
{ 
    LockSetForegroundWindow(LSFW_LOCK); 
    ShellExecute(NULL, NULL, TEXT("Calc"), NULL, NULL, SW_SHOWNA); 
    // Cannot unlock here without a hacky call to Sleep 
} 

如果您的應用程序不需要SetForegroundWindow那麼你不」 t不得不解鎖,但無論如何這可能是一個好主意:

BOOL CALLBACK ProcessHasVisibleWindowProc(HWND hWnd, LPARAM Param) 
{ 
    if (IsWindowVisible(hWnd) && (WS_CAPTION & GetWindowLongPtr(hWnd, GWL_STYLE))) 
    { 
     DWORD thispid, *wantedpid = (DWORD*) Param; 
     if (GetWindowThreadProcessId(hWnd, &thispid) && thispid == *wantedpid) 
     { 
      *wantedpid = 0; 
      return FALSE; 
     } 
    } 
    return TRUE; 
} 
BOOL ProcessHasVisibleWindow(DWORD Pid) 
{ 
    if (!Pid) return FALSE; 
    EnumWindows(ProcessHasVisibleWindowProc, (LPARAM) &Pid); 
    return Pid == 0; 
} 

BOOL WaitForVisibleProcessWindow(DWORD Pid, DWORD Timeout) 
{ 
    DWORD start = GetTickCount(); 
    for (;;) 
    { 
     if (ProcessHasVisibleWindow(Pid)) return TRUE; 
     if (GetTickCount() - start >= Timeout && Timeout != INFINITE) break; 
     Sleep(50); 
    } 
    return FALSE; 
} 

void backgroundcalc() 
{ 
    STARTUPINFO si; 
    PROCESS_INFORMATION pi; 
    ZeroMemory(&si, sizeof(si)); 
    si.cb = sizeof(si); 
    si.dwFlags = STARTF_FORCEOFFFEEDBACK|STARTF_USESHOWWINDOW; 
    si.wShowWindow = SW_SHOWNA; 
    WCHAR cmd[MAX_PATH]; 
    lstrcpy(cmd, TEXT("Calc")); 
    LockSetForegroundWindow(LSFW_LOCK); 
    if (CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) 
    { 
     WaitForInputIdle(pi.hProcess, 3333); 
     WaitForVisibleProcessWindow(pi.dwProcessId, 1000*10); 
     CloseHandle(pi.hProcess); 
     CloseHandle(pi.hThread); 
    } 
    LockSetForegroundWindow(LSFW_UNLOCK); 
} 
+0

@Andres謝謝你的回答。偉大的幫助。投票.. – Buddhika