PDA

Просмотр полной версии : [DELPHI] процесс


Ant1Player
01.05.2009, 21:06
как переделать этот код procedure TForm1.Timer1Timer(Sender: TObject);
begin
if FindWindow(nil, 'ICQ') <> 0 then
begin
ShowMessage('Окно найдено');
PostMessage(FindWindow(Nil, 'ICQ'), WM_QUIT, 0, 0); end
else
begin
ShowMessage('Окно Ненайдено');
Form1.Close; end;
end;
под процесс
то есть какие команды на поиск и на убивание процесса идут?

desTiny
01.05.2009, 23:10
GetWindowThreadProcessId(FindWindow(nil, 'ICQ'), pid);
p := OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
TerminateProcess(p, 0);
CloseHandle(p);

Gar|k
02.05.2009, 00:58
Более "правильная" функция, которой можно и системный процесс убить.

///////////////////////////////////////////////////////////
function ProcessTerminate(dwPID:Cardinal):Boolean;
var
hToken:THandle;
SeDebugNameValue:Int64;
tkp:TOKEN_PRIVILEGES;
ReturnLength:Cardinal;
hProcess:THandle;
begin
Result:=false;
// Добавляем привилегию SeDebugPrivilege
// Для начала получаем токен нашего процесса
if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
or TOKEN_QUERY, hToken ) then
exit;
// Получаем LUID привилегии
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;
// Завершаем процесс. Если у нас есть SeDebugPrivilege, то мы можем
// завершить и системный процесс
// Получаем дескриптор процесса для его завершения
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;

///////////////////////////////////////////////////////////

slesh
02.05.2009, 14:39
2 Gar|k самое интерестное что каспер уже давно орет на попытку получения привелегий отладчика, так что могут с этим возникнуть проблемы.
Да и привелегии отладчика тут както не нужны, потому что врядли процесс аськи будет находится в пространстве другова юзверя.