Runshell async externe Application

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Runshell async externe Application

Beitrag von AUGE_OHR »

hi,

ich versuche verzweifelt ein RunShell "Explorer" async. (OS = Win98se)

Es soll also meine Xbase++ Applikation anhalten solange der "Explorer"
offen ist und sich erst melden wenn ich den "Explorer" schiesse ... geht
das ?

Eigendlich sollte es ja schon das Beispiel machen (default async = .F.)

Code: Alles auswählen

   RunShell( "/C EXPLORER.EXE .") 
   SLEEP(200)
   MSGBOX("nix")
was aber meine Xbase++ Application nicht anhält genauso wenig wie

Code: Alles auswählen

   RunShell( ".","EXPLORER.EXE",.F.,.F.)
   SLEEP(200)
   MSGBOX("nix")
ich bekomme immer die Msgbox zu sehen obwohl der "Explorer" noch
offen ist ... was mache ich falsch oder ist es ein BUG ?

gruss by OHR
Jimmy
rassekst
UDF-Programmierer
UDF-Programmierer
Beiträge: 97
Registriert: Mi, 01. Feb 2006 23:49
Wohnort: Glauchau
Kontaktdaten:

Beitrag von rassekst »

Hallo,

Das liegt am Explorer.

Wenn Du

Code: Alles auswählen

   RunShell( "/C CALC.EXE ",,.F.,.T.)
probierst geht es.

Gruss Steffen
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
rassekst hat geschrieben: Das liegt am Explorer.
yup das war ein schlechtes Beispiel (Quelle Alaska Help-file)
rassekst hat geschrieben: Wenn Du

Code: Alles auswählen

   RunShell( "/C CALC.EXE ",,.F.,.T.)
probierst geht es.
... ich hab es aber mit meiner "Visual C" Application nicht zum laufen
gebracht ... es kam bei jeder variation immer die MsgBox von der
Xbase++ Application.

ABER nun hab ich ein Workaround, zwar noch nicht ausprobiert aber
eine ähnliche Konstruktion hab ich mit meinen GUI Parts in den Hybrid
Anwendungen gemacht.

Also es ist ganz einfach : Man nimmt einen Thread . !!!

diese Routine ist im Alaska Forum von Jim Graham gepostet worden :

Code: Alles auswählen

FUNCTION SwpRunCmd( pcCommand, pbBackGround,pbWait )
   // Replacement for Blinker SwpRunCmd

LOCAL loThread := Thread():New()

DEFAULT pbBackGround := .F.  //  Run in task bar and do not show command box.

DEFAULT pbWait       := .T.        // Run Async

loThread:Start( {||  RunShell("/C " + pcCommand,,,pbBackGround )  } )

   If pbWait
      While loThread:Active
           Sleep(10)
      EndDo
   Endif

Return .T.

DAS MUSS funktionieren und ausserdem kann ich auch noch
:atStart und :atEnd verwenden ... :)

gruss by OHR
Jimmy
Antworten