![]() |
Fremden Thread anhalten (SuspendThread)
Hi,
wie kann ich den HauptThread einer fremden Anwendung anhalten? Ich habe die PID des Prozesses. Jetzt muss ich irgendwie ein Handle auf den Mainthread erhalten, um diesen dann mit SuspendThread anzuhalten ... Weiß jemand wie das geht? Florian |
Re: Fremden Thread anhalten (SuspendThread)
|
Re: Fremden Thread anhalten (SuspendThread)
Habe jetzt folgendes gefunden:
Code:
Kann mir das jemand nach Delphi portieren?
unsigned long GetTargetThreadIdFromWindow(char *className, char *windowName)
{ HWND targetWnd; HANDLE hProcess unsigned long processId, pTID, threadID; targetWnd = FindWindow(className, windowName); GetWindowThreadProcessId(targetWnd, &processId); _asm { mov eax, fs:[0x18] add eax, 36 mov [pTID], eax } hProcess = OpenProcess(PROCESS_VM_READ, false, processID); ReadProcessMemory(hProcess, (const void *)pTID, &threadID, 4, NULL); CloseHandle(hProcess); return threadID; } Ein paar Zeilen kann man weglassen, da ich die PID des Prozesses bereits kenne und nicht anhand des Fensterhandles ermitteln muss. Ich nehme einfach mal 435 als Beispiel.
Code:
Vielen Dank
unsigned long GetTargetThreadIdFromWindow(char *className, char *windowName)
{ HWND targetWnd; HANDLE hProcess unsigned long processId, pTID, threadID; processID = 435; _asm { mov eax, fs:[0x18] add eax, 36 mov [pTID], eax } hProcess = OpenProcess(PROCESS_VM_READ, false, processID); ReadProcessMemory(hProcess, (const void *)pTID, &threadID, 4, NULL); CloseHandle(hProcess); return threadID; } Florian |
Re: Fremden Thread anhalten (SuspendThread)
So, hab das mal soweit selber gemacht:
Delphi-Quellcode:
Nur leider ist meine ThreadID immer ungültig ... woran kann das liegen?
function GetMainThread(PID: Integer): THandle;
var ThreadID, pTID: Longint; hProcess: THandle; lpRead: Cardinal; begin asm mov eax, fs:[$18] add eax, 36 mov [pTID], eax end; hProcess := OpenProcess(PROCESS_VM_READ, false, PID); ReadProcessMemory(hProcess, @pTID, @threadID, SizeOf(ThreadID), lpRead); CloseHandle(hProcess); Result := ThreadID; end; |
Re: Fremden Thread anhalten (SuspendThread)
Das liegt daran das du nirgends die ThreadID ausliest. Hast du dir überhaupt mal in der Hilfe angeschaut welche Parameter ReadProcessMemory erwartet?
Ich würde dir einfach empfehlen die Methoden verwenden welche dir bereits empfohlen wurden. Diese funktionieren. |
Re: Fremden Thread anhalten (SuspendThread)
Mh ich habe gelesen, dass man hiermit die ThreadID ermitteln kann. Aber okey, mit CreateToolbarHelp32Snapshot funktionierts :thumb:
Danke an alle. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 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