如题
本人注册了热键ALT+Z
按下ALT+Z
ShowWindow(Hwnd,SW_HIDE) 隐藏窗口
再按ALT+Z
ShowWindow(Hwnd,SW_SHOW) 却无法显示窗口因此求可行代码一段

解决方案 »

  1.   

    在Delphi使用RegisterHotKey注册你需要的热键,然后处理WM_HOTKEY消息,   
    在消息处理中,可以隐藏窗口,可以使用Form.Hide;也可以使用SetWindowPos   API函数   
    显示的时候只要把Form调到前台。
      

  2.   

    copy:一、把当前进程变为一个系统服务:   目的是在任务列表中把程序隐藏起来。调用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.
      

  3.   

    顶2楼的
    用TActionList最简单了