Суббота, 21.12.2024, 19:41 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Волк-1024, Anton93, xXxSh@dowxXx  
Ожидаем появления процесса в памяти
Anton93Дата: Суббота, 11.12.2010, 20:13 | Сообщение # 1
Продвинутый
Зарегистрирован: 06.01.2010
Группа: Модераторы
Сообщений: 320
Статус: Offline
как с помощью ловушек это реализовать? smile

ICQ: 41896

Сообщение отредактировал Anton93 - Воскресенье, 12.12.2010, 12:33
 
C@TДата: Воскресенье, 12.12.2010, 13:34 | Сообщение # 2
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
вот пример ожидание появления процесс в памяти но не с помощью хука а запуская процедуру ожидания процесса в отдельном потоке

Code

unit Unit1;

interface

uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls,tlhelp32;

type
   TForm1 = class(TForm)
     Button1: TButton;
     Memo1: TMemo;
     procedure Button1Click(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
   end;

var
   Form1: TForm1;
   ProcessName:String;

implementation

{$R *.dfm}
Procedure ChekProcess;
var
SnapShot:THandle;
process:TProcessEntry32;
begin
   while true do
   begin
     SnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);//делаем снимок процессов
     process.dwSize := SizeOf(Process);//указываем размер структуры
     Process32First(SnapShot,Process);//начинаем перебирать процессы
     repeat
       if process.szExeFile = ProcessName then
       begin
         MessageBox(0,'Process Found','Process Found',0);
         Exit;//выходим из потока
       end;
     until Process32Next(SnapShot,Process) <> true;
     CloseHandle(SnapShot);
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
thr,id:Cardinal;
begin
ProcessName := 'calc.exe';//указываем в глобальную переменную имя нужного нам процесса
thr := BeginThread(nil,0,Addr(ChekProcess),nil,0,id);//запускаем процедуру ожидания процесса в отдельном потоке
end;

end.

для того чтобы в функции хука проверять имя процесса который выполнил обработку события можно яюзать функцию ParamStr(0);

Code

function SysMsgProcn(code:integer;Wparam:word;Lparam:longint):longint;stdcall;
var
f:cardinal;
buf:array [0..255] of char;
buf2:string;
s:string;
i:integer;
nw:cardinal;
begin
result := CallNextHookEx(Syshook,code,wparam,lparam);
s := ParamStr(0);
for i := length(s) downto 1 do
begin
if s[i] = '\' then//немножечко парсим строку (отрезаем путь от имени ехе файла)
break;
end;
buf2 := Copy(s,i,Length(s) - i + 1);
if buf2 = 'calc.exe' then
MessageBoxA(0,'Process Found','Process Found',0);
end;


 
Anton93Дата: Понедельник, 13.12.2010, 13:02 | Сообщение # 3
Продвинутый
Зарегистрирован: 06.01.2010
Группа: Модераторы
Сообщений: 320
Статус: Offline
оо, неплохо smile

ICQ: 41896
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz