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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2007, 20:01   #11
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

примерно вот так выглядит каркас обработчика сообщений
Код:
function MsgFilterFunc(Code: Integer; wParam, lParam: Longint): Longint;stdcall;

begin
  Result := 0;
  if (Code < 0) or (wParam = PM_NOREMOVE) then
   Result := CallNextHookEx(SysHook, Code, wParam, lParam)
                                                             else
   begin
    case TPMsg(lParam)^.message of
     WM_***:   
      begin
        //действие при сообщении
      end;
     WM_***:
      begin
        //действие при сообщении
      end;
    end;
   end;     
 Result := CallNextHookEx(SysHook, Code, wParam, lParam); 
end;
Цитата:
Сообщение от joker Посмотреть сообщение
и в принципе не меняются, меняется сам файл, как отследить изменение файла?
при загрузке программы сделай копию этих файлов, сохрани куда-нибудь дату последнего изменения файла и его размер, если что то изменилось восстанови из копии
rpy3uH вне форума Ответить с цитированием
Старый 29.10.2007, 12:21   #12
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

даже при изменении реестра ловушка в принципе не работает,
вот код
Код:
library Hook;

uses
  Windows,
  messages,
  registry;

var
SysHook:HHook=0;
Wnd:Hwnd=0;
f1,f2,f3:string;


procedure FirstCheck;
Var reg:TRegistry;
begin
reg:=TRegistry.Create;
try
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('Control Panel\Desktop',false);
f1:=reg.ReadString('Wallpaper');
f2:=reg.ReadString('ConvertedWallpaper');
f3:=reg.ReadString('OriginalWallpaper');
reg.CloseKey;
finally
reg.Free;
end;
end;

function DesktopChange:boolean;
Var reg:TRegistry; r1,r2,r3:string;
Begin
result:=false;
reg:=TRegistry.Create;
try
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('Control Panel\Desktop',false);
r1:=reg.ReadString('Wallpaper');
r2:=reg.ReadString('ConvertedWallpaper');
r3:=reg.ReadString('OriginalWallpaper');
if (r1<>f1) or (r2<>f2) or (r3<>f3) then result:=true;
reg.CloseKey;
finally
reg.Free;
end;
end;

function SysMsgProc(code:integer; wParam,lparam:longint):longint;
stdcall;
Var reg:TRegistry;
begin
if (code>0) or (wparam=0) then
result:=CallNextHookEx(SysHook,Code,wParam,lParam)
else
If (PMsg(lparam)^.message=WM_WININICHANGE) and DesktopChange
then
begin
reg:=TRegistry.Create;
try
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('Control Panel\Desktop',false);
reg.WriteString('Wallpaper',f1);
reg.WriteString('ConvertedWallpaper',f2);
reg.WriteString('OriginalWallpaper',f3);
reg.CloseKey;
finally
reg.Free;
end;
MessageBox(0,'Компьютеру не нравится эта картинка','Ошибка',MB_ICONERROR);
end;
result:=CallNextHookEx(SysHook,Code,wParam,lParam);
end;

procedure RunStopHook(State:boolean) export; stdcall;
begin
if State then
begin
FirstCheck;
SysHook:=SetWindowsHookEx(WH_GETMESSAGE,@SysMsgProc,HInstance,0);
end
else
 begin
  UnhookWindowsHookEx(SysHook);
  SysHook:=0;
 end;
end;

exports RunStopHook index 1;
begin
end.

Никак не реагирует на изменения в этих трёх строках реесра,
в чём дело?

Как сделать РАБОТАЮЩУЮ ловушку для файлов, отслеживающую их изменения, с какими параметрами её создавать

И вообще мне не помешал бы нормальный исчерпывающий материал по установке системных ловушек а так я только зря трачу слишком много времени
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как отследить изменения в базе данных unit-85 Помощь студентам 2 13.08.2008 11:29
Как отследить нажатие кнопки Обновить из PHP? Timpi PHP 4 11.07.2008 09:16
Как отследить направление движения мыши? yourself Общие вопросы Delphi 8 30.05.2008 08:04
Как отследить отпускание клавиши? Zefick Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 27.05.2008 19:14
Изменение фона текущей строки puky Microsoft Office Access 1 09.02.2007 12:05