如果一按键盘上的delete键就执行button1.click事件

解决方案 »

  1.   

    来个复制粘贴吧!以前做东西用到的就保留下来了,希望对楼主有用!不过delete这个键是有点特殊呵,不知道能否这样!
    delphi编程注册热键,调出隐藏的窗体。
    2008年03月03日 星期一 23:41后台监控软件,为了达到隐蔽监控的目的,应该满足正常运行时,不显示在任务栏上,在按Ctrl+Alt+Del出现的任务列表中也不显示,管理员可以通过热键调出隐藏的运行界面。要作到这些,必须把当前进程变为一个系统服务,并且定义全局热键。
      一、把当前进程变为一个系统服务:
      目的是在任务列表中把程序隐藏起来。调用API函数RegisterServiceProcess实现。
      二、定义全局热键(本例中定义热键Ctrl+Del+R),步骤:
      1、定义捕获Windows消息WM_HOTKEY的钩子函数,即:procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
      2、向Windows加入一个全局原子 Myhotkey: GlobalAddAtom(’MyHotkey’), 并保留其句柄。
      3、向Windows登记热键:调用API函数RegisterHotKey实现。
      三、源程序:
    unit Unit1;
    interface
    uses
    Windows, Messages, Forms, Dialogs, Classes, Controls, StdCtrls;
    type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    private
    {热键标识ID}
    id: Integer;
    procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
    { Privat-Declarations}
    public
    { Public-Declarations}
    end;
    var
    Form1 : TForm1;
    implementation
    const RSP_SIMPLE_SERVICE=1;
    function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord; stdcall; external ’KERNEL32.DLL’;
    {$R *.DFM}
    {捕获热键消息}
    procedure TForm1.WMHotKey (var Msg : TWMHotKey);
    begin
    if msg.HotKey = id then
    ShowMessage(’Ctrl+Alt+R键被按下!’);
    form1.Visible :=true;
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    Const
    {ALT、CTRL和R键的虚拟键值}
    MOD_ALT = 1;
    MOD_CONTROL = 2;
    VK_R = 82;
    begin
    {首先判断程序是否已经运行}
    if GlobalFindAtom(’MyHotkey’) = 0 then
    begin
    {注册全局热键Ctrl + Alt + R}
    id:=GlobalAddAtom(’MyHotkey’);
    RegisterHotKey(handle,id,MOD_CONTROL+MOD_Alt,VK_R);
    end
    else
    halt;
    end;
      {把当前进程变为一个系统服务,从而在任务列表中把程序隐藏起来}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    RegisterServiceProcess(GetCurrentProcessID,RSP_SIMPLE_SERVICE);
    form1.Hide;
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    close;
    end;
    {退出时释放全局热键}
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    UnRegisterHotKey(handle,id);
    GlobalDeleteAtom(id);
    end;
    end. 
      

  2.   

    告诉你一个最简单的方法,你为窗体建一个右键菜单(PopupMenu),一个ActionList,在Action菜单项中设快键,PopupMenu的action指向action,将此菜单关联到窗体(窗体的PopupMenu属性)后,将菜单的AutoPopup属性设为False这此菜单不能弹出,但快键还是有效!
      

  3.   

    写个东西捕获DEL的键值 然后 就不用说了吧
      

  4.   

    要崩溃了,你随便放一个edit,然后给它设置onkeypress事件,然后if key = #13 then你就故意按个DEL键,就可以看到这个键值了不是?跟踪调试啊用
      

  5.   

    查一下键盘伪码,Delete 是 VK_Delete 16进制是 2E 十进制是 46 可以用if key = chr(VK_Delete) then
      Button1.Click;
      

  6.   


    if key = chr(VK_Delete) then
      Button1.Click;都可以,关键是如何触发这个事件!