![]() |
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 |
Re: externe Applikation
ShellExecute()
|
Re: externe Applikation
![]() ![]() ![]() 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: ![]() ![]() |
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.
|
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).
|
Re: externe Applikation
Zitat:
|
Re: externe Applikation
![]() |
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... |
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:
Die \\ hinter dem C: und " statt ' sind in C++ normal.
void __fastcall TForm1::Button1Click(TObject *Sender)
{ ShellExecute(Handle,NULL,"C:\\lernen.exe",NULL, NULL, SW_MAXIMIZE); } 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] |
Re: externe Applikation
Es heisst kompilieren.
|
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?
|
Re: externe Applikation
Code:
Mit open sollte es funktionieren, sofern der Pfad stimmt.
void __fastcall TForm1::Button1Click(TObject *Sender)
{ ShellExecute(Handle,"open","C:\\lernen.exe",NULL, NULL, SW_MAXIMIZED); } |
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. |
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).
|
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