mojaSymfonia FORUM
https://forum.mix-soft.pl/

EXCECUTE() modalnie
https://forum.mix-soft.pl/viewtopic.php?f=15&t=5009
Strona 1 z 1

Autor:  piotrm [ 2013-06-17, 20:30 ]
Tytuł:  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?

Autor:  rafal [ 2013-06-17, 20:45 ]
Tytuł:  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 2552 razy ]

Autor:  rafal [ 2013-06-25, 14:35 ]
Tytuł:  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.")

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/