有哪些方法可以实现类似按键精灵的功能:比如,程序最小化或后台工作,
     按下某一热键,程序可以模拟键盘鼠标发出一系列动作;不同的热键
     响应不同的动作.这儿的问题主要是程序怎么知道哪个热键按下?程序里怎么
     定义和调用?多个热键怎么定义?
     另外,全局热键可以实现这个功能吗?全局热键可以定义多个吗?如果可以怎么调用?

解决方案 »

  1.   

    const
    WM_SNAPHOTKEY=WM_USER + 101;
    WM_SNAPHOTKEY1=WM_USER + 102;
    WM_SNAPHOTKEY2=WM_USER + 99;
    WM_SNAPHOTKEY3=WM_USER + 100;
    WM_SNAPHOTKEY4=WM_USER + 103;
    =================================
    procedure ONHotkey(var message:Tmessage);message WM_HOTKEY;
    ================================================
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Application.ShowMainForm:=False;
      gothandle:=False;
      RegisterHotKey(Handle,WM_SNAPHOTKEY,0,VK_F8 );
      RegisterHotKey(Handle,WM_SNAPHOTKEY1,0,VK_F7 );
      RegisterHotKey(Handle,WM_SNAPHOTKEY2,0,VK_F10 );
      RegisterHotKey(Handle,WM_SNAPHOTKEY3,0,36 );
      RegisterHotKey(Handle,WM_SNAPHOTKEY4,0,35 );
    end;procedure tform1.ONHotkey(var message:Tmessage);
    begin
        if (message.WParam=WM_SNAPHOTKEY) then
          PostMessage(fbhandle,WM_KEYDOWN,Ord('V'),0);
        if (message.WParam=WM_SNAPHOTKEY1) then
          PostMessage(fbhandle,WM_KEYDOWN,Ord('B'),0);
        if (message.WParam=WM_SNAPHOTKEY2) then
          PostMessage(fbhandle,WM_KEYDOWN,Ord('X'),0);
        if (message.WParam=WM_SNAPHOTKEY3) then
          PostMessage(fbhandle,WM_KEYDOWN,109,0);
        if (message.WParam=WM_SNAPHOTKEY4) then
          PostMessage(fbhandle,WM_KEYDOWN,107,0);
    end;