Zum Inhalt springen

Frage zu GetWindowThreadProcessId


strico

Empfohlene Beiträge

Declare Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hwnd As int32, lpdwProcessId As int32) As int32

Ich möchte die ProcessID auslesen bekomme aber immer nur 0 zurück. Weiß jemand an was das liegt? Gibt es noch eine andere Möglichkeit an die PID zu kommen, wenn ja, welche?

OS: Win XP

Zum Testen versuche ich vom Windows Rechner eine PID zu bekommen. Über FindWindow hol ich das Handle auf den Rechner und über EnumChildWindow hole ich den rest.

egal, ob ich das mainhandle nehme, oder die Kinderhandle, es wird immer 0 geliefert.

Danke für eure Hilfe.

PS: Seh ich das richtig: Ein Prozess ist ein einzelnes Programm? Prozesse bestehen aus Threads und innerhalb der Threads haben versch. Elemente Handles.

Haben alle Steuerelemente Handles?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

in diesem Fall darfst du nicht den Rückgabewert der Funktion überprüfen sondern musst den zweiten Parameter untersuchen:

Die MSDN sagt folgendes:

The GetWindowThreadProcessId function retrieves the identifier of the thread

that created the specified window and, optionally, the identifier of the process that created the window.

Syntax

DWORD GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId);

Parameters

hWnd

[in] Handle to the window.

lpdwProcessId

[out] Pointer to a variable that receives the process identifier. If this parameter is not NULL, GetWindowThreadProcessId copies the identifier of the process to the variable; otherwise, it does not.

Return Value

The return value is the identifier of the thread that created the window.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jup, wird in VB.NET gemacht.

Hab eine Variable deklariert:

dim i as int32

i = nothing

die hab ich dann übergeben, einmal als nothing, einmal ohne Wertzuweisung, einmal mit Wert.

Mit Wert wirft die Methode wie erwartet eine Eception.

Ich glaub, ich hab auch schonmal nur nen Object übergeben. Das sind ja an und für sich alles 4 Byte-Zeiger.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Jahre später...

Hallo ich habs wiefolgt probiert:

Declare Function GetWindowThreadProcessId Lib "user32.dll" (ByVal windowsHandle As IntPtr, ByVal windowsProcessId As IntPtr) As IntPtr

Dann: Dim handle as IntPtr = FindWindow(Nothing, "Fenstertext")

nun nur noch:

Dim procId as IntPtr

procId = IntPtr.Zero

und : procId = GetWindowThreadProcessId(handle, IntPtr.Zero)

Es steht bei mir also nicht im 2. Wert sondern tatsache im Rückgabewert die korrete Id drin.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...