PDA

View Full Version : سوال: تعريف كليد ميانبر در كل سيستم



سیروس مقصودی
شنبه 15 شهریور 1399, 11:27 صبح
با سلام

من ميخواهم در فرم اصلي برنامه , كليدي را تعريف كنم كه كاربر هر موقع و در هركجاي سيستم كه كليدهاي مورد نظر را فشار ميدهد برنامه اي را اجرا كند . برنامه ام حدودا 30 تا فرم دارد .من ميخواهم اين كليدها در تمام فرم اجرا شود يعني كاربر حتي در داخل هر فرمي كه اين كليد را فشار ميدهد برنامه اجرا شود .

با تشكر

دلفــي
سه شنبه 18 شهریور 1399, 12:20 عصر
با سلام

من ميخواهم در فرم اصلي برنامه , كليدي را تعريف كنم كه كاربر هر موقع و در هركجاي سيستم كه كليدهاي مورد نظر را فشار ميدهد برنامه اي را اجرا كند . برنامه ام حدودا 30 تا فرم دارد .من ميخواهم اين كليدها در تمام فرم اجرا شود يعني كاربر حتي در داخل هر فرمي كه اين كليد را فشار ميدهد برنامه اجرا شود .

با تشكر

می تونید از Hook استفاده کنید
برای نمونه در فرم اصلی برنامه کدهای زیر رو درج کنید تا با فشردن کلید F3 در هر کدام از فرم ها، پیغام درج شده نمایش داده شود:



.
.
.
var
Form1: TForm1;


KBHook: HHook;
procedure KeyboardHookProc(Code: Integer; WordParam: Word; LongParam: LongInt); stdcall;


implementation
.
.
.




procedure KeyboardHookProc(Code: Integer; WordParam: Word; LongParam: LongInt);
begin
if WordParam = VK_F3 then
ShowMessage('alirezapuyafar@gmail.com');
end;




procedure TForm1.FormCreate(Sender: TObject);
begin
KBHook:=SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, GetCurrentThreadId()) ;
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
UnHookWindowsHookEx(KBHook) ;
end;

یوسف زالی
سه شنبه 18 شهریور 1399, 14:27 عصر
سلام
روی فرم اصلی یک ApplicationEvent بندازید و در رویداد Messgae اون رو هندل کنید.

سیروس مقصودی
چهارشنبه 19 شهریور 1399, 08:32 صبح
سلام

می تونید از Hook استفاده کنید
با تشكر . من مواردي را كه فرموده بوديد انجام دادم ولي اجازه هيچ تايپي را به من نميده

دلفــي
چهارشنبه 19 شهریور 1399, 11:16 صبح
سلام

با تشكر . من مواردي را كه فرموده بوديد انجام دادم ولي اجازه هيچ تايپي را به من نميده

از تابع به جای پروسیجر به صورت زیر استفاده کنید مشکل تایپ حل میشه:


.
.
.
function KeyboardHookProc(Code: Integer; WordParam: Word; LongParam: LongInt):LongInt; stdcall;


implementation


{$R *.dfm}


function KeyboardHookProc(Code: Integer; WordParam: Word; LongParam: LongInt):LongInt;
begin
if WordParam = VK_F3 then
ShowMessage('alirezapuyafar@gmail.com');
Result := 0;
end;
.
.
.