Domanda

Sto scrivendo un'applicazione che deve portare la finestra di un'app esterne al primo piano, e non necessariamente rubare il fuoco (c'è un'impostazione, l'utente può passare a rubare/non rubare il fuoco).

Qual è il modo migliore per andare su questo utilizzando l'API win32?Ho provato SetForeground() ma ruba sempre il focus e non uniforme di lavoro.

Qual è il modo migliore per andare su questo?Ogni pensiero?

È stato utile?

Soluzione

SetForegroundWindow dovrebbe rubare il fuoco e ci sono alcuni casi in cui si avrà esito negativo.

SetForegroundWindow funzione mette il thread che ha creato la finestra specificata in primo piano e attiva la finestra.Input da tastiera è diretto verso la finestra

Provare a catturare l'attenzione con SetCapture prima di effettuare la chiamata.Anche prendere in considerazione i diversi modi di portare la finestra in primo piano:SetForeGroundWindow, SetActiveWindow, anche la simulazione di un clic del mouse è possibile fare questo.

Altri suggerimenti

Qual è la differenza tra SetForeGroundWindow, SetActiveWindow, e BringWindowToTop?Sembra come se tutti fanno la stessa cosa.

Secondo MSDN, SetForeGroundWindow attiverà la finestra e diretto il focus della tastiera ad esso.In questo modo si tenta di lavorare anche quando il processo è in background.SetActiveWindow fa la stessa cosa come SetForeGroundWindow, ma non fa niente se l'applicazione non è l'applicazione in primo piano.Infine, BringWindowToTop solo porta finestra verso l'alto, e non cambia il focus della tastiera.

Si può provare il BringWindowToTop funzione per non rubare il fuoco.Io non l'ho usato, ma sembra essere quello che stai cercando.

Avete provato a usare SetWindowPos.Questo è il canonico funzione per lo spostamento, ridimensionamento e l'impostazione di ordine z in Windows.C'è un SWP_NOACTIVATE bandiera che è possibile utilizzare.Guarda http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx.Non l'ho provato su una finestra appartenenti a un altro processo, ma è probabilmente la pena di provare.

SetWindowPos + SWP_NOACTIVATE fa il lavoro.

Si potrebbe utilizzare FindWindow per ottenere l'HWND della finestra, quindi utilizzare il BringWindowToTop funzione di trovare nell'API Win32.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top