PDA

View Full Version : سوال: سوال در مورد KeyBord Hook



fire.angle
یک شنبه 24 بهمن 1389, 00:56 صبح
همون طور که میدونید برای به دام انداختن کلید های فشرده شده روی صفحه کلید از هوک کیبرد استفاده میشه

و همون طور که میدونید بعضی از کلید های ترکیبی ویندوز از قبل برای کارهایی تعریف و تعبیه شده اند مثل ( Ctrl+Alt+Del) و یا ( Alt+F4) و یا ( Alt+Tab )

حالا سوال من اینه که وقتی من هوکم رو مینویسم برای وقتی که کلید های Ctrl+Alt+Del فشرده میشه تا کاری رو انجام بده قبل از اینکه این کلید ها توسط برنامه من به دام بیفتند توسط سیستم عامل به دام می افتند و در این مورد بالا بلافاصله برنامه Taskmanage باز میشه و اگر در همین حالت (یعنی وقتی که برنامه Task Manager ) باز شده هست اگه یک بار دیگه دکمه های Ctrl+Alt+Del فشرده بشه این بار این کلیدها توسط برنامه هوک من به دام می افتند

حالا سوال من اینه که چجوری باید کاری کنم که اول این کلید ها یا حداقل همزمان این کلید ها به دام هوک من بیفتند (لازم به ذکره که برای سایر کلیدهای از ترکیبی که از قبل در سیستم عامل برای اونها کاری تعریف نشده این مشکل وجود نداره مثلا Ctrl + Space

حالا اگه دوستان راهنمایی کننند که چیکار کنم ممنون میشم.......

Mask
یک شنبه 24 بهمن 1389, 16:19 عصر
باید با یه زبان کرنل مد یه درایور در سطح سیستم بنویسید.
اگه دقیقا کاری رو که می خواهید انجام بدید رو بفرمایید. بهتر میشه راهنماییتون کرد.

fire.angle
یک شنبه 24 بهمن 1389, 22:05 عصر
بله حق با شماست

این تابع هوک منه. ببینید

Function MyKbdHook(code:integer; wparam:word; lparam:LongWord):LongWord; stdcall;
var
CurrentHook:HHOOK;
begin
if (wparam=VK_CONTROL) And (GetAsyncKeyState(VK_MENU)) And (GetAsyncKeyState(VK_DELETE)) then
UnhookWindowsHookEx(CurrentHook);

MyKbdHook:=CallNextHookEx(CurrentHook,code,wparam, lparam);
end;

یعنی اینکه وقتی دکمه های Alt+Ctrl+Del همزمان فشرده شدند باید تابع هوک بسته بسته بشه و کاربر هنگام اجرای برنامه Task Manage متوجه وجود برنامه ما نمیشه
اما مسیله اینه که وقتی Alt+Ctrl+del زده میشه برنامه task manager اجرا میشه نه کد ما . یعنی اولویت برنامه Task manager از برنامه ما بالاتره. و وقتی که برنامه Task manager باز باشه اگه دکمه های Alt+ctrl+del رو بزنیم این بار کد ما اجرا میشه و برنامه ما بسته میشه

اما من میخوام اول برنامه من اجرا بشه.... . امیدوارم متوجه سوال شده باشید

حالا اگه راهی داره لطفا راهنمایی کنید....

Nima NT
دوشنبه 25 بهمن 1389, 02:05 صبح
مساله این هست که به نظر نمیاد راهی داشته باشه ( مگر مواردی مثل افزایش مجوز پروسه که بعید میدونم جواب بده ).
بهترین کار استفاده از Ring0 Hook هستش که برای اون هم باید درایور بنویسید و ....

lord_viper
دوشنبه 25 بهمن 1389, 08:57 صبح
بله حق با شماست

این تابع هوک منه. ببینید

Function MyKbdHook(code:integer; wparam:word; lparam:LongWord):LongWord; stdcall;
var
CurrentHook:HHOOK;
begin
if (wparam=VK_CONTROL) And (GetAsyncKeyState(VK_MENU)) And (GetAsyncKeyState(VK_DELETE)) then
UnhookWindowsHookEx(CurrentHook);

MyKbdHook:=CallNextHookEx(CurrentHook,code,wparam, lparam);
end;

یعنی اینکه وقتی دکمه های Alt+Ctrl+Del همزمان فشرده شدند باید تابع هوک بسته بسته بشه و کاربر هنگام اجرای برنامه Task Manage متوجه وجود برنامه ما نمیشه
اما مسیله اینه که وقتی Alt+Ctrl+del زده میشه برنامه task manager اجرا میشه نه کد ما . یعنی اولویت برنامه Task manager از برنامه ما بالاتره. و وقتی که برنامه Task manager باز باشه اگه دکمه های Alt+ctrl+del رو بزنیم این بار کد ما اجرا میشه و برنامه ما بسته میشه

اما من میخوام اول برنامه من اجرا بشه.... . امیدوارم متوجه سوال شده باشید

حالا اگه راهی داره لطفا راهنمایی کنید....
احتمالا به خاطر اینه که این هوک توسط خود ویندوز مدیریت میشه و احتمالا اولویت رو به برنامه حساسی مثل تسک منجر میده

مدیریت اینجور hotKey ها فکر کنم با Explorer هست شما از یونیت هوک Magic استفاده کن احتمالا کارت راه می افته نیازی هم به درایور نویسی نیست

fire.angle
دوشنبه 25 بهمن 1389, 11:14 صبح
ممنون . اما من به نتیجه ای نرسیدم

لطفا مثال بزنید و یا کمک کنید حلش کنیم

چونکه من این موارد یاد شده رو بلد نیستم

یکمی راجب این هوک مجیک توضیح بدید . دانلودش کردم ولی نمیدونم چی هست