Текущий архив: 2007.04.08;
Скачать: CL | DM;
Вниз
Как заморозить программу SuspendedThread? Найти похожие ветки
← →
Wadim (2006-11-16 20:45) [0]Ничего не работает, выдает ошибку Неверный дискриптор (getlasterror)
Делаю так:
HwndKontrol:=IntToStr(FindWindow(nil, pchar(CurCapt)));
//ShowMessage(HwndKontrol);
GetWindowThreadProcessID(StrToInt(HwndKontrol), @ProcessID);
GetParentProcessInfo(ProcessID, PathOpor);
ListBox1.Items.Clear;
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (hSnapshoot = -1) then
Exit;
lpte.dwSize := SizeOf(TThreadEntry32);
if (Thread32First(hSnapshoot, Lpte)) then
repeat
//List.Objects[I] := Pointer(me32.th32ModuleID);
//Err:=GetLastError;
//ListBox1.Items.add(SysErrorMessage(Err));
GetWindowThreadProcessID(lpte.th32ThreadID, @ProcessID);
GetParentProcessInfo(ProcessID, Path);
if PathOpor=Path then
begin
GetWindowThreadProcessID(lpte.th32ThreadID, @ProcessID);
ProcessSuspend := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
//Err:=GetLastError;
//ListBox1.Items.add(SysErrorMessage(Err));
SuspendThread(ProcessSuspend);
Err:=GetLastError;
ListBox1.Items.add(SysErrorMessage(Err)+" "+IntToStr(PriorityW));
//CloseHandle(ProcessSuspend);
ListBox1.Items.Add(IntToStr(lpte.th32ThreadID)+" "+Path+" "+IntToStr(ProcessID)+" "+IntToStr(lpte.th32OwnerProcessID)+" "+IntToStr(ProcessSuspend)+" ProcessSuspend="+IntToStr(ProcessSuspend));
end;
until not Thread32Next(hSnapshoot, lpte);
CloseHandle (hSnapshoot);
← →
BiN © (2006-11-16 20:56) [1]SuspendThread должен принимать описатель потока.
← →
Wadim (2006-11-16 21:50) [2]Например, не понимаю как его получить?
есть примеры?
← →
Leonid Troyanovsky © (2006-11-16 22:31) [3]
> Wadim (16.11.06 21:50) [2]
> Например, не понимаю как его получить?
OpenThread, msdn.
--
Regards, LVT.
← →
Wadim (2006-11-23 01:14) [4]>>OpenThread, msdn.
Это понятно и реально для 98 винды, а как в XP меня интересует?
← →
Сергей М. © (2006-11-23 08:14) [5]
> Это понятно и реально для 98 винды, а как в XP меня интересует?
Цитата из msdn:
Requirements
Client
Requires Windows Vista, Windows XP, Windows 2000 Professional, or Windows Me.
← →
Чапаев © (2006-11-23 10:32) [6]
procedure FreezeProcess;
var
Threads:TList;
I:Integer;
Th:THandle;
begin
Threads:=TList.Create;
GetProcessThreads(PID,Threads);
for I := 0 to Threads.Count - 1 do begin
Th:=OpenThread(2,False,Cardinal(Threads[I]));
SuspendThread(Th);
CloseHandle(Th);
end;
Threads.Free;
end;
Страницы: 1 вся ветка
Текущий архив: 2007.04.08;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.028 c