Показать сообщение отдельно
Старый 24.06.2011, 21:34   #1 (permalink)
Randomname
Новичок
 
Регистрация: 17.06.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите найти ошибку в программе

Я дебил и не хрена не могу понять, как завершить случайный процесс, подскажите кто знает, вот программа:
procedure TForm1.FormCreate(Sender: TObject);
var Wnd: HWND;
buff: array [0..255] of char;
nprocess: array [0..255] of string;
kolprocess: integer;
info: textfile;
nowdate, nowtime: TDateTime;
number, i: byte;
begin
repeat
nowdate:=Date;
nowtime:=Time;
Wnd:=GetWindow(Handle, GW_HWNDFIRST);
kolprocess:=0;
while Wnd <> 0 do
begin
if (Wnd <> Application.Handle) and (GetWindowText(Wnd, buff, SizeOf(buff)) <> 0) then
begin
GetWindowText(Wnd, buff, SizeOf(buff));
kolprocess:=kolprocess+1; {Высчитаем кол-во запущенных процессов}
nprocess[kolprocess]:=buff;
end;
Wnd:=GetWindow(Wnd, GW_HWNDNEXT);
end;
until TimeToStr(nowtime)='20:28:00';
randomize;
number:=random(kolprocess+1);
AssignFile(info, 'C:\WINDOWS\PCHEALTH\Протокол.txt');
Rewrite(info);
writeln(info, '--------------------------------------------------------------------------------');
writeln(info, '| ', DateToStr(nowdate), ' | ', TimeToStr(nowtime), ' | ');
writeln(info, '--------------------------------------------------------------------------------');
for i:=1 to kolprocess do
begin
writeln(info, 'Процесс № ', i, ' - ', nprocess[i]);
end;
writeln(info, '--------------------------------------------------------------------------------');
writeln(info, nprocess[number], ' - № ', number, ' - будет завершён');
CloseFile(info);
end;
function ProcessTerminate(dwPID:Cardinal):Boolean;
var hToken:THandle;
SeDebugNameValue:Int64;
tkp:TOKEN_PRIVILEGES;
ReturnLength:Cardinal;
hProcess:THandle;
begin
Result:=false;
if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken ) then exit;
if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue ) then
begin
CloseHandle(hToken);
exit;
end;
tkp.PrivilegeCount:=1;
tkp.Privileges[0].Luid:= SeDebugNameValue;
tkp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp) ,tkp,ReturnLength);
if GetLastError()<> ERROR_SUCCESS then exit;
hprocess:=OpenProcess(PROCESS_TERMINATE, FALSE, dwPID);
if hprocess=0 then exit;
if not TerminateProcess(hprocess, DWORD(-1)) then exit;
CloseHandle(hprocess);
tkp.Privileges[0].Attributes:= 0;
AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);
if GetLastError() <> ERROR_SUCCESS then exit;
Result:=true;
end;
end.
Randomname вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070