-
توابع هوك(Hook)
سلام
گفتم که اینجا جای توابع Hook خالیه چند نمونه گذاشتم.
این کد ماله یه فایل DLL است.
کد:
library MSNHook;
uses
Windows,
Messages,sysutils;
type
THookRec = record
hMSNHook: HHOOK;
hMSNWnd: HWND;
oldProc: Integer;
end;
var
map: DWord;
buf: ^THookRec;
function PROC(nCode: Integer; wp: wParam; lp: lParam): LongInt; stdcall;
begin
if (nCode >= HC_ACTION) then
if (nCode=HCBT_DESTROYWND)then
begin
Result:=1;
exit;
end;
Result := CallNextHookEx(buf^.hMSNHook, nCode, wp, lp);
end;
// sets up hook
function SetHook: Boolean; stdcall; export;
var
startwnd:HWND;
begin
try
Result := false;
if (not assigned(buf)) then
begin
map := CreateFileMapping(DWord(-1), nil, PAGE_READWRITE, 0, SizeOf(THookRec), 'HookRecMemBlock');
buf := MapViewOfFile(map, FILE_MAP_ALL_ACCESS, 0, 0, 0);
startwnd:=FindWindow('Notepad', nil);
buf^.hMSNWnd:=startwnd;
buf^.hMSNHook := SetWindowsHookEx(WH_CBT, @Proc, hInstance, GetWindowThreadProcessId(startwnd,nil));
Result := true;
end;
except
Result := false;
MessageBox(0, 'error in SetHook', 'error', MB_OK);
end;
end;
// removes hook
function RemoveHook: Boolean; stdcall; export;
begin
Result := false;
if (assigned(buf)) then
begin
if (buf^.hMSNHook <> 0) then UnhookWindowsHookEx(buf^.hMSNHook);
buf^.hMSNHook := 0;
UnmapViewOfFile(buf);
buf := nil;
Result := true;
end;
end;
// DLL entry point
procedure DllEntry(dwReason: DWord);
begin
Case dwReason of
DLL_PROCESS_ATTACH:
begin
if (not assigned(buf)) then
begin
map := OpenFileMapping(FILE_MAP_ALL_ACCESS, false, 'HookRecMemBlock');
buf := MapViewOfFile(map, FILE_MAP_ALL_ACCESS, 0, 0, 0);
CloseHandle(map);
map := 0;
end;
end;
DLL_PROCESS_DETACH:
begin
UnmapViewOfFile(buf);
buf := nil;
end;
end;
end;
exports
SetHook,
RemoveHook;
// main
begin
DisableThreadLibraryCalls(hInstance);
DllProc := @DLLEntry;
DllEntry(DLL_PROCESS_ATTACH);
end.
end;
این ها هم یک سری توابع دیگه هستند
کد:
SetWindowsHookEx(WH_GETMESSAGE, @PROC, hInstance, GetWindowThreadProcessId(startwnd,nil));
function PROC(nCode: Integer; wp: wParam; lp: lParam): LongInt; stdcall;
begin
if (nCode >= HC_ACTION) then
//check to see if it is wm_mousemove or wm_etc
//check windows sdk help it has documentation on every hook
//if u can also check the help for setWindowsHookEx in the sdk
pmsg(lp).message:=WM_NULL;//will cancell it
Result := CallNextHookEx(buf^.hMSNHook, nCode, wp, lp);
end;
اینها برای استفاده از توابع هوک می باشد.
کد:
>>SetWindowsHookEx(WH_CBT, @Proc, hInstance, GetWindowThreadProcessId(startwnd,nil));
>>SetWindowsHookEx(WH_GETMESSAGE, @PROC, hInstance, GetWindowThreadProcessId
همونطور که می دونید اینها هم برای نونپد هست
کد:
Wnd:=Findwindow.... (Get notepad's handle, or something else)
SetHook(HandleToWindow);
-
هوك چيه سولجر جان
يه كمي توضيح بده.
-
سلام
هوك به اطلاعاتي مي گن كه در ويندوز رخ مي دهند.
به آنها مي گن هوك.حالا من چند تا توابع از هوك گذاشتم.
-
من يك تابع ميخوام كه تو هرجايي هر دكمهاي از كيبرد زدن جوابشو به صورت Ascii تو دلفي و برنامم بهم بده.
چنين چيزي سراق داري؟
-
سلام
به اون توابع مي گن HotKey.
اگر مي خواستي من يه نمونه دارم.
-
اسمش برام مهم نست.
ميخوام هرجايي كه بود كد دكمه فشار داده شده رو بفرسته.
حتي اگه داره تو ورد تايپ ميكنه , كل تايپ رو تو دلفي پياده كنه.
اين كارو ميكنه؟
-
سلام
البته كه اينكارو مي كنه. هر وقت خواستي يكي برات آپلود مي كنم.
-
با سلام
در ويندوز ي پوشه بنام System Volume Information وجود دارد كه اگر روش كليك كنيم اين پيام رو ميده Access id denied و ما اجازه نداريم داخلش بريم
حالا سوالم اينجاست كه ميشه با دلفي برنامه اي نوشت كه به پوشه مثلا test همچين خصوصيتي بديم يعني كاربر نتونه واردش بشه حتي توي محيط safe mode هم نتونه داخل پوشه بره
اگه سورسي داريد لطف ميكنيد ارائه بديد
خيلي بهش احتياج دارم