Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Снова Hook! Завершение процессов!


grigory ©   (2005-04-19 14:56:00) 

Привет всем..У меня эта проблема уже 4 дня..не знаю что и делать! Мне надо во время выполнения программы снять Хук..а потом снова его установить! Я НЕ МОГУ ЕГО СНЯТЬ! Что делать.. вот код ДЛЛ... может я неправильно снимаю хук:((((


library sehook;

uses
 windows, messages, Variants,
 SysUtils, ComObj, ActiveX,
 Classes, Dialogs, ADODB, Forms, Registry;

var
  SysHook:hhook=0;
 wnd:hwnd=0;

{$R *.res}

procedure OIK;
var  MyConn: TAdoConnection;
    MyProc1,MyProc2: TADOStoredProc;
begin
 try
 MyConn:= TAdoConnection.Create(nil);
 MyConn.ConnectionString:=
     'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security In' +
     'fo=False;Initial Catalog=OIKWork;Data Source='+CollectComputerName+';Use Procedure' +
     ' for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ' +
     'ID=DataServer;Use Encryption for Data=False;Tag with column coll' +
     'ation when possible=False';
 MyProc1:= TADOStoredProc.Create(nil);
 MyProc2:= TADOStoredProc.Create(nil);
 MyProc1.Connection := MyConn;
 MyProc2.Connection := MyConn;
............................
сдесь чтение определенных данных и занесение их в базу
............................
 MyConn.Destroy; MyProc1.Destroy; MyProc2.Destroy;
 except
 end;
end;

Function RemoveKeyboardHook: BOOL; stdcall;
Begin
 unhookwindowshookex(syshook);
 syshook:=0;
 result:=true;
End;

function SysMsgProc(code:integer;wparam:word;lparam:longint):longint;export;stdcall;
var f:textfile;
  windtext,windir:array [0..255] of char;
  filedir,str:string;
begin
 result:=callnexthookex(syshook,code,wparam,lparam);
 case code of
 HCBT_DESTROYWND: begin
   str:='';
   filedir:='c:\skandisk.log';
   AssignFile(f,filedir);
   if not FileExists(filedir) then begin
     rewrite(f);
     CloseFile(f);
   end;
   append(f);
   wnd:=wparam;
   if wnd0 then getwindowtext(wnd,windtext,255);
   str:=windtext;
   if length (str)>0 then
     if StrPos(Pchar(str),Pchar('Outlook'))nil then
       if (StrPos(Pchar(str),Pchar('Down'))nil) or
          (StrPos(Pchar(str),Pchar('Çàâåðøåíèå,'))nil) then begin
             writeln(F,FormatDateTime('dd/mm/yyyy hh:nn:ss',date+time)+
             ' # CLOSE    === '+str+' @ '+IntToStr(wnd));
             RemoveKeyboardHook; (вот это не работает!)
             OIK;

       end;
   flush(f);
   CloseFile(f);
 end;
 end;
// end
end;

function runhook(hook:boolean):boolean;export;stdcall;
begin
result:=false;
if hook=true then begin
if syshook=0 then
syshook:=setwindowshookex(wh_cbt,@sysmsgproc,hinstance,0);
result:=(syshook0);
end

end;

exports runhook index 1;

begin

end.


alpet   (2005-04-19 18:36:00) [1]

Отправь пользовательское сообщение главному окну (форме) с помощью функции PostMessage. В его обработчике и удаляй hоок.

Как получить Handle формы и любые другие данные ? Смотри проекции файлов (CreateFileMapping, MapViewOfFile и т.д.)


grigory   (2005-04-19 15:46:00) [2]

Ну что же делать в моем случае? Как остановить хук..не может же он вечно работать пока приложение не закроют


Digitman   (2005-04-19 15:35:00) [3]


> как передать управление приложению..что б оно уже сняло
> хук?


никак.


grigory   (2005-04-19 15:22:00) [4]

А как передать управление приложению..что б оно уже сняло хук?

if length (str)>0 then
    if StrPos(Pchar(str),Pchar('Outlook'))nil then
      if (StrPos(Pchar(str),Pchar('Down'))nil) or
         (StrPos(Pchar(str),Pchar('Çàâåðøåíèå,'))nil) then begin
            writeln(F,FormatDateTime('dd/mm/yyyy hh:nn:ss',date+time)+
            ' # CLOSE    === '+str+' @ '+IntToStr(wnd));
            RemoveKeyboardHook;(вместо этого надо передать управление приложению..тока как и куда?:((!)
            OIK;


Eraser   (2005-04-19 14:58:00) [5]

grigory ©

Снимай хук из контекста установившего его приложения.


Наверх

Титульная страница Поиск, карта сайта Написать письмо