Entwickler-Ecke
Windows API - Aufruf externer Programme
ntr12345 - Do 08.07.04 16:16
Titel: Aufruf externer Programme
:cry:
Hallo,
ich versuche in einem Programm ein externes Programm aufzurufen, funktioniert aber nicht :cry:
Folgender Aufruf:
Delphi-Quelltext
1: 2: 3:
| data := (PChar('c:winnt otepad.exe')); ShellExecute(Application.Handle, 'open', data, nil, nil, SW_SHOW); |
Hier kommt folgende Fehlermeldung:
[Fehler] MIUnit.pas(61): Undefinierter Bezeichner: 'ShellExecute'
Wer kann mir helfen, bin leider noch kein Programmiergenie :shock:
Tausend Dank :-)
Moderiert von
Peter Lustig: Delphi-Tags hinzugefügt.Moderiert von
Klabautermann: Topic aus Sonstiges verschoben am Fr 09.07.2004 um 09:09
jaenicke - Do 08.07.04 16:26
:welcome:
ShellAPI in die uses-Klausel (ganz oben in der Unit) einfügen
Das kann dir allerdings auch ein Blick in die Hilfe per F1 verraten, du musst immer darauf achten, dass die (normalerweise...) dort angegebene Unit in der uses-Klausel steht. Erst dann "weiß" Delphi nämlich, dass es dort nach der Funktion suchen soll.
ntr12345 - Fr 09.07.04 08:45
Hallo,
vielen Dank, so richtig funktioniert dass Programm aber immer noch nicht.
Es läßt sich nun zwar fehlerfrei kompilieren, der Aufruf von Notepad funktioniert aber trotzdem nicht :-(
Vielleicht hast Du noch eine Idee :-)
Tausend dank nochmal
Hier das Programm:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| unit MIUnit; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Oracle, ShellAPI; type TForm1 = class(TForm) pbExit: TBitBtn; Button1: TButton; Memo1: TMemo; procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure pbExitClick(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.pbExitClick(Sender: TObject); begin Close; end; procedure TForm1.FormActivate(Sender: TObject); begin end; procedure TForm1.Button1Click(Sender: TObject); var data:pchar; begin
data := (PChar('c:\winnt\notepad.exe')); ShellExecute(Application.Handle, 'open', data, nil, nil, SW_SHOW);
end; end. |
Moderiert von
Klabautermann: Delphi-Tags hinzugefügt.
Delete - Fr 09.07.04 09:11
Warum so umständlich? Der Editor liegt IMHO im Windows- oder im Systemordner. Also brauchst du keinen Pfad angeben, weil er gefunden und gestartet wird:
Delphi-Quelltext
1:
| ShellExecute(self.Handle,'open','notepad.exe',nil,nil,SW_SHOW); |
Voilà. Die Angabe des Pfades ist nur hinderlich, wenn jemand (evtl. du selbst) dein Programm auf einem anderen Rechner startet, auf dem Windows nicht im "WINNT"-Ordner ist.
ntr12345 - Mo 12.07.04 17:08
Hallo,
so nun bin ich doch ein gutes Stück weitergekommen :-)) Hab jetzt noch eine letzte Frage, kann ich die Verarbeitung so lange unterbrechen, wie das externe Programm geöffnet ist. Bis jetzt läuft die exe halt immer durch. Sie aktiviert das Programm und wartet nicht. Habe es mit WAIT versucht, dass funktioniert aber nicht :-(
Vielleicht könntest Du mir noch einen kleinen Hinweis geben.
Tausend dank :lol:
jaenicke - Mo 12.07.04 17:12
Tja,
das geht mit ShellExecute
nicht... :cry:
Dafür musst du CreateProcess und WaitFor..., aber warum schreib ich das eigentlich, das steht doch schon tausendfach im Forum :roll: (*leicht übertreib*).
CREATEPROCESS
Delete - Mo 12.07.04 18:03
Im Grunde ist es gar nicht übertrieben. ;)
Assarbad hat übrigens mal eine
SHELLEXECUTE-VARIANTE vorgestellt. Bitte besonders den letzten Beitrag beachten.
jaenicke - Di 13.07.04 15:28
Ja, stimmt schon, ich weiß, dass man auch auf ShellExecuteEx warten kann, aber da halte ich es für sinnvoller gleich CreateProcess zu verwenden. Das mag zwar anfangs etwas schwerer zu durchschauen sein, man kann damit aber deutlich mehr "anstellen" :lol: .
Aber ist natürlich auch Geschmackssache, und solange keiner mehr mit WinE... ankommt :wink: .
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!