Autor Beitrag
Stauch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Do 01.07.04 10:46 
da ich immer wieder über den Begriff "Handle" stolpere, kann mir den mal jemand erklären. (möglichst idiotensicher? mit Beispielen?)
Danke für jeden Versuch


Moderiert von user profile iconPeter Lustig: Topic aus Sonstiges verschoben am Do 01.07.2004 um 11:29

_________________
Geht das? Und wenn ja, warum nicht?
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 01.07.04 11:00 
Hallo!

Im Endeffekt ist ein Handle nichts anderes als eine Referenz-Nr, die Windows für alle möglichen Sachen einsetzt. Jedes Fenster (=sichtbares Steuerelement) hat zum Beispiel ein Handle. Über die Windows-API kannst du dann Funktionen und Prozeduren aufrufen, indem du das Handle und evtl weitere Parameter übergibst (z.B. SendMessage).

Cu,
Udontknow
Stauch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Do 01.07.04 11:12 
Ähm ... vielleicht doch ein konkretes Beispiel?

_________________
Geht das? Und wenn ja, warum nicht?
fuser
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Do 01.07.04 12:05 
Hallo Stauch
Alle Elemente (Fenster, Buttons...) im Windows werden "durchnummeriert".
Du kannst z.B. 2x Notepad öffnen -> alles ist gleich.
Bis auf das Handle. Das wird beim Erstellen zugewiesen.
Somit kann (und muss) Windows die einzelnen Komponenten ansprechen.
Stauch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Do 01.07.04 12:08 
OK. Das leuchtet mir ein. Danke.

_________________
Geht das? Und wenn ja, warum nicht?
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 01.07.04 13:03 
Ein Handle ist immer nur eine Nummer.. unter Delphi ist der Typ THandle definiert als:
ausblenden Delphi-Quelltext
1:
2:
type
  THandle = LongWord;

LongWord ist ein unsigned 32Bit Integer - folglich ist ein Handle nur eine Nummer.

Es gibt aber trotzdem viele unterschiedliche Arten von Handles, je nachdem um was für Objekte es sich handelt. Über das Handle (bzw über die "Nummer") verwaltet Windows nun alle möglichen Objekte. zB sind Fenster Objekte die man über das Fenster-Handle anspricht. Willst du also irgendeine API-Funktion verwenden die mit einem Fenster arbeitet, benötigst du die "Nummer" des Fensters (eben das Handle) und teilst diese der API-Funktion mit und damit "weiß" die Funktion um welches Fenster es sich handelt.

Am wichtigsten ist wohl die Unterscheidung zwischen Handles von Kernel-Objekten und User/GDI-Objekten. Zu Kernel-Objekten zählen Prozesse, Threads, Jobs, Mutexe, Semaphore, Events, Pipes, Mailslots, Dateien, MMFs, Zugriffstoken, .. nur um mal einige zu nennen. Kernel-Objekte gehören dem Kernel, nicht einem Prozess. Ein Kernel-Objekt wird also nicht zwangsläufig freigegeben wenn der Prozess, der das Objekt erstellt hat, terminiert, denn es könnte noch einen anderen Prozess geben, der ebenfalls dieses Kernel-Objekt verwendet. Aus diesem Grund verwaltet Windows intern einen Zugriffszähler für Kernel-Objekte.
Jeder Prozess hat eine Handle-Tabelle für seine Kernel-Objekte. Das Handle eines Kernel-Objekts eines Prozesses ist nun nichts anderes als der Index des Objekts in dieser Tabelle. Aus diesem Grund haben Handles von Kernel-Objekten meist sehr niedrige Nummern, während das bei User/GDI-Objekten nicht der Fall ist. So, das war mal nur ein kurzer und recht oberflächiger Ausflug in die Welt der Handles..! ;)

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!