Вот код моей программы, при компиляции ошибок нет.
| Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TPROCESSENTRY32 = record dwSize:DWORD; cntUsage:DWORD; th32ProcessID:DWORD; th32DefaultHeapID:DWORD; th32ModuleID:DWORD; cntThreads:DWORD; th32ParentProcessID:DWORD; pcPriClassBase:DWORD; dwFlags:DWORD; szExeFile:array [0..MAX_PATH] of char; end;
type TForm1 = class(TForm) Button1: TButton; private { Private declarations } public { Public declarations } end;
var Form1: TForm1; function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): dword;stdcall; external 'kernel32.dll'; function Process32First(hSnapshot:THandle; lppe:Pointer): Boolean; stdcall external 'kernel32.dll'; function Process32Next(hSnapshot:THandle; lppe:Pointer): Boolean; stdcall external 'kernel32.dll'; const TH32CS_SNAPPROCESS=2;
implementation
{$R *.dfm}
function ProcessTerminate(dwPID:Cardinal):Boolean; var hToken:THandle; SeDebugNameValue:Int64; tkp:TOKEN_PRIVILEGES; ReturnLength:Cardinal; hProcess:THandle; begin Result:=false; // Aiaaaeyai i?eaeeaae? SeDebugPrivilege // Aey ia?aea iieo?aai oieai iaoaai i?ioanna if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken ) then exit; // Iieo?aai LUID i?eaeeaaee 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; // Aiaaaeyai i?eaeeaae? e iaoaio i?ioanno AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength); if GetLastError()<> ERROR_SUCCESS then exit; // Caaa?oaai i?ioann. Anee o ian anou SeDebugPrivilege, oi iu ii?ai // caaa?oeou e nenoaiiue i?ioann // Iieo?aai aane?eioi? i?ioanna aey aai caaa?oaiey hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID); if hProcess =0 then exit; // Caaa?oaai i?ioann if not TerminateProcess(hProcess, DWORD(-1)) then exit; CloseHandle( hProcess ); // Oaaeyai i?eaeeaae? tkp.Privileges[0].Attributes := 0; AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength); if GetLastError() <> ERROR_SUCCESS then exit; Result:=true; end;
function GetProcessId(pName: PChar): dword; var Snap: dword; Process: TPROCESSENTRY32; begin Result := 0; Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if Snap <> INVALID_HANDLE_VALUE then begin Process.dwSize := SizeOf(TPROCESSENTRY32); if Process32First(Snap, @Process) then repeat if lstrcmpi(Process.szExeFile, pName) = 0 then begin Result := Process.th32ProcessID; CloseHandle(Snap); Exit; end; until not Process32Next(Snap, @Process); Result := 0; CloseHandle(Snap); end; end;
end.
|
Только вот я всё же не понял куда вписать имя процесса который нужно завершить.
Мне кажется что вместо Этого @Process, а как его прописыват?! |