|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jul 2009
Messaggi: 268
|
[.NET] Mettere in primo piano un programma
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 |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jun 2012
Città: Roma
Messaggi: 115
|
prova con la proprietà TopMost della form
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jul 2009
Messaggi: 268
|
L' applicazione da mettere in primo piano è esterna alla form
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
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.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jul 2009
Messaggi: 268
|
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
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
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?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Oct 2010
Città: Savona
Messaggi: 194
|
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.
__________________
AMD Phenom II X6 3Ghz, MB Gigabyte 790xta-ud4 F4A, 4Gb Ram ddr3, HD Segate Barracuda 1T, SV ASUS GTX 560 Ti DirectCu II ,Monitor Philips 1920x1080 led 2 ms, Xbox360 Slim, Tablet Asus Transformer Pad TF300T, Gameboy Advance, Ipod Touch 16Gb |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:15.