http://bbs.csdn.net/topics/380201057

Delphi/Pascal code

 

?

Delphi/Pascal code

 

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
用Delphi实现老板键功能(即通过快捷键显示隐藏窗口)2011-05-30 16:39
//因为我们还要在程序退出的时候,消除这个热键,   所以需要声明一个全局变量:     
//   
//HotKeyId:   Integer;     
//   
//第一步:     
//   
//在窗口的create事件中,加入以下代码     
//   
//HotKeyId   :=   GlobalAddAtom(‘MyHotKey’)   -   $C000;   
//注:   HotKeyId的合法取之范围是0x0000到0xBFFF之间,   GlobalAddAtom函数得到的值   
//在0xC000到0xFFFF之间,所以减掉0xC000来满足调用要求。   
//   
//第二步:     
//   
//在上面的代码下面加入:     
//   
//RegisterHotKey(Handle,   hotkeyid,   MOD_ALT,   VK_F8);       
//   
//热键的辅助按键包括Mod_Ctrl   、Mod_Alt、Mod_Shift,对于Windows兼容键盘还支持Windows   
//键,即其键面上有Windows标志的那个键,其值为Mod_win。   
//   
//上面   的代码注册了一个热键:ALT+F8。当然如果你希望象TAKEIT那样,只用F8,   就这么写:   
//   
//RegisterHotKey(Handle,   hotkeyid,   0,   VK_F8);       
//   
//注:handle是一个特殊的变量,它表示当前窗口的句柄。   
//   
//这个函数你应该能句举一反三了吧。   
//   
//原理:   
//   
//一旦热键设置成功,在程序应用过程中如果有相应的键被按下,Windows系统都会给你的应   
//用程序发送一个消息WM_HOTKEY,不管你的应用程序是否为当前活动的。其中WM_HOTKEY消   
//息的格式为:       
//   
//idHotKey   =   (int)   wParam;   //   该参数在设置系统级的热键有用,一般不予使用   
//fuModifiers   =   (UINT)   LOWORD(lParam);     //热键的辅助按键   
//uVirtKey   =   (UINT)   HIWORD(lParam);   //热键的键值     
//   
//第三步:     
//   
//注册了热键,就该写下响应代码了。     
//   
//首先,在程序头部分的private段中加入声明   (作用是声明这个过程,和声明变量类似。   
//关于如何声明函数、过程,请请参考各自的帮助文件或其它资料):     
//   
//procedure   HotKeyDown(var   Msg:   Tmessage);   message   WM_HOTKEY;     
//   
//然后在程序中加入如下代码:     
//   
//procedure   Tfmain.HotKeyDown(var   Msg:   Tmessage);     
//begin     
//     if   (Msg.LparamLo   =   MOD_ALT)   AND   Msg.LParamHi   =   VK_F8   then   //   假设热键为ALT+F8     
//     begin     
//     end;   
//end;     
//   
//最后一步:     
//   
//在窗口的close事件中加入     
//   
//UnRegisterHotKey(handle,   HotKeyId);   //注销HotKey,   释放资源。   
//   
 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
//完整程序如下:
 unit   Main;   
     
  interface   
     
  uses   
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,   
      Dialogs,   StdCtrls;   
     
  type   
      TForm1   =   class(TForm)   
          Button1:   TButton;   
          Label1:   TLabel;   
          procedure   FormCreate(Sender:   TObject);   
          procedure   FormDestroy(Sender:   TObject);   
          procedure   Button1Click(Sender:   TObject);   
      private   
          FHotKeyId:   Integer;   
          procedure   HotKeyDown(var   Msg:   Tmessage);   message   WM_HOTKEY;     
      public   
          {   Public   declarations   }   
      end;   
     
  var   
      Form1:   TForm1;   
     
  implementation   
     
  {$R   *.dfm}   
     
  procedure   TForm1.FormCreate(Sender:   TObject);   
  begin   
      FHotKeyId   :=   GlobalAddAtom('MyHotKey')   -   $C000;   
      RegisterHotKey(Handle,   FHotKeyId,   MOD_ALT,   VK_F8);   
  end;   
     
  procedure   TForm1.HotKeyDown(var   Msg:   Tmessage);   
  begin   
      if   (Msg.LparamLo   =   MOD_ALT)   AND   (Msg.LParamHi   =   VK_F8)   then   //   假设热键为ALT+F8     
      begin   
          ShowWindow(Application.Handle,   SW_SHOW);   
          ShowWindow(Self.Handle,   SW_SHOW);   
          if   IsIconic(Application.Handle)   then   
              ShowWindow(Application.Handle,   SW_RESTORE)   
          else   
              SetForegroundWindow(Application.Handle);   
      end;   
  end;   
     
  procedure   TForm1.FormDestroy(Sender:   TObject);   
  begin   
      UnRegisterHotKey(Handle,   FHotKeyId);   
  end;   
     
  procedure   TForm1.Button1Click(Sender:   TObject);   
  begin   
      ShowWindow(Application.Handle,   SW_HIDE);   
      ShowWindow(Self.Handle,   SW_HIDE);   
  end;   
     
  end.  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
用Delphi实现老板键功能(即通过快捷键显示隐藏窗口)2011-05-30 16:39
//因为我们还要在程序退出的时候,消除这个热键,   所以需要声明一个全局变量:     
//   
//HotKeyId:   Integer;     
//   
//第一步:     
//   
//在窗口的create事件中,加入以下代码     
//   
//HotKeyId   :=   GlobalAddAtom(‘MyHotKey’)   -   $C000;   
//注:   HotKeyId的合法取之范围是0x0000到0xBFFF之间,   GlobalAddAtom函数得到的值   
//在0xC000到0xFFFF之间,所以减掉0xC000来满足调用要求。   
//   
//第二步:     
//   
//在上面的代码下面加入:     
//   
//RegisterHotKey(Handle,   hotkeyid,   MOD_ALT,   VK_F8);       
//   
//热键的辅助按键包括Mod_Ctrl   、Mod_Alt、Mod_Shift,对于Windows兼容键盘还支持Windows   
//键,即其键面上有Windows标志的那个键,其值为Mod_win。   
//   
//上面   的代码注册了一个热键:ALT+F8。当然如果你希望象TAKEIT那样,只用F8,   就这么写:   
//   
//RegisterHotKey(Handle,   hotkeyid,   0,   VK_F8);       
//   
//注:handle是一个特殊的变量,它表示当前窗口的句柄。   
//   
//这个函数你应该能句举一反三了吧。   
//   
//原理:   
//   
//一旦热键设置成功,在程序应用过程中如果有相应的键被按下,Windows系统都会给你的应   
//用程序发送一个消息WM_HOTKEY,不管你的应用程序是否为当前活动的。其中WM_HOTKEY消   
//息的格式为:       
//   
//idHotKey   =   (int)   wParam;   //   该参数在设置系统级的热键有用,一般不予使用   
//fuModifiers   =   (UINT)   LOWORD(lParam);     //热键的辅助按键   
//uVirtKey   =   (UINT)   HIWORD(lParam);   //热键的键值     
//   
//第三步:     
//   
//注册了热键,就该写下响应代码了。     
//   
//首先,在程序头部分的private段中加入声明   (作用是声明这个过程,和声明变量类似。   
//关于如何声明函数、过程,请请参考各自的帮助文件或其它资料):     
//   
//procedure   HotKeyDown(var   Msg:   Tmessage);   message   WM_HOTKEY;     
//   
//然后在程序中加入如下代码:     
//   
//procedure   Tfmain.HotKeyDown(var   Msg:   Tmessage);     
//begin     
//     if   (Msg.LparamLo   =   MOD_ALT)   AND   Msg.LParamHi   =   VK_F8   then   //   假设热键为ALT+F8     
//     begin     
//     end;   
//end;     
//   
//最后一步:     
//   
//在窗口的close事件中加入     
//   
//UnRegisterHotKey(handle,   HotKeyId);   //注销HotKey,   释放资源。   
//   
 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
//完整程序如下:
 unit   Main;   
     
  interface   
     
  uses   
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,   
      Dialogs,   StdCtrls;   
     
  type   
      TForm1   =   class(TForm)   
          Button1:   TButton;   
          Label1:   TLabel;   
          procedure   FormCreate(Sender:   TObject);   
          procedure   FormDestroy(Sender:   TObject);   
          procedure   Button1Click(Sender:   TObject);   
      private   
          FHotKeyId:   Integer;   
          procedure   HotKeyDown(var   Msg:   Tmessage);   message   WM_HOTKEY;     
      public   
          {   Public   declarations   }   
      end;   
     
  var   
      Form1:   TForm1;   
     
  implementation   
     
  {$R   *.dfm}   
     
  procedure   TForm1.FormCreate(Sender:   TObject);   
  begin   
      FHotKeyId   :=   GlobalAddAtom('MyHotKey')   -   $C000;   
      RegisterHotKey(Handle,   FHotKeyId,   MOD_ALT,   VK_F8);   
  end;   
     
  procedure   TForm1.HotKeyDown(var   Msg:   Tmessage);   
  begin   
      if   (Msg.LparamLo   =   MOD_ALT)   AND   (Msg.LParamHi   =   VK_F8)   then   //   假设热键为ALT+F8     
      begin   
          ShowWindow(Application.Handle,   SW_SHOW);   
          ShowWindow(Self.Handle,   SW_SHOW);   
          if   IsIconic(Application.Handle)   then   
              ShowWindow(Application.Handle,   SW_RESTORE)   
          else   
              SetForegroundWindow(Application.Handle);   
      end;   
  end;   
     
  procedure   TForm1.FormDestroy(Sender:   TObject);   
  begin   
      UnRegisterHotKey(Handle,   FHotKeyId);   
  end;   
     
  procedure   TForm1.Button1Click(Sender:   TObject);   
  begin   
      ShowWindow(Application.Handle,   SW_HIDE);   
      ShowWindow(Self.Handle,   SW_HIDE);   
  end;   
     
  end.