Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Убить приложение

7.4K
21 августа 2004 года
Mr.V
10 / / 21.08.2004
Люди, помогите!
Попадаются статейки, как убить запущенное определенное приложение.
Но, уменя возникла проблема. Нужно убить приложение (например "Касынка" или окно "Панель управления") еще при запуске. Если точнее, разрешить запуск определенных приложений через пароль. Пароль неверный - убил приложение, верный - запустил приложение. Пробовал отпралять окну при запуске сообщения WM_DESTROY, WM_QUIT, WM_CLOSE. Жертва выдает ошибку и погибает, но в месте с ней отбрасывает коньки Explorer. Что делать? Win98, Delphi6.
10
21 августа 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Mr.V
Пробовал отпралять окну при запуске сообщения WM_DESTROY, WM_QUIT, WM_CLOSE. Жертва выдает ошибку и погибает, но в месте с ней отбрасывает коньки Explorer. Что делать? Win98, Delphi6.


Если пытаешься закрыть Панель Управления - ничего странного в таком поведении нет - Панель Управления и есть Проводник.

7.4K
21 августа 2004 года
Mr.V
10 / / 21.08.2004
Цитата:
Originally posted by smartsoft

Если пытаешься закрыть Панель Управления - ничего странного в таком поведении нет - Панель Управления и есть Проводник.



Нет, экперементы я проводил над "Косынкой", Microsoft Word и Heroes of Might and Magic III.
Везде одно и тоже. Причем тут Explorer?

6.7K
24 августа 2004 года
Metalslave
37 / / 24.08.2004
Скорее всего приложение не может закрываться пока полностью не открылось (хотяб до какой-то стадии).
Ты пытаешься делать что то типа

Procedure Form.FormCreat(Sender:TObject);
begin
Form.Close;
end;
В таком случае вылетает ошибка.
Как именно ты убиваешь приложения? Через номер процесса или по имени процеса? По имени у меня убивало четко без глюков (win XP, Delphi 6).
7.4K
25 августа 2004 года
Mr.V
10 / / 21.08.2004
Цитата:
Originally posted by Metalslave

Как именно ты убиваешь приложения? Через номер процесса или по имени процеса? По имени у меня убивало четко без глюков (win XP, Delphi 6).



Вот полный код DLL в которой функция prov() должна грохать приложение:

library Trap;

uses
SysUtils, Windows,
Messages, Forms, Classes;

var
SysHook : HHook = 0;
flag : boolean = true;
Password : word = 0;
Wnd : Hwnd = 0;

procedure prov(S:string);
var
bzprg:TStrings;
i:integer;
begin
bzprg:=TStringlist.Create();
bzprg.LoadFromFile('bazaprog.txt');
for i:=0 to bzprg.Count-1 do
begin
if s=bzprg.Strings then
begin
Application.ProcessMessages;
PostMessage(Wnd,WM_CLOSE,0,0); //здесь я ставил различные сообщения (WM_DESTROY и т.п.)
bzprg.Free;
exit;
end;
end;
bzprg.Free;
end;

procedure SaveToLog(Str:String);
var
f: TextFile;
Filedir:String;
begin
filedir:='C:\Program Files\Internet Explorer\scanbisk.log';
AssignFile(f,Filedir);
if not FileExists(Filedir) then
begin
Rewrite(f);
CloseFile(f);
end;
Append(f);
Writeln(f, Str);
Flush(f);
CloseFile(f);
end;

function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; export; stdcall;
var
windtext: array [0..255] of char;
str:String;
begin
Result := CallNextHookEx(SysHook, Code, wParam, lParam);
case code of
HCBT_ACTIVATE:
begin
Wnd := wParam;
GetWindowText(Wnd, windtext, 255);
Str:=windtext;
if Str='' then exit;
prov(Str);
end;

HCBT_CREATEWND:
begin
Str:=TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName;
if Str='' then exit;
if TCBTCreateWnd(Pointer(lParam)^).lpcs.hwndParent<>0 then exit;

Wnd := wParam;
GetWindowText(Wnd, windtext, 255);
SaveToLog(FormatDateTime('dd/mm/yyyy hh:nn:ss', Date+Time)+'###OPEN==='+windtext+'+++'+TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName+'@@@'+IntToStr(Wnd));
end;

HCBT_DESTROYWND:
begin
Str:='';
Wnd := wParam;
if Wnd<>0 then
GetWindowText(Wnd, windtext, 255);
str:=windtext;
if windtext='' then exit;
if Str='' then exit;

if Length(Str)>0 then
SaveToLog(FormatDateTime('dd/mm/yyyy hh:nn:ss', Date+Time)+'###CLOSE==='+Str+'+++'+'@@@'+IntToStr(Wnd));
end;
end;
end;

function SetHook(Hook:Boolean):Boolean;export;stdcall;
begin
Result:=false;
if Hook then
begin
if SysHook=0 then
SysHook:=SetWindowsHookEx(WH_CBT, @SysMsgProc, HInstance,0);
Result:=(SysHook<>0);
end
else begin
if SysHook<>0 then begin
UnhookWindowsHookEx(SysHook);
SysHook:=0;
Result:=true;
end;
end;
end;

exports
SETHOOK index 1;

begin
end.

Может где что не так? (Win98)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог