我将运行一个程序~~让他在后天监控注册表特定的一个健(自己可以指定),当别的程序要对所监控的键进行改动的时候,程序将自动提示~~~
并给出该程序名称和被改动的键值
请问该怎么实现~~~~~谢谢大家~~~:-)
并给出该程序名称和被改动的键值
请问该怎么实现~~~~~谢谢大家~~~:-)
解决方案 »
- 问一个对高手不算太难的问题
- 500大洋求两幅图象过渡的程序代码.
- 問一個簡單的問題,更新時提示row cannot be located for updating錯誤,一般是什麽原因?
- 请问有没有Access存储图片的例子?谢谢
- bmp位图问题!
- 那位同仁可以给在下讲讲QQ的原理,如有代码更佳
- Facon Server组件与进程,高手请!
- Access数据库中有一个表,当Table.open时总是报错
- C++的DLL如何给DELPHI调用问题,分数大赠送!附送‘春宫图’一张
- 我刚开始学Delphi,感到与c有太大的区别。以前学c能编不少小程序,但学Delphi却好像没法下手,请问各位有什么好的学习方法?谢谢!
- 怎么实现DBGrid中包含checkbox?
- 请问这段语句错在哪里?
对于Hook我可是白痴~~~
楼上的大哥,能不能给出具体代码~~~
简单而有效的~`
SHELL32.DLL:RegNotifyChangeKeyValueSHChangeNotifyDeregisterHANDLE WINAPI SHChangeNotifyRegister(HWND hWnd,DWORD dwFlags,LONG wEventMask,UINT uMsg,DWORD cItems, LPCNOTIFYREGISTER lpItems); index 2; BOOL WINAPI SHChangeNotifyDeregister(HANDLE hNotify);index 4; //hNotify Come form SHChangeNotifyRegisterHANDLE WINAPI SHChangeNotification_Lock(HANDLE hMemoryMap,DWORD dwProcessId,LPCITEMIDLIST **lppidls,LPLONG lpwEventId); index 644; BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock); index 645;Ex:LPCITEMIDLIST *pidls;LONG wEventId;if (bRunningWindowsNT) {HANDLE hLock;hLock = SHChangeNotification_Lock((HANDLE)wParam, (DWORD)lParam,&pidls, &wEventId);if (hLock) {ProcessEvent(wEventId,pidls[0], pidls[1]);SHChangeNotification_Unlock(hLock);}}else {pidls = (LPCITEMIDLIST*)wParam;wEventId = (LONG)lParam;ProcessEvent(wEventId,pidls[0], pidls[1]);}我曾经做过一测试的程序,不过有点问题,我把全部代码贴出来吧:unit reg1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,registry,StdCtrls;constmachine_rootkey=HKEY_LOCAL_MACHINE;user_rootkey=HKEY_CURRENT_USER;defaultuser_rootkey=HKEY_USERS;subkey1='SOFTWARE';subkey2='SOFTWARE';function regmonitor(hkeys:hkey;keys:string):boolean;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Memo1: TMemo;procedure Button1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM}function regmonitor(hkeys:hkey;keys:string):boolean;varreg1:tregistry;beginreg1:=tregistry.Create;reg1.RootKey:=hkeys;tryreg1.OpenKey(keys,false);//我的问题是在这下面的几句,当我执行时,如果注册表里我指定的键没被改变过,程序//好像失去响应一样,你试试就知道了,也许要用多线程才行,不过我后来没去试了application.ProcessMessages;if RegNotifyChangeKeyValue(reg1.CurrentKey,false,REG_NOTIFY_CHANGE_NAME+REG_NOTIFY_CHANGE_LAST_SET,0,false)=ERROR_SUCCESS thenresult:=trueelseresult:=false;finallyreg1.CloseKey;reg1.Free;end;end;procedure TForm1.Button1Click(Sender: TObject);beginmemo1.Lines.Clear;if regmonitor(machine_rootkey,subkey1) thenmemo1.Lines.Add('registry is monitored')elsememo1.Lines.Add('registry monitors fail');end;end.
为什么要都那么复杂?楼主只不过是要监视一个键而已
你程序运行的时候把你要监视读出,写入一个ini文件(下次就不用读了,同时也可以作为比较),然后用定时器,定期获得那个键的值,与原来的比较就可以了
不过,定时器好象挺消耗系统资源的~~
我是菜鸟萨,要是明白如何用Hook做这个,我就不来CSDN找大家帮忙了~`
嗯~那个用定时器我试过~~效果一般
而且无法获得一些相关信息~~~
不过这个做起来简单~`~但是有没有更彻底的~~
Hook我的确不回,有没有高手指导~~
给点意见,或者给个全面一些的源代码~~~楼上的Means_pan(酷鱼-真的是"难得胡涂") 谢谢你的代码~~
我在调试,如果成功了的话,我马上来结贴
我不是小气之人,弄好了,在加分阿~~:-)
大家如果有什么新的意见。麻烦尽量多多提出,让小弟参考~~谢谢大家拉~~