Помогите найти ошибку в программе
Я дебил и не хрена не могу понять, как завершить случайный процесс, подскажите кто знает, вот программа:
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. |
Не все системные процессы можно программно завершить, особенно если программа запущена без административных привелегий.
|
Часовой пояс GMT +4, время: 23:04. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.