Posty bez odpowiedzi |oraz Aktywne tematy Dzisiaj jest 2024-06-16, 14:46x



Odpowiedz w temacie  [ Posty: 3 ] 
EXCECUTE() modalnie 
Autor Wiadomość

Rejestracja: 2007-11-30, 00:40
Posty: 75
Pomógł: 1
Post EXCECUTE() modalnie
Funkcja Execute() dostępna z poziomu AMBasic-a pozwala na uruchomienie zewnętrznego programu, włącznie z przekazaniem do niego argumentów linii poleceń. Program ten jednak uruchamia się niezależnie od aplikacji uruchamiającej, a dokładniej, po wykonaniu Execute() raport wykonujący idzie dalej, nie czekając na efekty działania programu.

Czy jest możliwe takie uruchomienie zewnętrznego programu, aby jego okno (jeśli oczywiście program ma UI) blokowało dalsze działanie raportu, do czasu ostatecznego zamknięcia okna?


2013-06-17, 20:30
Wyświetl profil
Autor Wiadomość
 


Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 3987
Pomógł: 446
Post Re: EXCECUTE() modalnie
Zobacz czy poniższy przykład rozwiązuje temat.

Kod:
dispatch dLocator = "WbemScripting.SWbemLocator"
dispatch dServices = dLocator.ConnectServer(".","root/cimv2")
dispatch dProcs

string sRun = "calc.exe" // co uruchomić i na co czekać

int sub sleep( int iSec )

   buf = Data() + " " + Time()
   
   find regular "^{*}/--{*}/--{*} {*}/:{*}/:{*}$"
     
   long lStart = ( val(regular 3) * 60 * 60 * 24 ) + (val(regular 4) * 60 * 60) + ( val( regular 5 ) * 60 ) + ( val( regular 6 ))
   long lStop = lStart
   
      while (lStop - lStart) < iSec
     
         buf = Data() + " " + Time()
         find regular "^{*}/--{*}/--{*} {*}/:{*}/:{*}$"
         lStop = ( val( regular 3) * 60 * 60 * 24 ) + ( val( regular 4 ) * 60 * 60 ) + ( val( regular 5 ) * 60 ) + ( val( regular 6 ))
     
      wend
     
endsub

int sub CzyDzialaProgram( string sProgram )

   dProcs = dServices.ExecQuery(using "SELECT * FROM Win32_Process WHERE name='%s'",sProgram)
   
   CzyDzialaProgram = dProcs.Count()

endsub

Execute( sRun )

Sleep( 2 )

popup(1,"Czekam na zamknięcie " + sRun)

While CzyDzialaProgram( sRun ) > 0
   
   Sleep( 2 ) // można zobaczyć jak będzie bez tego sleepa (chodzi o obciążenie procesora)
wend

Message using "Proces %s został zamknięty", sRun

NoOutPut()


Kliknij poniższy screen aby zobaczyć jak to działa

Załącznik:
Run Calculator.gif
Run Calculator.gif [ 400.28 KiB | Przeglądany 2512 razy ]

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2013-06-17, 20:45
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 3987
Pomógł: 446
Post Re: EXCECUTE() modalnie
Ostatnio natknąłem się na takie rozwiązanie.

Kod:
dispatch ws = "WScript.Shell"

ws.Run("calc.exe",1,1)
message("Kalkulator zakończył działanie.")

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2013-06-25, 14:35
Wyświetl profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w temacie   [ Posty: 3 ] 

Kto jest online

Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 20 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Support forum phpbb by phpBB Assistant