Jacs Wünsche



Jac, 08.10.2006 10:13: Ich würde gern meinen Parser zur Verfügung stellen, aberich hab nur ein (veraltetes) Beispiel dazu. Bin jetzt auch nicht in der Lage da noch auf die Schnelle was aus dem Boden zu stampfen.


Jac, 18.09.2007 17:09: Ich hätte gern den Befehl "GetUsage" zurück, ich weiss nicht, ob man den mit API nachbilden kann und halte ihn für relativ wichtig.


David Strutz, 18.09.2007 17:55: Gugma - ist schon älter aber ich meine es ist zum Funktionieren überredbar:

' XPSE-Quelltext erkannt.XXProfan (XPSE)  


Proc shellwait
   Parameters fle$
   Declare h&,cmd#,runnfo#,proxnfo#
   fle$:=shortname$(fle$)
   h&:=0
   if (fileexists(fle$))
      Dim cmd#,Add(Len(fle$),1);Dim proxnfo#,16;Dim runnfo#,68
      Clear runnfo#,proxnfo#;Long runnfo#,0=68;String cmd#,0=fle$
      if (external("KERNEL32","CreateProcessA",0,cmd#,0,0,0,0,0,0,runnfo#,proxnfo#))
         h&=Long(proxnfo#,0)
         clear proxnfo#;external("KERNEL32","GetExitCodeProcess",h&,proxnfo#)
         while (long(proxnfo#,0))
            settimer 100;waitinput;killtimer
            clear proxnfo#;external("KERNEL32","GetExitCodeProcess",h&,proxnfo#)
         wend
      endif
      Dispose cmd#
      Dispose runnfo#
      Dispose proxnfo#
   endif
   Return if(h&>0,1,0)
EndProc
Hierbei schaue ich einfach per GetExitCodeProcess - und warte so lange.


Jac, 18.09.2007 18:59: Ist das sicher? Wenn ja, kann Roland das vielleicht profanintern einbauen, damits schneller wird (nur die Abfrage des ExitCodes).


David Strutz, 18.09.2007 19:06: Ich meine das ist "sicher".


Sebastian K., 18.09.2007 19:06: Tatsächlich kann man auch einfach das Handle des erzeugten Prozesses direkt an WaitForSingleObject() übergeben...


David Strutz, 18.09.2007 19:08: Ich gebe zu, og Code ist "schlimm". Dieser war zum Testen da. Der Tip mit WaitForSingleObject ist natürlich klasse!


Sebastian K., 18.09.2007 19:12: Noch ein schneller Nachtrag: Um die Fenster der wartenden Anwendung nicht einfrieren zu lassen (falls die Wartezeit dafür lang genug sein kann) sollte man evtl. besser MsgWaitMultipleObjects() verwenden, wobei dann der Aufruf leider nicht mehr so schön einfach ist...


Jac, 18.09.2007 21:26: Zum Beispiel, wenn man während das aufgerufene Prog werkelt nicht waiten will, sondern was anderes machen will oder wenn das aufgerufene Prog nur eine bestimmte Zeit aktiv sein soll und bei Zeitüberschreitung abgeschossen werden soll oder...


Jörg Sellmeyer, 18.09.2007 21:29:   Zitat von ""RGH"": „... und was spricht gegen den Einsatz der für derartige Zwecke eingeführten XProfan-Funktion "WinExecWait"?
Gruss
Roland

Vielleicht die Tatsache, dass Profan dann wirklich wartet und zu nichts weiter zu gebrauchen ist, während man mit der anderen Lösung das Programm weiteragieren lassen kann und zwischendurch mal checkt, ob sich was geändert hat...


RGH, 18.09.2007 23:05:   Zitat von ""Jörg Sellmeyer"": „
  Zitat von ""RGH"": „... und was spricht gegen den Einsatz der für derartige Zwecke eingeführten XProfan-Funktion "WinExecWait"?
Gruss
Roland

Vielleicht die Tatsache, dass Profan dann wirklich wartet und zu nichts weiter zu gebrauchen ist, während man mit der anderen Lösung das Programm weiteragieren lassen kann und zwischendurch mal checkt, ob sich was geändert hat...

Hallo Jörg,
mein Einwurf bezog sich auf iFs Funktion "ShellWait". Diese macht - wenn ich sie recht verstehe - exakt das, was auch mein WinExecWait macht.
Allerdings kann man die Elemente dieser Prozedur natürlich genau zu dem verwenden, was Dir vorschwebt.
Vielleicht fällt mir für XProfan 2008 noch was dazu ein ...
Gruss
Roland


Jac, 19.09.2007 13:09: Naja, ich bin mir sicher, dass Roland das intern dabei belässt.
@Roland: Was sagst du zu "GetUsage"?


Dies ist die Offlinevariante vom Thread [Jacs Wünsche].

Valid CSS!

©2006 XProfan.Com