Страница 2 из 2

Re: Hook на CreateProcess

Добавлено: 30 дек 2007, 17:52
Vedrus
1. Извинияюсь, плохо прочитал Ваш пост. Показалось, что Вы через модальной окно что-то делали.
2. Если создавать окно уже зарегистрированного класса, то оно создастся. Но обычные приложения перед созданиям окна регистрируют его класс.

Re: Hook на CreateProcess

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

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

(*
//------------------------------------------------------------------------------
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;