Форум: "WinAPI";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
ВнизЗакрыть программу с запросом Найти похожие ветки
← →
yurai (2004-11-15 07:48) [0]Подскажите как можно автоматом закрыть внешнюю программу которая выдает запрос закрыть или нет ее?
← →
Юрий Зотов © (2004-11-15 10:11) [1]TerminateProcess(GetCurrentProcess, 0)
← →
Yurai (2004-11-16 03:53) [2]Попробовал, вообще не закрывает, даже запроса не выдает.
← →
WondeRu © (2004-11-16 09:15) [3]Юрий Зотов © (15.11.04 10:11) [1]
TerminateProcess(GetCurrentProcess, 0)
а может не GetCurrentProcess? ;)
нужно получить хэндл процесса...
← →
Yurai (2004-11-16 10:05) [4]Я делая следующим образом:
procedure killing (prog:string);
begin
while wnd<>0 do
begin
GetWindowText(Wnd, buff, sizeof(buff));
if buff=prog then
TerminateProcess(wnd,0);
//postmessage(wnd,wm_close,0,0);
end;
Wnd:=GetWindow(Wnd, gw_hWndNext);
end;
← →
WondeRu © (2004-11-16 10:09) [5]ProcessID, например для Миранды, ищется так:
uses tlhelp32;
{$R *.dfm}
function Miranda: Cardinal;
var
Process32 : TProcessEntry32;
H : THandle;
Next : BOOL;
begin
Result := 0;
Process32.dwSize := SizeOf(TProcessEntry32);
H := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(h, Process32)
then
begin
if AnsiLowerCase(Process32.szExeFile) = "miranda32.exe" then Result := Process32.th32ProcessID;
repeat
Next := Process32Next(H, Process32);
if Next then if AnsiLowerCase(Process32.szExeFile) = "miranda32.exe" then
Result := Process32.th32ProcessID;
until not Next;
end;
CloseHandle(h);
end;
← →
Юрий Зотов © (2004-11-17 21:50) [6]> Yurai (16.11.04 03:53) [2]
Зато показывает, что сделает юзер с такими программами.
> WondeRu © (16.11.04 09:15) [3]
Именно GetCurrentProcess. Бо нефиг.
← →
kaZaNoVa © (2004-11-17 21:53) [7]Юрий Зотов © (17.11.04 21:50) [6]
супер ;))
- по сабжу - предлагаю внедрить нить (я помешан на них) и сделатьExitProcess(0);
← →
Игорь Шевченко © (2004-11-17 22:05) [8]
> TerminateProcess(wnd,0);
Вот поэтому она вообще не закрывает и запроса не выдает.
Написать бы большими буквами вверху на форуме - Учите матчасть, любите F1.
Грустно.
← →
kaZaNoVa © (2004-11-17 22:10) [9]Игорь Шевченко © (17.11.04 22:05) [8]
> Написать бы большими буквами вверху на форуме - Учите
>матчасть, любите F1.
и ещё добавить:
файлы *.hlp - лучшие друзья новичка ;)
← →
DelphiN! © (2004-11-19 10:41) [10]Например: TerminateProcess("explorer.exe");
Uses TlHelp32;
...
Function TerminateProcess(ProcessName:String):Boolean;
type //Данную структуру возвращает ф-ия GetProcessList
TProcNameList=packed record
Count: integer; //Кол-во процессов в системе
Names: array of String; //Масив имен процессов
pIDs: array of integer; //Массив PID-ов процессов
end;
function _TerminateProcess(ProcID: Cardinal): boolean; //Термировать процесс по его PID-у
var
hProcess: THandle;
begin
hProcess:=OpenProcess(PROCESS_TERMINATE, false, ProcID);
if (hProcess=0) then
begin
result:=false;
exit;
end;
result:=Windows.TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
if (not result) then
exit;
result:=true;
end;
function EnablePrivilege(PrivelegeName: PChar): boolean; //Установка приоритета текущему потоку
var
hToken: THandle;
tp: TOKEN_PRIVILEGES;
return: Cardinal;
begin
if (OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)) then
begin
tp. PrivilegeCount:=1;
tp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
result:=LookupPrivilegeValueA(nil, PrivelegeName, tp.Privileges[0].Luid);
if (not result) then
begin
CloseHandle(hToken);
exit;
end;
result:=AdjustTokenPrivileges(hToken, FALSE, tp, sizeof(tp), nil, return);
CloseHandle(hToken);
if (not result) then
exit;
end
else
begin
result:=false;
exit;
end;
result:=true;
end;
function GetProcessList: TProcNameList; //Ф-ия получения информации о процессах системы
var
hSnapshoot: integer;
pe32: TProcessEntry32;
begin
FillChar(result, sizeof(TProcNameList), #0);
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe32.dwSize := SizeOf(TProcessEntry32);
Process32First(hSnapshoot, pe32);
repeat
SetLength(result.Names, length(result.Names)+1);
SetLength(result.pIDs, length(result.pIDs)+1);
inc(result.Count);
result.pIDs[result.Count-1]:=pe32.th32ProcessID;
result.Names[result.Count-1]:=pe32.szExeFile;
until (not Process32Next(hSnapshoot,pe32));
end;
var
i:integer;
ProcList: TProcNameList;
begin
EnablePrivilege("SeDebugPrivilege"); //Установить нашему потоку приоритет отладчика, чтобы мы смогли снять любой процесс
ProcList := GetProcessList; //Получить информацию о процессах в переменную
for i:=0 to ProcList.Count-1 do //Цикл от 0-я до Количества процессов в системе
if ProcList.Names[i] = ProcessName then //Если процесс под номером i имеет имя нужное нам, то
_TerminateProcess(ProcList.pIDs[i]); //Термируем его по его PID-у
end;
← →
Игорь Шевченко © (2004-11-19 10:50) [11]
> if (not result) then
> exit;
>
> result:=true;
> end;
Фтопку
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.063 c