![]() |
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:
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"??
program TestProg;
... begin ... ShellExecute(???, 'open', 'Buch.exe', nil, 'D:\Programme\', SW_SHOWNA); ... end; end. Danke für Eure Hilfe Tom |
Re: Handle zu fensterlosem Programm
Gibt 0 an. ;)
|
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: |
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.
|
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 ;)
|
Re: Handle zu fensterlosem Programm
Zitat:
bei Shellexecute das Handel des erzeugenden (!) Fensters mitgeben soll, damit eventuelle Fehlermeldungen dann auf dem erzeugendem Fenster angezeigt werden ... oder so ähnlich. :gruebel: |
Re: Handle zu fensterlosem Programm
Delphi-Quellcode:
[edit=MrSpock]Codetags eingefügt. Mfg, MrSpock[/edit]
//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] Mfg, MrSpock[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz