2016-04-08 21 views
0

所以我試圖將另一個應用程序移動到第二個屏幕,然後我想在C++中將其設置爲全屏。使用HWND切換應用程序的全屏

我從應用程序中從進程列表中獲得HWND句柄,然後我可以使用MoveWindow從窗口中設置位置。這工作完美。

有沒有類似的方式來設置應用程序全屏?我似乎只能找到有關將您的應用程序設置爲全屏的信息。但在這種情況下,我希望能夠移動我想要的任何應用程序並將其設置爲全屏。 (只要這是可能的,但爲了我的目的,我需要它應該是)

如果我在移動窗口後按下Alt + Enter,它確實是我想要的。所以我希望我能從代碼中做到這一點?

編輯:順便說一句我試過ShowWindow(windowToMove,SHOW_FULLSCREEN); 但它似乎最大化它,但它不是類似於ALT + ENTER。

感謝您提前提供任何幫助!

+3

您需要找到第二個應用程序公開的API觸發全屏模式。否則,其內部狀態將全部搞砸。 –

+0

謝謝我已經有一種感覺,這將是唯一的選擇。但我不確定。 –

回答

2
BOOL IsWindowMode = TRUE; 
WINDOWPLACEMENT wpc; 
LONG HWNDStyle = 0; 
LONG HWNDStyleEx = 0; 

void FullScreenSwitch() 
{ 
    if (IsWindowMode) 
    { 
     IsWindowMode = FALSE; 
     GetWindowPlacement(HWNDWindow, &wpc); 
     if (HWNDStyle == 0) 
      HWNDStyle = GetWindowLong(HWNDWindow, GWL_STYLE); 
     if (HWNDStyleEx == 0) 
      HWNDStyleEx = GetWindowLong(HWNDWindow, GWL_EXSTYLE); 

     LONG NewHWNDStyle = HWNDStyle; 
     NewHWNDStyle &= ~WS_BORDER; 
     NewHWNDStyle &= ~WS_DLGFRAME; 
     NewHWNDStyle &= ~WS_THICKFRAME; 

     LONG NewHWNDStyleEx =HWNDStyleEx; 
     NewHWNDStyleEx &= ~WS_EX_WINDOWEDGE; 

     SetWindowLong(HWNDWindow, GWL_STYLE, NewHWNDStyle | WS_POPUP); 
     SetWindowLong(HWNDWindow, GWL_EXSTYLE, NewHWNDStyleEx | WS_EX_TOPMOST); 
     ShowWindow(HWNDWindow, SW_SHOWMAXIMIZED); 
    } 
    else 
    { 
     IsWindowMode = TRUE; 
     SetWindowLong(HWNDWindow, GWL_STYLE, HWNDStyle); 
     SetWindowLong(HWNDWindow, GWL_EXSTYLE, HWNDStyleEx); 
     ShowWindow(HWNDWindow, SW_SHOWNORMAL); 
     SetWindowPlacement(HWNDWindow, &wpc); 
    } 
} 

該代碼將窗口切換爲全屏和後窗。 (WINAPI,並且需要在窗口模式下啓動目標進程)