Autor Beitrag
ntr12345
Hält's aus hier
Beiträge: 3

Win2000,Linux
D5
BeitragVerfasst: Do 08.07.04 16:16 
:cry:
Hallo,
ich versuche in einem Programm ein externes Programm aufzurufen, funktioniert aber nicht :cry:
Folgender Aufruf:

ausblenden Delphi-Quelltext
1:
2:
3:
data := (PChar('c:winnt
otepad.exe'
));
ShellExecute(Application.Handle, 'open', data, nilnil, 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 user profile iconPeter Lustig: Delphi-Tags hinzugefügt.
Moderiert von user profile iconKlabautermann: Topic aus Sonstiges verschoben am Fr 09.07.2004 um 09:09
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3

Win2000,Linux
D5
BeitragVerfasst: 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:

ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.pbExitClick(Sender: TObject);
begin
   Close;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
   //sDatei := Paramstr(1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var data:pchar;
begin

   data := (PChar('c:\winnt\notepad.exe'));
   ShellExecute(Application.Handle, 'open', data, nilnil, SW_SHOW);

end;
end.


Moderiert von user profile iconKlabautermann: Delphi-Tags hinzugefügt.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 3

Win2000,Linux
D5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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*).

Suche in: Delphi-Forum, Delphi-Library CREATEPROCESS
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 12.07.04 18:03 
Im Grunde ist es gar nicht übertrieben. ;)

Assarbad hat übrigens mal eine Suche in: Delphi-Forum, Delphi-Library SHELLEXECUTE-VARIANTE vorgestellt. Bitte besonders den letzten Beitrag beachten.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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: .