Hook на CreateProcess

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Аватара пользователя
Vedrus
Сообщения: 39
Зарегистрирован: 27 сен 2007, 13:04

1. Извинияюсь, плохо прочитал Ваш пост. Показалось, что Вы через модальной окно что-то делали.
2. Если создавать окно уже зарегистрированного класса, то оно создастся. Но обычные приложения перед созданиям окна регистрируют его класс.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Короче сегодня добрался до вопроса и решил не париться, сделал через сравнение хандлов, кому нада юзайте вот код..

Код: Выделить всё

(*
//------------------------------------------------------------------------------
global vars
  k, n: Word;
  flag: Boolean;
  _Handles, Handles: array[0..65535] of HWND;
//------------------------------------------------------------------------------
Пример использования:
  KillAllNewProc(4000);
//------------------------------------------------------------------------------  
*)
procedure Kill(h: HWND);
const
  process_terminate = $0001;
var
  ProcessHandle : THandle;
  Processid: integer;
begin
  GetWindowTHreadProcessId(h, @Processid);
  ProcessHandle := OpenProcess(process_terminate, False, Processid);
  TerminateProcess(ProcessHandle, 4);
end;
//------------------------------------------------------------------------------
function EnumWin(h: HWND; Param: LongInt): BOOL; stdcall;
begin
  _Handles[k] := h;
  k := k+1; //or inc(n);    :)
  Result := True;
end;
//------------------------------------------------------------------------------
function EnumWin2(h: HWND; Param: LongInt): BOOL; stdcall;
begin
  Handles[n] := h;
  n := n+1; //or inc(n);    :)
  Result := True;
end;
//------------------------------------------------------------------------------
procedure KillAllNewProc(SleepTime: Word);
var
  i, c: Word;
begin
  k := 0;
  EnumWindows(@EnumWin, 0);
  Form1.pause(SleepTime); //you can use Sleep(); //pause(); is my func    Duncon
  n := 0;
  EnumWindows(@EnumWin2, 0);
  Application.ProcessMessages;
  for i := n downto 0 do begin
    flag := True;
    for c := k downto 0 do
      if Handles[i] = _Handles[c] then begin
        flag := False;
        Break;
      end;
    if flag then Kill(Handles[i]);
  end;
end;
Ответить