2009-12-09 4 views

risposta

5

È possibile utilizzare l'API Win32 BringWindowToTop. Ci vuole un HWND.

È inoltre possibile utilizzare l'API Win32 SetWindowPos che consente anche di eseguire operazioni come rendere la finestra una finestra di livello superiore.

+0

Il collegamento seccond non è corretta, si intende http://msdn.microsoft.com/en-us/library/ms633545%28VS.85%29.aspx Puoi anche suggerire un esempio su questa funzione? –

+0

@Levo: Grazie non devo averlo copiato correttamente negli appunti prima di incollarlo. –

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

BringWindowToTop sposta la finestra nella parte superiore della Z-ordine (per ora), ma fa non rendono una finestra superiore.

+0

Puoi fare un esempio per favore? –

+1

@Levo: basta sostituire l'handle della finestra che si desidera in cima al posto di 'that_window_handle' nello snippet sopra. –

+0

Questa dovrebbe essere accettata risposta. – Neolisk

3

BringWindowToTop() non ha alcun effetto se si desidera portare una finestra di applicazioni da dietro (o ridotta a icona) in primo piano. Il seguente codice fa questo trucco affidabile:

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

È lento nella vittoria XP. – ahoo

+0

Funziona come un fascino! –

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); 
}