نمایش نتایج 1 تا 5 از 5

نام تاپیک: ایجاد Global HotKey در ویندوز

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    خوشا شيراز و وصف بي مثالش ...
    سن
    42
    پست
    98

    ایجاد Global HotKey در ویندوز

    سلام
    من مي خوام با توابع 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 را با ساختن شورتكات صدا بزنم.
    ممنون از لطف همگي

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

    در نهایت هم اینکه میتونی چند تا از MOD_ های رو باهم or کنی. اینجوری ترکیب میتونه 3 تایی بشه.
    آخرین ویرایش به وسیله B-Vedadian : یک شنبه 29 اردیبهشت 1387 در 23:29 عصر

  3. #3
    دوست عزیز جناب farzad_az_shiraz اگه به نتیجه رسیدی کدشو بذار من هم نیازش دارم. مر30

  4. #4
    کاربر تازه وارد
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    خوشا شيراز و وصف بي مثالش ...
    سن
    42
    پست
    98
    ممنون از لطفت دوست عزیز B-Vedadian

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

  5. #5
    قسمت اول که واضحه، تو تایمر مسیج چک نکن، یک رویه به همون صورت که نوشتم به کلاس فرمت اضافه کن. بخش دومش یعنی این:

    if Message.Hotkey = $BFFFA then
    .
    .
    .

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •