Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fremdes Programm in VCL öffnen (https://www.delphipraxis.net/116847-fremdes-programm-vcl-oeffnen.html)

Lolzor 7. Jul 2008 17:01


Fremdes Programm in VCL öffnen
 
Ich würde gerne wissen wie ich ein fremdes Programm z.B. eine Verknüpfung mit einem Spiel o.ä. öffne.
Das ganze sollte so aussehen:

Ein Formular mit einem Button
Wenn man auf den Button klickt öffnet sich das Programm/die Datei.

Bisher habe ich nur das Formular mit dem Button darauf datz gibt es ja herzlich wenig source-code, deswegen
werde ich auch keinen hier posten^^

Ich hoffe ihr könnt mir weiterhelfen.
Danke schonmal im Voraus.

bigben37 7. Jul 2008 17:14

Re: Fremdes Programm in VLC öffnen
 
Das müsste mit shellexecute gehen

Lolzor 7. Jul 2008 23:02

Re: Fremdes Programm in VLC öffnen
 
Ok danke schonmaö ich bin auf die Seite gegangen unten stand aber das man für Programme besser CreateProcess nimmt

Das sieht bei mir bis jetzt so aus

Delphi-Quellcode:
unit Unit25;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm25 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form25: TForm25;

implementation

{$R *.dfm}
type
TExecuteWaitEvent = procedure(const ProcessInfo: TProcessInformation;
                                    var ATerminate: Boolean) of object;

procedure ExecuteFile(const AFilename: String;
                 AParameter, ACurrentDir: String; AWait: Boolean;
                 AOnWaitProc: TExecuteWaitEvent=nil);
var
  si: TStartupInfo;
  pi: TProcessInformation;
  bTerminate: Boolean;
begin
  bTerminate := False;

  if Length(ACurrentDir) = 0 then
    ACurrentDir := ExtractFilePath(AFilename);

  if AnsiLastChar(ACurrentDir) = '\' then
    Delete(ACurrentDir, Length(ACurrentDir), 1);

  FillChar(si, SizeOf(si), 0);
  with si do begin
    cb := SizeOf(si);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := SW_NORMAL;
  end;

  FillChar(pi, SizeOf(pi), 0);
  AParameter := Format('"%s" %s', [AFilename, TrimRight(AParameter)]);

  if CreateProcess(Nil, PChar(AParameter), Nil, Nil, False,
                   CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or
                   NORMAL_PRIORITY_CLASS, Nil, PChar(ACurrentDir), si, pi) then
  try
    if AWait then
      while WaitForSingleObject(pi.hProcess, 50) <> Wait_Object_0 do
      begin
        if Assigned(AOnWaitProc) then
        begin
          AOnWaitProc(pi, bTerminate);
          if bTerminate then
            TerminateProcess(pi.hProcess, Cardinal(-1));
        end;

        Application.ProcessMessages;
      end;
  finally
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
  end;
end;



procedure TForm25.Button1Click(Sender: TObject);
begin
 ExecuteFile('c:\hhm.exe', '', '', false);
end;

end.
Leider wird hhm.exe nicht geöffnet wenn ich auf den Button klicke.
Was nun? :/

p0w3r5tr34m3r 7. Jul 2008 23:25

Re: Fremdes Programm in VLC öffnen
 
wenn ich das um diese Uhrzeit noch richtig verstehe musst du als Dateinamen (AFileName) hhm.exe einsetzen und als Working Directory (AWorkingDirectory) C:\

Delphi-Quellcode:
procedure TForm25.Button1Click(Sender: TObject);
begin
ExecuteFile('hhm.exe', '', 'C:\', false);
end;

Mit freundlichen Grüßen


[edit]sicher das du VLC meinst und nicht VCL?[/edit]

Luckie 8. Jul 2008 08:27

Re: Fremdes Programm in VLC öffnen
 
Zitat:

Zitat von p0w3r5tr34m3r
Working Directory (AWorkingDirectory) C:\

Warum C:?

@Lozlor: Warum machst du es dir unnötig schwer und nimmst nicht Shellexecute?
Zitat:

Leider wird hhm.exe nicht geöffnet wenn ich auf den Button klicke.
Was nun? :/
Hausaufgaben mache:
1. Fehlerbehandlung einbauen.
2. In Einzelschritten die Funktion debuggen und gucken wo es hängt.

Zu 1. Du hast doch schon die Abfrage drin
Delphi-Quellcode:
if CtreateProcess...
Warum wertest du den nicht vorhandenen else-Block nicht aus und rufst dort MSDN-Library durchsuchenGetLastError auf? Dann weiß du gleich, was dein Fehler ist.

Lolzor 8. Jul 2008 12:30

Re: Fremdes Programm in VLC öffnen
 
Also das mit VLC ist n dummer Fehler den ich gleich beheben werden :P

Und ich hab erst mit delphi angefangen sprich ich weiss nicht wie man eine Fehlerbehandlung einbaut.

Ich habs nich shellexecute nicht probiert da auch auf der seite steht das man für Programme(also das was ich starten will) lieber CreateProcess nimmt werde es jetzt aber auch mal mit shellexecute ausprobieren.

Dazu habe ich aber auch noch eine Frage wie füge ich die ShellAPI der Uses-Klausel hinzu?

Luckie 8. Jul 2008 12:44

Re: Fremdes Programm in VLC öffnen
 
Zitat:

Zitat von Lolzor
Dazu habe ich aber auch noch eine Frage wie füge ich die ShellAPI der Uses-Klausel hinzu?

Einfach ans Ende der Liste durch ein Komma getrennt den Unit Namen, hier ShellAPI, schreiben.

Forlan 8. Jul 2008 12:45

Re: Fremdes Programm in VCL öffnen
 
Delphi-Quellcode:
uses shellApi;
O.o

RavenIV 8. Jul 2008 13:01

Re: Fremdes Programm in VLC öffnen
 
Zitat:

Zitat von Lolzor
Und ich hab erst mit delphi angefangen sprich ich weiss nicht wie man eine Fehlerbehandlung einbaut.

Dazu habe ich aber auch noch eine Frage wie füge ich die ShellAPI der Uses-Klausel hinzu?

Dann gebe ich Dir den Tip, Dir erst mal Grundlagen anzueignen.
Es gibt viele Bücher oder Tutorials für Einsteiger.

Mit allzu vielen Anfänger-Fragen verdirbst Du den Leuten hier nämlich den Spass am Helfen.
Wir helfen gerne, aber einige Vorkenntnisse sollten schon vorhanden sein.
Deine Frage mit den Uses ist so eine Frage...

SirThornberry 8. Jul 2008 13:03

Re: Fremdes Programm in VCL öffnen
 
Es gibt eigentlich keinen vernünftigen Grund CreateProcess anstelle von ShellExecute zu verwenden wenn einem die Rückgabewerte von ShellExecute genügen. Zudem ist eine Verknüpfung zum Beispiel kein Programm :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 Uhr.
Seite 1 von 2  1 2      

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