Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   WINCE Externes Programm starten (https://www.delphipraxis.net/165376-wince-externes-programm-starten.html)

Andidreas 27. Dez 2011 12:11

WINCE Externes Programm starten
 
aloha...

ich hab vor eineiger zeit ein simple scanner gui für einen wince gerät entwickelt... bei dem gerät war es so das der scanner automatisch aktiv war... jetzt soll die software auf einem anderen gerät laufen bei dem der scanner erst aktiviert werden muss... hierzu muss lt. hardware doku einfach eine scannerwedge.exe gestartet werden... soweit so gut...

ich hab das ganze jetzt mal mit dem folgenden befehl versucht:
Code:
Sysutils.ExecuteProcess('/Application/ScanWedge.exe', ['','']);
hat den blöden nebeneffekt das er das programm startet, aber nicht in das aufrufende programm zurrückkehrt sondern wartet bis ich das aufgerufene programm beende :-/

hat jemand eine idee wie man unter wince ein programm im hintergrund mit starten kann, d.h.
programm 1 startet und ruft programm 2 auf und man kann mit beiden parallel arbeiten...

Andidreas 27. Dez 2011 14:00

AW: WINCE Externes Programm starten
 
so für die wo's interessiert...

ich hab das problem über einen kleinen umweg gelöst, und zwar hab ich mir eine 2. anwendung erstellt die das programm startet welches den scanner aktiviert, sowie mein hauptprogramm, nachdem die beiden programme gestartet wurden beendet sich meine 2. anwendung selbsständig... anbei der code:

Code:
//******************************************************************************
// Apps Startern:                                                             *
// 1. Scanner starten                                                         *
// 2. Hauptprogramm starten                                                   *
//******************************************************************************

procedure Tstarterapp_form.TimerTimer(Sender: TObject);

var
kSI      : TStartUpInfo;
kPI      : TProcessInformation;

begin

     Timer.Enabled := False;
     CreateProcess(PWideChar('/Application/scanner.exe'), Nil, Nil, Nil, False, CREATE_NEW_CONSOLE, Nil, Nil, kSI, kPI);
     CreateProcess(PWideChar('/Application/programm1.exe'), Nil, Nil, Nil, False, CREATE_NEW_CONSOLE, Nil, Nil, kSI, kPI);
     Close;

end;

JamesTKirk 29. Dez 2011 10:14

AW: WINCE Externes Programm starten
 
Zitat:

Zitat von Andidreas
ich hab das ganze jetzt mal mit dem folgenden befehl versucht:
Code:
Sysutils.ExecuteProcess('/Application/ScanWedge.exe', ['','']);
hat den blöden nebeneffekt das er das programm startet, aber nicht in das aufrufende programm zurrückkehrt sondern wartet bis ich das aufgerufene programm beende :-/

Das ist der Zweck dieser Funktion. Siehe deren Beschreibung (nun gut, es steht etwas versteckt drin; da
Delphi-Quellcode:
ExecuteProcess
den ExitCode des Programms zurückgibt, muss sich dieses ja erst beendet haben).

Zitat:

Zitat von Andidreas
hat jemand eine idee wie man unter wince ein programm im hintergrund mit starten kann, d.h.
programm 1 startet und ruft programm 2 auf und man kann mit beiden parallel arbeiten...

Der Standardweg unter Free Pascal für sowas ist
Delphi-Quellcode:
TProcess
. Siehe hierzu die Dokumentation und ein Eintrag im FPC Wiki.

Ganz wichtig: nicht auf die Idee kommen unter Windows CE / Windows Mobile StdIn/StdOut/StdErr Pipes zu verwenden. Das wird so weit ich weiß nicht unterstützt.

Zu deiner selbst gefundenen Lösung: warum machst du in deinem Hauptprogramm nicht einfach direkt beim Start ein

Delphi-Quellcode:
 CreateProcess(PWideChar('/Application/ScanWedge.exe'), Nil, Nil, Nil, False, CREATE_NEW_CONSOLE, Nil, Nil, kSI, kPI);
 // Wichtig: die in kPi übergebenen Handles schließen, damit du nicht unnötig Ressourcen verbrätst
 CloseHandle(kPi.hThread);
 CloseHandle(kPi.hProcess);
Hier wird nämlich nur gewartet, wenn du
Delphi-Quellcode:
WaitForSingleObject(kPi.hThread, SomeTime);
aufrufst (was
Delphi-Quellcode:
ExecuteProcess
intern macht).

Gruß,
Sven


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz