Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi externe Applikation (https://www.delphipraxis.net/102197-externe-applikation.html)

force 24. Okt 2007 20:50


externe Applikation
 
Hallo,

Versuche jetzt seit einiger Zeit ein Programm zu schreiben, mit dem ich über einen Button eine bestimmte externe Applikation ausführen kann und anschließend, wenn sie gestartet ist abzufragen, ob sie läuft.

Kann da jemand helfen? Komme damit nicht wirklich weiter.
Danke

Grüße force

mkinzler 24. Okt 2007 20:54

Re: externe Applikation
 
ShellExecute()

Apollonius 24. Okt 2007 20:56

Re: externe Applikation
 
Hier im Forum suchenShellexecute Hier im Forum suchenShellexecuteEx Hier im Forum suchenCreateProcess
Shellexecute wird immernoch sehr häufig verwendet, obwohl es eigentlich veraltet ist. Wenn du prüfen willst, ob der Prozess läuft, brauchst du dessen Handle, und das kriegst du nur auf die beiden anderen Arten, bei denen musst du dich allerdings mal mit den Parametern auseinandersetzen. Anlaufstelle für Fragen bezüglich dieser Windows-Funktionen ist die MSDN: MSDN-Library durchsuchenCreateProcess. Schauen, ob der Prozess noch läuft, ist mit dem Handle dann fast trivial: MSDN-Library durchsuchenWaitForSingleObject

SirThornberry 24. Okt 2007 21:09

Re: externe Applikation
 
Ich stimme zu das ShellExecute für die Aufgabe ungeeignet ist weil man keine Prozesshandle zurück bekommt. Aber wo steht das es veraltet ist? Im MSDN hab ich da auf die Schnelle nichts gefunden und die sollten es ja wissen.

Apollonius 24. Okt 2007 21:34

Re: externe Applikation
 
Oh, da ist mir wohl was raugerutscht. Veraltet ist es wirklich nicht. Aber es ist nicht unbedingt für Programmstart gedacht sondern eher für das Öffnen irgendeiner Datei und Anderes (diese Interpretation ist nicht auf meinem Mist gewachsen).

Bernhard Geyer 24. Okt 2007 21:48

Re: externe Applikation
 
Zitat:

Zitat von SirThornberry
Aber wo steht das es veraltet ist?

Ich glaube seit Vista und UAC ist es eher umgekehrt. Um nicht noch mehr Probleme mit UAC zu bekommen und damit das erweiterte Manifest auch "wirken" kann sollte man ShellExecute anstatt CreateProcess nehmen.

Matze 25. Okt 2007 05:35

Re: externe Applikation
 
MSDN-Library durchsuchenWinExec ist veraltet und sollte nicht mehr verwendet werden. Nur als Ergänzung.

DP-Maintenance 25. Okt 2007 09:14

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "VCL / WinForms / Controls" nach "Windows API / MS.NET Framework API" verschoben.
Hier gehts aber nicht im Komponenten...

force 25. Okt 2007 14:30

Re: externe Applikation
 
Hallo,

Danke für die vielen Antworten. Habe ein bisschen rumexperimentiert, bin jedoch nicht soviel weiter gekommen.
Ich kann nun zwar was kompelieren, aber es tut nicht das, was es soll.

Hier zwei Codebeispiele, die nicht funktionieren :roll:

Sind jetzt zwar in Borland C++ Builder geschrieben, aber ist ziemlich das gleiche, habe vorher auch Borland Delphi benutzt.

Code:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  WinExec("C:\\lernen.exe", SW_NORMAL);
}
Code:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  ShellExecute(Handle,NULL,"C:\\lernen.exe",NULL, NULL, SW_MAXIMIZE);
}
Die \\ hinter dem C: und " statt ' sind in C++ normal.

Bei dem WinExec kann ich zwar sauber kompelieren, aber wenn ich dann den Button drücke, passiert nichts.
Bei ShellExecute kann ich auch kompelieren und wenn ich dann den Button drücke, kann ich nur im Eventlog sehen, wie zich ZEilen durchlaufen, aber es passiert absolut garnichts.
ShellApi ist eingebunden.

Hoffe das noch jemand helfen kann.
Danke

Grüße force

[edit=Phoenix]Delphi- in C-Tags geändert. Mfg, Phoenix[/edit]

Phoenix 25. Okt 2007 14:33

Re: externe Applikation
 
Es heisst kompilieren.

Luckie 25. Okt 2007 14:38

Re: externe Applikation
 
Zum einen, les dir noch mal durch, was Matze zu WinExec gesagt hat und zum anderen, was liefert Shellexecute für einen Wert zurück?

DeddyH 25. Okt 2007 15:00

Re: externe Applikation
 
Code:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  ShellExecute(Handle,"open","C:\\lernen.exe",NULL, NULL, SW_MAXIMIZED);
}
Mit open sollte es funktionieren, sofern der Pfad stimmt.

force 25. Okt 2007 15:35

Re: externe Applikation
 
Mit "open" funktioniert es auch nicht. Er kompiliert und beim drücken des Buttons passiert nichts, genau wie bei NULL.
Was funktioniert ist, "open" zu verwenden wenn ich zum Beispiel eine .txt öffnen will.
Dann öffnet er die mit Notepad. Deswegen verstehe ich ja nicht, wieso er mit NULL keine Exe öffnet.
Es passiert nichts, bekomme aber auch keine Fehlermeldung.

Apollonius 25. Okt 2007 15:39

Re: externe Applikation
 
Windows schmeißt dir grundsätzlich keine Exceptions um die Ohren. Windows zeigt dir im Rückgabewert einer Funktion an, dass etwas falsch gelaufen ist, und dann bist du dafür verantwortlich, GetLastError aufzurufen und den Rückgabewert anzuzeigen (Der Rückgabewert ist ein Integer. In Delphi gibt es die Funktion SysErrorMessage, die einen vernünftigen String zurückgibt. Die WinApi-Funktion dazu heißt FormatMessage, da gibt es bestimmt eine C++-Kapselung zu, die leichter zu handaben ist).

DeddyH 25. Okt 2007 15:55

Re: externe Applikation
 
ShellExecute selbst gibt Dir doch einen Code zurück. Wenn dieser kleiner als 33 ist, handelt es sich nicht um ein Handle, sondern um einen Fehlercode.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 Uhr.

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