ايران ويج

نسخه‌ی کامل: سوال درباره KeyBord Hooking
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان من می خواستم ببینم چه طور میشه هنگام زدن کلید اون رو به یک کلید دیگه تغییر داد مثلا اگه o رو بزنیم Q کلیک بشه ممنون
این هم سورس
نقل قول: uses
SysUtils,
Classes,
windows,
shellapi,
Messages,Variants,Graphics, Controls, Forms,
Dialogs;
var
HookHandle:thandle;

{$R *.res}

function GlobalKeyBoardHook(code: integer; wParam: word; lParam: longword): longword; stdcall;
begin
if ((lParam and wm_KEYDOWN)=0) then
begin
ShowMessage(IntToStr(wParam) )
end;
Result := CallNextHookEx(HookHandle, Code, wParam, lParam);
end;

procedure RunHook; stdcall;
begin
HookHandle:= SetWindowsHookEx(WH_KEYBOARD,@GlobalKeyBoardHook, HInstance, 0);
if HookHandle = INVALID_HANDLE_VALUE then
begin
MessageBox(0, 'Error :)' , '' , MB_OK);
Exit;
end;
end;

procedure KillHook; stdcall;
begin
if HookHandle <> INVALID_HANDLE_VALUE then
UnhookWindowsHookEx(HookHandle);
end;

exports
KillHook,
RunHook;

begin
end.

کربلا در کربلا می مرد اگر زینب نبود
1-تابع GetAsyncKeyState رو هوك كن.
2-روش هوك رو تغيير بده.
3-كد نمونه براي روش ApiHook

کد:
function GetAsyncKeyStateCallback(vKey: Integer): SHORT;
begin
if vKey = 35 then vKey:=39;
Result:=NewGetAsyncKeyState(vKey);
end;
شما اگه برای برنامه خودت میخواهی که از رویداد OnKeyPress مربوط به فورم یا کنترل مورد نظر میتونی استفاده کنی اگه برای کل ویندوز میخواهی یه Message هوک بنویس که قبل رسیدن Message به پنجره مورد نظر بگیریش مقدارشو PmRemove بده که message به کنترل نرسه خودت مقدار مورد نظرتو جاگزاری کن و با SendMessage به اون پنجره بفرست
فكر كنم ايشون دامنه وسيع تري رو مي خوان پوشش بدن.