Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117

    [VB.NET] - Attendere che processo si apra

    Ciao a tutti! Si legge sempre di "Attendere la chiusura di un processo" e per quello nessun problema

    A me però servirebbe attendere che il processo abbia terminato l'avvio!

    Mi spiego meglio:

    Ho un programma e mi serve eseguire delle istruzioni subito dopo il completamento dell'avvio di questo programma. Devo essere sicura che abbia concluso tutto l'avvio (per quello ho evitato di mettere le istruzioni dopo il comando Shell).

    Che voi sappiate c'è un modo? O è già automatico? (Cioè già di default il framework esegue le istruzioni successive allo shell solo dopo che l'avvio del programma sia completo?)

    Spero di essermi spiegata in modo comprensibile! xD

    Grazia a tutti

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Dipende da cosa tu intenda con "completamento dell'avvio" che non è affatto una terminologia chiara ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Mi spiego meglio:

    Abbiamo:
    .Programma 1 (non creato da me e di cui non ho i sorgenti)
    .Programma 2 (Che sto sviluppando)

    Il programma 1 all'apertura carica un form che va compilato, io vorrei creare un applicativo che (una volta che il programma 1 ha finito di avviarsi) popoli (con sendKeys o comunque poi vedrò) tali campi.

    Il problema è che quando lancio il processo (dal programma 2 per aprire il programma 1) il sendkeys non va a buon fine perchè le istruzioni vengono eseguite troppo in fretta (e il programma 1 non ha ancora caricato il form ma solo la splash screen) quindi mi servirebbe poter attendere che il programma 1 abbia finito il suo avvio prima di inviare i dati!

    Avevo pensato a un treahd.sleep ma è un po troppo "assoluto" perchè alla fine se il pc rallenta ecc non posso mettere un numero di finito di secondi attesa preciso per ogni apertura che verrà fatta in futuro!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Ciao..
    Un primo metodo può essere questo
    http://support.microsoft.com/kb/305368/it
    ma non l'ho mai usato.
    Poi esistono anche modi più sporchi, lavorando con le api e sendMessage..

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da renygade
    Un primo metodo può essere questo
    http://support.microsoft.com/kb/305368/it
    Non è quello di cui ha bisogno Veronica ... quello attende la chiusura di un processo ...

    Prova ad esaminare il valore della MainWindowHandle del Process collegato all'applicazione ... appena diventa valido, dovresti essere nella condizione che ti serve ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Dici? Io quel codice non l'ho provato ma leggendo avevo visto queste istruzioni
    'Wait for the process window to complete loading.
    p.WaitForInputIdle()
    che forse potevano fare quanto richiesto..
    Di più non so...

    EDIT:

    Il seguente codice a me funziona: lancia word, ne attende il caricamento e scrive sul documento appena aperto "ciao".
    codice:
      'Start the process. 
            Dim p As Process = Process.Start("WinWord.exe")
            'Wait for the process window to complete loading.
            p.WaitForInputIdle()
    
            SendKeys.SendWait("ciao")

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Lo scopo dell'articolo era quello che ti dicevo io, infatti dice

    "HOW TO: Attendere fino al termine di un'applicazione esterna con Visual Basic .NET"

    "In questo articolo viene descritto come utilizzare la classe Process di .NET Framework per avviare un'altra applicazione dal proprio codice rimanendo in attesa fino alla sua chiusura."

    E per questo spiega l'utilizzo del metodo WaitForExit().

    E' anche vero che nel codice d'esempio viene utilizzato il metodo WaitForInputIdle() che in effetti attende, in partenza, che l'applicazione risponda (e quindi potrebbe essere utile a Veronica) ma l'articolo corretto è questo

    http://msdn.microsoft.com/en-us/library/xb73d10t(v=vs.90).aspx
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.