![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Снова 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 ©
Снимай хук из контекста установившего его приложения.