[VB] Potwierdzenie otwarcia zewnętrznego programu

Witam, od jakiegoś czasu próbuje swoich sił w Visual Basic 2010.  Napotkałem na następujący problem tzn. potrzebuje po kliknięciu na przycisk w moim programie otworzyć plik pdf  i po jego otwarciu wysłać do niego odpowiednia kombinację klawiszy następnie otworzyć kolejny pdf i do niego wysłać kombinację klawiszy itd. 

 

Robię to w taki sposób 

 

Shell(TUTAJ_LOKALIZACJA_PDF1)

SendKeys.Send(TUTAJ_KOMBINACJA_KLAWISZY)

Shell(TUTAJ_LOKALIZACJA_PDF2)

SendKeys.Send(TUTAJ_KOMBINACJA_KLAWISZY)

Shell(TUTAJ_LOKALIZACJA_PDF3)

SendKeys.Send(TUTAJ_KOMBINACJA_KLAWISZY)

 

Ale pojawia się taki problem ze program wywołuje otwarcie PDF ale nie czeka aż on się otworzy tylko przechodzi tzn wymusza wciśniecie klawiszy i otwiera kolejny pdf. 

 

Czy istnieje jakaś komenda żeby przed  przejściem dalej program czekał aż plik pdf się uruchomi? 

Najpierw potrzebujesz warunek czy okno już się pojawiło, np.: FindWindowByCaption, a potem AppActivate(“Nazwa okna aplikacji”) i dopiero przesyłasz kombinację klawiszy.

Możesz podać jakiś przykład jak to zrobić bo nie mogę sobie z tym poradzić? :confused:

Przykład z kalkulatorem :slight_smile:

Private Declare Function FindWindowByCaption Lib "user32" Alias "FindWindowA" (ByVal Classname As String, ByVal WindowName As String) As Integer

        Dim plik_otwarty As Boolean
        plik_otwarty = False
        Process.Start("calc.exe")
        While (plik_otwarty <> True)
            If (FindWindowByCaption(vbNullString, "Kalkulator") <> 0) Then
                System.Threading.Thread.Sleep(1000)
                AppActivate("Kalkulator")
                SendKeys.Send("5")
                SendKeys.Send("*")
                SendKeys.Send("2")
                SendKeys.Send("=")
                plik_otwarty = True
            End If
        End While

Dzięki wielkie - pomogło :wink: Ale mam jeszcze jedno pytanie jak można pobrać automatycznie “nazwę” okna która wpisuje do FindWindowByCaption i AppActivate bo za każdym razem będzie to inny plik (wybierany przez użytkowanika)?

 

Próbowałem za pomocą   OpenFileDialog1.SafeFileName ale w przypadku pdfa o nazwie “1” zwraca 1.pdf a nie pełną nazwę tzn 1.pdf - Adobe Reader :confused:

AppActivate(OpenFileDialog1.SafeFileName & " - Adobe Reader") i to samo przy FindWindow :slight_smile: