ورود

View Full Version : ایجاد Global HotKey در ویندوز



farzad_az_shiraz
شنبه 28 اردیبهشت 1387, 22:10 عصر
سلام
من مي خوام با توابع API بتونم mailam را باز كنم. البته با استفاده از تابع شورت كات يا همون hotkey ولي نميدونم چطوري ؟

البته من مي تونم با اين تابع مثلا يه فايل exe را صدا بزنم و اجرا كنم ولي فقط دو كليد را ميتونم تركيب كنم و نه بيشتر.
مثلا در مثال زير كه calc.exe را صدا زدم .



unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,shellapi, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Timer1: TTimer;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Math;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Application.Handle,$BFFFA,MOD_WIN,7 4);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
VAR MSG:tagMSG;
begin
WaitMessage;
IF PeekMessage(MSG,Application.Handle,WM_HOTKEY,WM_HO TKEY,PM_REMOVE) THEN
BEGIN
If(HiWord(MSG.lParam)=74)and (LOWORD(MSG.lParam)=MOD_WIN) THEN
BEGIN
WinExec('calc.exe',SW_SHOW);
END;
end;
end;


در مثال بالا WIN + J ماشين حساب ويندوز را صدا ميزنه.
ولي نمي دونم چرا بايد دوبار WIN +J را بزنم تا اين كارو بكنه ؟
ممنون مي شم شما اولا استفاده از اين تابع را براي تركيب سه كليد و دوم اينكه من ميخوام mail را با ساختن شورتكات صدا بزنم.
ممنون از لطف همگي

B-Vedadian
یک شنبه 29 اردیبهشت 1387, 15:25 عصر
برای پاسخگویی به Messageهای ویندوز، باید یک رویه از نوع پیغام تعریف کنی.

protected
procedure WMHotkey(var Message: TWMHotkey); message WM_HOTKEY;
بعدش تو این رویه، مقدار Hotkey رو با ID مقایسه کن. برای نمونه، تو مثال خودت مقدار $BFFFA نه کد کلید (47) رو با کد کليد فشرده شده. اينطوري مطمئن تره.

در نهایت هم اینکه میتونی چند تا از MOD_ های رو باهم or کنی. اینجوری ترکیب میتونه 3 تایی بشه.

skmkh6056
دوشنبه 30 اردیبهشت 1387, 08:01 صبح
دوست عزیز جناب farzad_az_shiraz اگه به نتیجه رسیدی کدشو بذار من هم نیازش دارم. مر30

farzad_az_shiraz
سه شنبه 31 اردیبهشت 1387, 15:27 عصر
ممنون از لطفت دوست عزیز B-Vedadian

ولی من منظورتو نفهمیدم

B-Vedadian
چهارشنبه 01 خرداد 1387, 09:39 صبح
قسمت اول که واضحه، تو تایمر مسیج چک نکن، یک رویه به همون صورت که نوشتم به کلاس فرمت اضافه کن. بخش دومش یعنی این:


if Message.Hotkey = $BFFFA then
.
.
.