Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Handle zu fensterlosem Programm (https://www.delphipraxis.net/18406-handle-zu-fensterlosem-programm.html)

TomDooley 18. Mär 2004 07:49


Handle zu fensterlosem Programm
 
Hallo

Ich möchte von einem Programm aus ein neues Programm starten. Das erste Programm läuft im Hintergrund, hat also keine sichtbaren Fenster. Mein Progi sieht etwa so aus:

Code:
program TestProg;
...
begin
  ...
  ShellExecute(???, 'open', 'Buch.exe', nil, 'D:\Programme\', SW_SHOWNA);
  ...
end;

end.
Bei ShellExecute muss als erster Parameter ein Handle mitgegeben werden. Ich denke mal, das müsste ein Handle von TestProg sein... Wie komme ich zu diesem Handle? Da mein Prog. kein Fenster hat, nützt mir FindWindows ja wohl nichts, oder?? Hab' hier im Forum gesucht, aber ich finde nur immer Tips über Progis mit Fenstern... Gibt es keine Möglichkeit so in der Richtung "getHandleVonAktuellemProgi"??

Danke für Eure Hilfe

Tom

Luckie 18. Mär 2004 10:52

Re: Handle zu fensterlosem Programm
 
Gibt 0 an. ;)

TomDooley 18. Mär 2004 12:38

Re: Handle zu fensterlosem Programm
 
Verdammt es funktioniert!! Da probier ich alles aus, geb auch NULL ein... doch nix. Jetzt muss ich 0 eingeben und alles läuft wunderbar? :gruebel: :wall:

Warum 0? Kann mir das jemand erklären? Ich habe in allen Beschreibungen nichts von einer 0 gefunden....

Tom

PS: Luckie, Danke natürlich trotzdem! :thuimb:

Luckie 18. Mär 2004 12:44

Re: Handle zu fensterlosem Programm
 
Shellexecute verlangt aus irgendeinem Grund das Handle des aufrufenden Fensters. Ein Handle ist vom Datentyp THandle bzw. Cardinal. Demnach kannst du da alles angeben, was zwischen 0 und max. Cardinal liegt. Ob es nun gültig ist oder nicht spielt keine Rolle.

Vjay 18. Mär 2004 14:29

Re: Handle zu fensterlosem Programm
 
Ich hatte sogar schonmal das Phänomen, dass ShellExecute gesponnen hatte, als ich das Handle meines Fensters angab. Seitdem immer 0 ;)

Dannyboy 18. Mär 2004 14:37

Re: Handle zu fensterlosem Programm
 
Zitat:

Zitat von Vjay
Ich hatte sogar schonmal das Phänomen, dass ShellExecute gesponnen hatte, als ich das Handle meines Fensters angab. Seitdem immer 0 ;)

Ich hatte mal gelesen (weiss leider nicht mehr in welchem Tut.), dass man
bei Shellexecute das Handel des erzeugenden (!) Fensters mitgeben soll,
damit eventuelle Fehlermeldungen dann auf dem erzeugendem Fenster angezeigt werden ...
oder so ähnlich. :gruebel:

BitWriter 18. Mär 2004 15:23

Re: Handle zu fensterlosem Programm
 
Delphi-Quellcode:
//Kleiner Tipp: könnte noch vereinfacht werden...
//--------------------------------------------------
USES
    Windows; //u.a. für HWND
    ShellApi; //u.a. für FindExecutable()

function ShellExecPossible(PathName,FileName:string):boolean;
var lpFile,   lpDirectory,
    ExeName : PChar;
begin
  ExeName:=StrAlloc(255);
  lpFile:=StrAlloc(255);
  lpDirectory:=StrAlloc(255);
  StrPCopy(lpDirectory, ExtractFilePath(PathName));
  StrPCopy(lpFile, FileName);
  Result:=FindExecutable(lpFile, lpDirectory, ExeName)>32;
  if Result and (ExeName<>'') and NOT(FileExists(ExeName)) then
    Result:=false;
  StrDispose(lpFile);
  StrDispose(ExeName);
  StrDispose(lpDirectory);
end;

procedure ShellExec(ApplHande: HWND;lpOperation,lpFile:string);
const
     lpDirectory='';
     lpParameter=nil;
     nShowCmd=SW_NORMAL;
begin
  ShellExecute(ApplHande, PChar(lpOperation), PChar(lpFile), PChar(lpDirectory), lpParameter, nShowCmd);
end;

// Aufruf:
// if ShellExecPossible(RunPath,RunPrg) then
//   ShellExec(Application.Handle,'open',RunPath+RunPrg);
[edit=MrSpock]Codetags eingefügt. Mfg, MrSpock[/edit]
[edit=MrSpock] Mfg, MrSpock[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:48 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