AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Handle zu fensterlosem Programm

Ein Thema von TomDooley · begonnen am 18. Mär 2004 · letzter Beitrag vom 18. Mär 2004
Antwort Antwort
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#1

Handle zu fensterlosem Programm

  Alt 18. Mär 2004, 08:49
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Handle zu fensterlosem Programm

  Alt 18. Mär 2004, 11:52
Gibt 0 an.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#3

Re: Handle zu fensterlosem Programm

  Alt 18. Mär 2004, 13:38
Verdammt es funktioniert!! Da probier ich alles aus, geb auch NULL ein... doch nix. Jetzt muss ich 0 eingeben und alles läuft wunderbar?

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!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Handle zu fensterlosem Programm

  Alt 18. Mär 2004, 13:44
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#5

Re: Handle zu fensterlosem Programm

  Alt 18. Mär 2004, 15:29
Ich hatte sogar schonmal das Phänomen, dass ShellExecute gesponnen hatte, als ich das Handle meines Fensters angab. Seitdem immer 0
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#6

Re: Handle zu fensterlosem Programm

  Alt 18. Mär 2004, 15:37
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.
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
BitWriter

Registriert seit: 21. Feb 2004
1 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Handle zu fensterlosem Programm

  Alt 18. Mär 2004, 16:23
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]
Mfg
BitWriter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 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