¶ÁÊé DelphiÏÂÉîÈëWindowsºËÐıà³Ì µÚ¶þÌì
¼¼Êõ½»Á÷,DH½²½â. ½ñÌì½øÈëÕâÊéµÚ¶þÕ ¹³×Ó(HOOK).
ÏÈ˵˵¹³×ÓÊÇʲô?
¹³×ÓÆäʵ¾ÍÔÚÄã»·¾³ÖмÓÉÏÒ»²ã¹ýÂË,ÔÚÌØÊâÇé¿öϾʹ¥·¢¹³×ӻص÷º¯Êý.
±ÈÈç˵ÎÒÃǰ²×°ÁËÈ«¾ÖµÄ¼üÅ̹³×Ó,ÄÇôµ±ÎÒÃǰ´¶¯¼üÅÌÉÏÃæµÄ¼üµÄʱºò,¹³×ӵĻص÷º¯Êý¾Í»á´¥·¢.
ÎÒÃÇÒ²ÄÜ¿´µ½±¾À´ÊÇÖ±À´Ö±ÍùµÄ,½á¹ûÏÖÔÚÖм䰲װÁËÒ»²ã¹ýÂË,ϵͳµÄЧÂʿ϶¨»áÓÐËùϽµµÄ.
ÒªÁ˽â,ÎÒÃÇÖ»ÐèÒªÖªµÀ3¸öº¯Êý:
1 ÉϹ³º¯Êý: function SetWindowsHookEx(
idHook: Integer;//¹³×ÓµÄÀàÐÍ
lpfn: TFNHookProc; //»Øµ÷º¯ÊýÖ¸Õë
hmod: HINST; //Ò»°ãΪ0»òÕßInstance
dwThreadId: DWORD//È«¾Ö¹³×Ó¾ÍΪ0,²»È»¾ÍΪָ¶¨½ø³Ìid
): HHOOK; stdcall;//³É¹¦¾Í·µ»ØÒ»¸öÖµ,²»³É¹¦¾ÍΪ0
ÆäÖй³×ÓÀàÐÍÓÐ:
{$EXTERNALSYM WH_MIN}
WH_MIN = -1;
{$EXTERNALSYM WH_MSGFILTER}
WH_MSGFILTER = -1;
{$EXTERNALSYM WH_JOURNALRECORD}
WH_JOURNALRECORD = 0;
{$EXTERNALSYM WH_JOURNALPLAYBACK}
WH_JOURNALPLAYBACK = 1;
{$EXTERNALSYM WH_KEYBOARD}
WH_KEYBOARD = 2;
{$EXTERNALSYM WH_GETMESSAGE}
WH_GETMESSAGE = 3;
{$EXTERNALSYM WH_CALLWNDPROC}
WH_CALLWNDPROC = 4;
{$EXTERNALSYM WH_CBT}
WH_CBT = 5;
{$EXTERNALSYM WH_SYSMSGFILTER}
WH_SYSMSGFILTER = 6;
{$EXTERNALSYM WH_MOUSE}
WH_MOUSE = 7;
{$EXTERNALSYM WH_HARDWARE}
WH_HARDWARE = 8;
{$EXTERNALSYM WH_DEBUG}
WH_DEBUG = 9;
{$EXTERNALSYM WH_SHELL}
WH_SHELL = 10;
{$EXTERNALSYM WH_FOREGROUNDIDLE}
WH_FOREGROUNDIDLE = 11;
{$EXTERNALSYM WH_CALLWNDPROCRET}
WH_CALLWNDPROCRET = 12;
{$EXTERNALSYM WH_KEYBOARD_LL}
WH_KEYBOARD_LL = 13;
{$EXTERNALSYM WH_MOUSE_LL}
WH_MOUSE_LL = 14;
{$EXTERNALSYM WH_MAX}
WH_MAX = 14;
{$EXTERNALSYM WH_MINHOOK}
WH_MINHOOK = WH_MIN;
{$EXTERNALSYM WH_MAXHOOK}
WH_MAXHOOK = WH_MAX;
¾ßÌå×÷Óûù±¾ÉϾͿ´Ãû×Ö¾ÍÖªµÀ,¸ö±ðµÄÎÒÒ²²»ÖªµÀ,¾ßÌåµÄ´ó¼Ò¿´MSDN°É.Õâ¸öÊǸö¿û»¨±¦µä.
2 ж¹³º¯Êý:
function UnhookWindowsHookEx(
hhk: HHOOK//ÉϹ³º¯Êý·µ»ØµÄ¾ä±ú
): BOOL; stdcall;
3 ¾ßÌåµÄ¹³×ӻص÷º¯Êý:
TFNHookProc = function (code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;
ºÃµÄ˵ÁËÕâô¶à,¿´Àý×Ó:
Ïà¹ØÎĵµ£º
ÔÎIJμû£º http://blog.csdn.net/ingener/archive/2007/12/22/1958535.aspx
¹ØÓÚDelphiÖÐDLL·â×°¶ÔÏóµÄ¼¸ÖÖ·½·¨ÕûÀí¼°Ìå»á
DelphiÓÃDLLÀ´·â×°¶ÔÏóµÄ¼¼ÊõÖ÷ÒªÓÐÈýÖÖ:
ÓýӿÚʵÏÖ
Óô¿ÐéºÍ³éÏóÀà·½·¨ÊµÏÖ
ÓÃÀàÒýÓÃʵÏÖ
ǰÁ½ÖÖ£¬¶¼ÊÇÔÚDLLÖÐÉú³ÉÀàʵÀý£»µÚ3ÖÖͨ¹ýÔÚµ÷Ó÷½Éú³ÉʵÀý¡£ÈýÖÖ·½·¨µÄ¹²Í¬¾ÖÏÞÈçÏ£º ......
¡¡¡¡DelphiÓïÑÔ£¬ÎÞÂÛÊÇ´Ó¿ª·¢ËÙ¶È¡¢»¹ÊÇÔËÐÐËÙ¶È¡¢»¹ÊDZàÒëËÙ¶È¡¢»¹ÊDZàÒëÖ®ºóµÄÖ´ÐÐÎļþÌå»ý£¬¶¼ÊÇÊýÒ»Êý¶þµÄ¡£Òò´Ë±»×÷Ϊ¹²ÏíÈí¼þ¡¢¿ª·¢²úÆ·¡¢ÖÆ×÷“ÂÌÉ«Èí¼þ”µÄÊ×Ñ¡¡£µ«ÊÇ£¬ÓÉÓÚÖî¶àÔÒò£¬DelphiÖУ¬ÓÐһЩ¿Ø¼þ£¬´æÔÚһЩbug¡£²»ÂÛ¹ã´ó¼¼ÊõÈËÔ±ÈçºÎ·´Ó¦£¬Delphi¹Ù·½¾ÍÊÇ“ÊÓ¶ø²»¼û”¡£ÓÐÎÊÌ⣬È˼ ......
ÔÚDelphiÖУ¬µ÷ÓÃShowmessageºó£¬ÈçºÎʹµ¯³öµÄ¶Ô»°¿òÔÚÒ»ÃëÖÓºó×Ô¶¯¹Ø±Õ£¬¶ø²»ÓÃÊÖ¶¯È¥µãÈ·¶¨
1:ÓÃtimer¿Ø¼þµÄº¯Êý
procedure TForm1.Timer1Timer(Sender: TObject);
var
AHandle: THandle;
begin
AHandle := FindWindow('TMessageForm',
PChar(Application.Title));
if AHandle > 0 then
SendMessage( ......
¼¼Êõ½»Á÷,DH½²½â. ÔÚD2010µÄclassesÖÐÓиöTBitsÀà,Õâ¸öÀàÖ÷ÒªÊÇλ²Ù×÷µÄ. TBits = class
private
FSize: Integer;
FBits: Pointer;
procedure Error;
procedure SetSize(Value: Integer);
procedure SetBit(Index: Integer; Value: Boolean);
function GetBit(Index: Integer): Boole ......