Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-1103182543
ASMiD
2004-12-16 10:35
2005.01.02
Перехват операций с файлами


14-1102938911
Cobalt
2004-12-13 14:55
2005.01.02
Дельфи7 под MemProof


1-1103298655
saNat
2004-12-17 18:50
2005.01.02
Курсор в TMemo


4-1100800459
The Scorpion
2004-11-18 20:54
2005.01.02
Проецируемые в память файлы


9-1093153629
Ле:рч
2004-08-22 09:47
2005.01.02
Пожалуйста, оцените !





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский