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 |
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/ |