Конечно можно + в твоем примере есть ошибка, в результате он не корректно работает.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
procedure WMHotkey(var msg:TMessage); message WM_HOTKEY;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
id_hide = 101;
id_show = 102;
id_exit = 103;
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle, id_hide, 0 {MOD_SHIFT}, VK_F8);
RegisterHotKey(Handle, id_show, 0, VK_F9);
RegisterHotKey(Handle, id_exit, 0, VK_F10);
end;
procedure TForm1.WMHotkey(var msg:TMessage);
var
d, h:cardinal;
begin
d := FindWindow('Progman', nil);
h := FindWindow('Shell_TrayWnd', nil);
If msg.WParam=id_hide then
begin
ShowWindow(d, SW_HIDE);
ShowWindow(h, SW_HIDE);
end
else
if msg.WParam = id_exit then
begin
ShowWindow(d, SW_SHOW);
ShowWindow(h, SW_SHOW);
Close;
end
else
begin
ShowWindow(d, SW_SHOW);
ShowWindow(h, SW_SHOW);
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(Handle, id_hide);
UnRegisterHotKey(Handle, id_show);
UnRegisterHotKey(Handle, id_exit);
end;
end.
Обрати внимание на код в твоем примере:
if wpr = id_hide then
begin
d := FindWindow('Progman', nil);
ShowWindow(d, SW_HIDE);
h := FindWindow('Shell_TrayWnd', nil);
ShowWindow(h, SW_HIDE);
end
Сравни с моим, а теперь подумай в чем ошибка.