Entwickler-Ecke

Windows API - von der thread-id zum thread-handle!?


Bayo - Do 29.01.04 19:57
Titel: von der thread-id zum thread-handle!?
Hi zusammen..

Ich bin auf folgendes Problem gestossen, dass ich leider nicht lösen kann und hoffe, dass ihr mir evtl. weiterhelfen könnt!?:

Mit dem funktion GetWindowThreadProcessId finde ich die ThreadId eines bestimmten Fensters heraus. Jetzt würde ich gerne die Priorität des Threads, der dieses Fenster erzeugte, erhöhen. Dafür kann ich grundsätzlich die funktion SetThreadPriority verwenden, die als Parameter jedoch das Handle und nicht die Id auf den entsprechenden Thread erwartet. Ich habe gehofft, dass eine weitere Funktion gibt, die mir aus der Id das Handle zurück gibt aber.. habe leider nichts gefunden :-(

Vielleicht hatte jemand von euch schon mal ein ähndliches Problem!? Freue mich über jede Antwort!

Grüsse Dominic


Tana´Ri - Fr 30.01.04 09:12

siehe PSDK
Zitat:

BOOL EnumThreadWindows(
DWORD dwThreadId,
WNDENUMPROC lpfn,
LPARAM lParam
);


Bayo - Fr 30.01.04 09:59

Die Funktion EnumThreadWindows [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Windows/WindowReference/WindowFunctions/EnumThreadWindows.asp] gibt alle Fenster-Handels des angegebenen Threas zurück!

Das Fenster-Handle kenne ich aber schon! Ich habe eine Thread-Id und möchte das Handle auf den entsprechenden Thread! Um den Unterschied zu verdeutlichen:

Für den aktuellen Thread gibt es folgende zwei Funktionen:

GetCurrentThreadId [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getcurrentthreadid.asp]: gibt die Id auf den aktuellen Thread zurück!
GetCurrentThread [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getcurrentthread.asp]: gibt das Handle auf den aktuellen Thread zurück!

Da es bei mir nicht um den aktuellen Thread geht, greife ich auf die Funktion GetWindowThreadProcessId [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Windows/WindowReference/WindowFunctions/GetWindowThreadProcessId.asp] zurück, die mir aber nur die Thread-Id zurück gibt! In vielen Fällen erwarten die Windows-Funktionen aber das Handle auf den Thread und nicht die Id! Leider habe ich bis jetzt noch keinen Weg gefunden von der Id zum Handle zu kommen!?

Trotzdem vielen Dank für die Antwort!


Tana´Ri - Fr 30.01.04 11:05

The OpenThread function opens an existing thread object.


Quelltext
1:
2:
3:
4:
5:
HANDLE OpenThread(
  DWORD dwDesiredAccess,
  BOOL bInheritHandle,
  DWORD dwThreadId
);


Moderiert von user profile iconMotzi: Code-Tags hinzugefügt


Motzi - Fr 30.01.04 12:26

OpenThread gibt es aber erst ab Win2000 bzw WinME.. für frühere Versionen muss man sich diese Funktion mit Hilfe von nativen APIs nachbauen...