| Autor |
Beitrag |
ntr12345
Hält's aus hier
Beiträge: 3
Win2000,Linux
D5
|
Verfasst: Do 08.07.04 16:16
Hallo,
ich versuche in einem Programm ein externes Programm aufzurufen, funktioniert aber nicht
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
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
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 08.07.04 16:26
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 
Hält's aus hier
Beiträge: 3
Win2000,Linux
D5
|
Verfasst: 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:
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.
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
Hält's aus hier
Beiträge: 3
Win2000,Linux
D5
|
Verfasst: 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 
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 12.07.04 17:12
Tja, das geht mit ShellExecute nicht...
Dafür musst du CreateProcess und WaitFor..., aber warum schreib ich das eigentlich, das steht doch schon tausendfach im Forum  (*leicht übertreib*).
CREATEPROCESS
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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"  .
Aber ist natürlich auch Geschmackssache, und solange keiner mehr mit WinE... ankommt  .
|
|
|