PDA

View Full Version : [.NET] Mettere in primo piano un programma


pare93
20-11-2012, 18:52
Salve a tutti,

Come dice il titolo il mio problema consiste nel mettere in primo piano un applicazione.
Mi spiego meglio. Per ora la mia applicazione in vb richiama un applicazione in c# la quale quest ultima invia una combinazione di tasti ad un specifico programma. Per quando riguarda l invio della combinazione non c è problema, nel senso che se il programma "ricevente" è in primo piano nel desktop l invio viene effettuato correttamente, il problema è che l applicazione in vb avviata a regime richiama correttamente quella in c# ma quest ultima non riesce ad inviare la combinazione perchè il programma ricevente non è in primo piano.

Uso la libreria Native32 e la funzione SendKeys() per selezionare il programma ricevente e inviare la combinazione di tasti ma ripeto che a regime non riesce a ricevere perché non è in primo piano e si può notare che il programma ricevente ha l icona in basso che lampeggia.

Spero di essere stato chiaro e grazie in anticipo, Luca

Gaiden80
20-11-2012, 20:03
prova con la proprietà TopMost della form

pare93
21-11-2012, 09:00
L' applicazione da mettere in primo piano è esterna alla form

gugoXX
22-11-2012, 09:15
Devi ottenere l'HWND della finestra di quel programma e tramite interop devi chiamare la
SetForegroundWindow

Immagino che l'HWND di quella finestra tu ce l'abbia gia', altrimenti un modo per averlo e' cercare il Process dalla lista di tutti i Process, chiedere la MainWindow di quel Process e da li' farsi dare l'HWND.
Il tutto quando l'altro programma e' gia' up=and-running, altrimenti non funziona nulla.

pare93
22-11-2012, 09:38
Scusa se per HWND intendi il nome della finestra questo lo faccio già ed eseguo un SetForegroundWindow dell' handle della finestra ma il programma risponde solamente quando è stato selezionato manualmente. Quando io invece prima dell' esecuzione clicco nella barra delle applicazioni in basso non rispondende e inizia a lampeggiare l' icona nella barra

gugoXX
23-11-2012, 09:25
Spiega meglio per cortesia, dov'e' questa finestra?
Non in primo piano come hai dichiarato all'inizio,ovvero con qualche finestra attivata in primo piano sopra di essa, oppure e' minimizzata sulla taskbar?

AllerITA
23-11-2012, 11:27
Una soluzione potrebbe essere usare direttamente le funzioni del sistema operativo ShowWindow, SetFocus e SetActiveWindow da user32.dll con
la funzione:

[System.Runtime.InteropServices.DllImport("user32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto)]

private static extern Boolean ShowWindow(IntPtr hWnd, Int32 nCmdShow);

...ecc ecc

poi usarle sull'handle della finestra così:

ShowWindow(HWND,1)
SetFocus(HWND)
SetForegroundWindow(HWND)
SetActiveWindow(HWND)

così da farlo funzionare.
Comunque se ci sono metodi più immediati lascio la parola agli altri utenti.