±ÍÇÏ´Â ¼Õ´Ô À̽ʴϴÙ
·Î±×ÀÎ
ȸ¿ø°¡ÀÔ
  
  µ¨¸¶´ç °ø½Ä ÀºÇà°èÁÂ
  ÇϳªÀºÇà 227-910235-83607
  ¿¹±ÝÁÖ ÀÌ»ó±¹(¿î¿µÁø)
ÇÁ·ÎÁ§Æ® °Ô½ÃÆÇ
ÅõÇ¥°Ô½ÃÆÇ
µ¨¸¶´ç¼Ò°³
±âÃʺÎÅÍ È°¿ë±îÁö! µ¨ÆÄÀÌ ±³À° - µ¥ºê±â¾î
Áú¹®°ú ´äº¯ Áú¹®°ú ´äº¯ ÀÔ´Ï´Ù.
±Û³»¿ë - Áú¹®°ú ´äº¯
 °­Á ÆÁÁ¤º¸¿¡ Àִ ÈÄÅ·°­ÁÂ
³Ø½ººô
(Àåžç)
2017-02-25 ¿ÀÈÄ 7:11:17
668ȸ Á¶È¸


µî·ÏµÈ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù.
°­Á¿¡ ¿Ã¶ó¿ÍÀִ ¼Ò½ºÀä ...
¿äºÎºÐÀÌ ¿¡·¯°¡ ³³´Ï´Ù.
Ȥ½Ã ÀÌÀ¯¸¦ ¾Ë¼öÀÖÀ»±î¿ä ?   

¿¡·¯ ³»¿ëÀº 

Cannot run project unless a host application is defined. use the run|parameters..dialog box
ÀÌ·¸½À´Ï´Ù


library HookDLL;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  System.SysUtils, windows, Messages,
  System.Classes;

var
HKbHook : HHOOK;
HShellHook : HHOOK;

Const
HookDataFile = ¡®c:\Hook.Dat¡¯;

procedure ReadData;
var
F : TFileStream;
begin
F := TFileStream.Create(HookDataFile, fmOpenRead);
try
F.Read(HKbHook, sizeof(HKbHook));
F.Read(HShellHook, sizeof(HShellHook));
finally
F.Free;
end;
end;

procedure WriteData;
var
F : TFileStream;
begin
F := TFileStream.Create(HookDataFile, fmCreate);
try
F.Write(HKbHook, sizeof(HKbHook));
F.Write(HShellHook, sizeof(HShellHook));
finally
F.Free;
end;
end;

begin
HKbHook := 0;
HShellHook := 0;
end.

{ °¥±¸¸®Áú ÇÁ·Î½ÃÀú }
function MyKBHook(Code : Integer; wParam : WPARAM; lParam : LPARAM) : LongInt; stdcall;
begin
{ ÆÄÀÏ¿¡ ÀúÀåµÈ ÈÅÇÚµéÀ» Àоî¿Â´Ù. }
if HKbHook = 0 then
ReadData;
{ Code°ªÀÌ 0º¸´Ù Å©°Å³ª °°À»¶§¸¸ }
{ °¥±¸¸®ÁúÀ» Çϴ °ÍÀÌ ¿ä·É. }
if Code >= 0 then
begin
{ Å°º¸µå¸¦ ¸ù¶¥ ¾È´­¸®°Ô ÇÏÀÚ. }
{ ´ÙÀ½ ÈÅüÀÎÀÌ ºÒ¸®Áö ¾Êµµ·Ï Çϸ頳¡~! }
Result := Integer(True);
Exit;
end;
Result := CallNextHookEx(HKbHook, Code, wParam, lParam);
end;

{ Å°º¸µå °¥±¸¸® Âï±â }
function HookKB : Boolean;
begin
HKbHook := SetWindowsHookEx( WH_KEYBOARD, MyKBHook, HInstance, 0);
Result := Boolean(HKbHook);
{ ÆÄÀÏ¿¡ ÈÅÇڵ頾²±â }
WriteData;
end;

{ Å°º¸µå °¥±¸¸® »Ì±â }
function UnHookKB : Boolean;
begin
{ ÆÄÀÏ¿¡ ÀúÀåµÈ ÈÅÇÚµéÀ» Àоî¿Â´Ù. }
if HKbHook = 0 then
ReadData;
Result := UnhookWindowsHookEx(HKbHook);
end;

{ ¼¿ °¥±¸¸®Áú }
function MyShellHook(Code : Integer; wParam : WPARAM; lParam : LPARAM) : LongInt; stdcall;
var
Buff : array [0..255] of Char;
s : String;
begin
{ ÆÄÀÏ¿¡ ÀúÀåµÈ ÈÅÇÚµéÀ» Àоî¿Â´Ù. }
if HShellHook = 0 then
ReadData;
{ À©µµ¿ìÀÇ »ý¼º°ú ¼Ò¸ê¸¸ ±«·ÓÈù´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº µµ¿ò¸»À» ÂüÁ¶ÇÒ °Í. }
if (code = HSHELL_WINDOWCREATED) or
(code = HSHELL_WINDOWDESTROYED) then
begin
{ À©µµ¿ìÀǠŬ·¡½º¸íÀ» Àоî¿Â´Ù. Code°ªÀÌ À§ÀÇ µÎ°³ÀÇ °ªÀÏ
°æ¿ì, wParamÀº À©µµ¿ìÀÇ Çڵ鰪ÀÌ µÈ´Ù. }
GetClassName(wParam, Buff, SizeOf(Buff));
{ Å¬·¡½º¸íÀÌ ³ëÆ®Æеå¶ó¸é ¸Þ½ÃÁö¹Ú½º º¸¿©ÁÖ±â. }
if Buff = 'Notepad' then
begin
if (code = HSHELL_WINDOWCREATED) then
S := '¸Þ¸ðÀåÀÌ ½ÇÇàµÇ´Â±¸¸¸¿ä~!'
else
S := '¸Þ¸ðÀåÀÌ ³¡³µ±¸¸¸¿ä~!';
MessageBox(0,PChar(S),'Hook Message',0);
end;
end;
{ ´ÙÀ½ ÈÅüÀΠȣÃâ }
Result := CallNextHookEx(HShellHook, Code, wParam, lParam);
end;

{ ¼¿ °¥±¸¸® Âï±â }
function HookSHELL : Boolean;
begin
HShellHook := SetWindowsHookEx( WH_SHELL, MyShellHook, HInstance, 0);
Result := Boolean(HShellHook);
{ ÆÄÀÏ¿¡ ÈÅÇڵ頾²±â }
WriteData;
end;

{ ¼¿ °¥±¸¸® »Ì±â }
function UnHookSHELL : Boolean;
begin
{ ÆÄÀÏ¿¡ ÀúÀåµÈ ÈÅÇÚµéÀ» Àоî¿Â´Ù. }
if HShellHook = 0 then
ReadData;
Result := UnhookWindowsHookEx(HShellHook);
end;

Exports
HookKB, HookSHELL, UnHookKB, UnHookSHELL;