2009-12-09 6 views

Antwort

5

Sie können die Win32-API BringWindowToTop verwenden. Es braucht ein HWND.

Sie können auch die Win32-API SetWindowPos verwenden, die Ihnen auch ermöglicht, Dinge wie das Fenster ein Top-Level-Fenster zu machen.

+0

Der seccond Link ist falsch, Sie meinen http://msdn.microsoft.com/en-us/library/ms633545%28VS.85%29.aspx Können Sie auch ein Beispiel für diese Funktion vorschlagen? –

+0

@Levo: Danke, ich muss es nicht in die Zwischenablage kopiert haben, bevor ich eingefügt habe. –

10
SetWindowPos(that_window_handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); 

BringWindowToTop bewegt sich das Fenster nach oben auf der Z-Ordnung (bis jetzt) ​​aber tut nicht es ein oberstes Fenster machen.

+0

Können Sie bitte ein Beispiel geben? –

+1

@Levo: ersetzen Sie einfach das Handle des Fensters, das Sie wollen, anstelle von 'that_window_handle' im obigen Ausschnitt. –

+0

Dies sollte als Antwort akzeptiert werden. – Neolisk

3

BringWindowToTop() hat keine Wirkung, wenn Sie ein Anwendungsfenster von hinten (oder minimiert) nach vorne bringen möchten. Der folgende Code macht diesen Trick zuverlässig:

ShowWindow(hwnd, SW_MINIMIZE); 
ShowWindow(hwnd, SW_RESTORE); 
+0

Es ist langsam in Win XP. – ahoo

+0

Arbeiten wie ein Charme! –

0
BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) { 
    wchar_t buff[255]; 

    if (IsWindowVisible(hWnd)) { 
     GetWindowText(hWnd, (LPWSTR) buff, 254); 
     //wprintf(L"%s\n", buff); 
     wstring ws = buff; 
     if (ws.find(L"Firefox") != ws.npos) 
     { 
      ::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); 
     } 
    } 
    return TRUE; 
} 

int main(){ 
    BOOL enumeratingWindowsSucceeded = ::EnumWindows(EnumWindowsProc, NULL); 
}