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 Frage zu den Handles (https://www.delphipraxis.net/44919-frage-zu-den-handles.html)

Zyancali 26. Apr 2005 19:26


Frage zu den Handles
 
Hi @all!

Ich habe noch nie mit handles gearbeitet,
deswegen brauche mal dringend eure hilfe:

und zwar: ich habe eine Anwendung dessen Windowcaption mit Mozilla Thunderbird endet.

Wie kann ich nun per caption abfragen, ob diese Anwendung läuft ? :gruebel:
und gegebenenfalls (auch wenn ich von handles NOCH null ahnung habe) ein handle zurückkriegen ?

Was kann man mit Handles eigentlich alles anstellen ?

Kennt jemand einen link zu einem deutschen tutorial vom handles unter delphi 6 pro ?

[offtopic=Bite nicht steinigen]
Weiss jemand wo man die Source Thunderbird bekommt ?
Auf der Thunderbird site gibts nichts.
[/offtopic]

PS: Danke im Voraus

PPS: Bitte wegen mehreren Fragen nicht schließen ! :|

SirThornberry 26. Apr 2005 19:49

Re: Frage zu den Handles
 
wenn du die exakte fenstercaption wüsstest könntest du mit
Delphi-Quellcode:
FindWindow(nil, 'exakte fenstercaption')
arbeiten was dir dann das handle zurück geben würde. so musst du die caption selbst prüfen und alle fenster durchgehen. Entweder mit EnumWindows oder mit FindWindow und "GW_HWNDNEXT". Hier eine Procedure die das macht was du willst:
Delphi-Quellcode:
function GetHandleByCaption(ACaption: String): Cardinal;
var LHandle, LGiveback: Cardinal;
    LPChar: PChar;
begin
  LPChar := StrAlloc(256);
  LGiveback := 0;
  LHandle := FindWindow(nil, nil);
  while (LHandle <> 0) and (LGiveback = 0) do
  begin
    GetWindowText(LHandle, LPChar, 255);
    if RightStr(string(LPChar), length(ACaption)) = ACaption then
      LGiveback := LHandle;
    LHandle := GetWindow(LHandle, GW_HWNDNEXT);
  end;
  StrDispose(LPChar);
  result := LGiveback;
end;
beispielaufruf:
Delphi-Quellcode:
var LHandle: Cardinal;
begin
  LHandle := GetHandleByCaption('Mozilla Thunderbird');

jfheins 26. Apr 2005 19:54

Re: Frage zu den Handles
 
Zum Handle:

Es ist eigentlich nur eine Zahl, die in diesem Kontext eine gewisse Gültigkeit hat. (Ich liebe Allgemeines :mrgreen: )

Du sagt Windows sozusagen: "Ich will Fenster Nr. 852355" oder "Beende bitte Prozess Nr. 24579"
Hier hast du also einmal ein Fensterhandle und einmal ein Prozesshandle. (Musst du natürlich alles vorher ermitteln ...)

Mephistopheles 27. Apr 2005 12:08

Re: Frage zu den Handles
 
Zitat:

Zitat von jfheins
Es ist eigentlich nur eine Zahl, die in diesem Kontext eine gewisse Gültigkeit hat. (Ich liebe Allgemeines :mrgreen: )

Du sagt Windows sozusagen: "Ich will Fenster Nr. 852355" oder "Beende bitte Prozess Nr. 24579"
Hier hast du also einmal ein Festerhandle und einmal ein Prozesshandle. (Musst du natürlich alles vorher ermitteln ...)

Und jetzt die Preisfrage: jeder Prozess hat eine eindeutige Process ID, die nicht gleich dem Wert eines Handles auf diesen Prozess ist. Warum ist dies so, wenn doch das Handle nur eine Zahl zur Identifikation ist? :zwinker:

Nachtrag: Natürlich darf alternativ auch die Thread-ID oder die File-ID besprochen werden ;)

jfheins 27. Apr 2005 15:08

Re: Frage zu den Handles
 
Ich würde jetzt tippen, mit einem Handle sind Rechte verbunden, und mit einer ProcessID kann man den Prozess nur identifizieren.

Aber ich habe dich Befürchtung, du weißt es, und ich liege vollkommen falsch :mrgreen:

Mephistopheles 27. Apr 2005 16:58

Re: Frage zu den Handles
 
Warum? So falsch ist das nicht ;)

Das Handle gehört einem Prozess oder dem System (Kernel) - also sind damit Rechte verbunden (wie du schon sagtest). Wichtiger ist aber, daß direkt mit dem Handle ein Objekt verbunden ist. Der Objektmanager von Windows ist in der Lage Handle und Objektreferenzen (Pointer auf interne Strukturen) ineinander zu überführen.


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