Delphi-PRAXiS

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 :-)

Lolzor 8. Jul 2008 20:20

Re: Fremdes Programm in VCL öffnen
 
Also ich habs mit Shellexecute gemacht

sieht jetzt so aus

Delphi-Quellcode:
procedure TForm38.Button1Click(Sender: TObject);
begin
  if ShellExecute(Application.Handle,
                 'open',
                 PChar('C:\hhm.exe'),
                 Nil, Nil, SW_NORMAL) <= 32 then
    ShowMessage('Es ist ein Fehler aufgetreten');
end;
so jetzt krieg ich aber die Message zu sehn und nicht das programm
Ich hab mir bereits auch schon tutorials angeguckt wäre auch zufrieden wenn mit einfach jemand mal den Code schreiben könnte ihn erklärt und fertig

Luckie 8. Jul 2008 20:44

Re: Fremdes Programm in VCL öffnen
 
Dann lass dir doch mal den nummerishen Rückgabewert anzeigen und guck hier nach, was er bedeutet: MSDN-Library durchsuchenShellexecute.

Lolzor 8. Jul 2008 21:43

Re: Fremdes Programm in VCL öffnen
 
Ok danke hat sich erledigt auf irgendwelche Links gehn kann ich auch

Naja hatte gehofft das mal jemand einfach nen Code postet erklärt und fertig scheint ja wohl zu viel verlangt zu sein

Trotzdem danke für die hilfreichen antworten

Phoenix 8. Jul 2008 21:54

Re: Fremdes Programm in VCL öffnen
 
Zitat:

Zitat von Lolzor
hatte gehofft das mal jemand einfach nen Code postet [.] scheint ja wohl zu viel verlangt zu sein

Korrekt: Siehe unseren Kodex [FAQ-ID:#10]

Luckie 8. Jul 2008 22:23

Re: Fremdes Programm in VCL öffnen
 
Zitat:

Zitat von Lolzor
Ok danke hat sich erledigt auf irgendwelche Links gehn kann ich auch

Und warum hast du dass dann nicht schon vorher gemacht? Ich habe dir alles, was du brauchst an die Hand gegeben. Ist es zu viel verlangt dass du mit etwas Eigeninitiative dein Problem selbst versuchst zu lösen?

Lolzor 8. Jul 2008 22:24

Re: Fremdes Programm in VCL öffnen
 
Ich hab nix gefunden und wie bereits gesagt gehofft das mir hier schnell geholfen werden kann aber das scheint ja wohl nicht der fall zu sein

mkinzler 9. Jul 2008 05:39

Re: Fremdes Programm in VCL öffnen
 
Doch, es wurde dir alles Notwendige gezeigt. Du mosst halt die Rückgabe des ShellExecute auswerten.

Medium 9. Jul 2008 05:43

Re: Fremdes Programm in VCL öffnen
 
Am schnellsten kannst du dir selber helfen, in dem du einige Grundlagentutorials gewissenhaft durcharbeitest, und evtl. das eine oder andere Buch dazu nimmst. Das ist hier ein Forum, keine Schule. Ohne die Bereitschaft an ein Mindestmaß an eigenem Einsatz ist Programmierung schlicht nicht machbar. Der Großteil hier hat sein Wissen auch über jahrelanges Dokumentationen wälzen, Ausbildungen, durchtüftelte Nächte und testen/probieren/scheitern/neuversuchen erlangt, und eben nicht durch vorgekauten Codebrei mit Sahne und Cocktailkirsche.

Und nachdem dir bereits recht detailiert und vergleichsweise geduldig Lösungen und Wege vorgeschlagen wurden noch mangelnde Hilfsbereitschaft vorzuwerfen ist einfach eine unglaubliche Frechheit, mehr nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr.

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