C'è un modo per forzare un'altra finestra per essere in cima? Non la finestra dell'applicazione, ma un'altra, già in esecuzione sul sistema. (Windows, C/C++/C#)C/C++/C# Forza finestra in cima
risposta
È 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.
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.
Puoi fare un esempio per favore? –
@Levo: basta sostituire l'handle della finestra che si desidera in cima al posto di 'that_window_handle' nello snippet sopra. –
Questa dovrebbe essere accettata risposta. – Neolisk
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);
È lento nella vittoria XP. – ahoo
Funziona come un fascino! –
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);
}
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? –
@Levo: Grazie non devo averlo copiato correttamente negli appunti prima di incollarlo. –