您的位置:首页 > 其它

WinForm 如何注册热键?

2007-11-15 00:57 417 查看
Q:WinForm 如何注册热键?

A:



using
System;



using
System.Collections.Generic;



using
System.ComponentModel;



using
System.Data;



using
System.Drawing;



using
System.Text;



using
System.Windows.Forms;



using
System.DirectoryServices;



using
System.Runtime.InteropServices;



namespace
test





...
{




public

partial

class
Form1 : Form






...
{




class
HotKey






...
{




//
如果函数执行成功,返回值不为0。




//
如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。



[DllImport(
"
user32.dll
"
, SetLastError
=

true
)]




public

static

extern

bool
RegisterHotKey(



IntPtr hWnd,
//
要定义热键的窗口的句柄




int
id,
//
定义热键ID(不能与其它ID重复)



KeyModifiers fsModifiers,
//
标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效



Keys vk
//
定义热键的内容



);





[DllImport(
"
user32.dll
"
, SetLastError
=

true
)]




public

static

extern

bool
UnregisterHotKey(



IntPtr hWnd,
//
要取消热键的窗口的句柄




int
id
//
要取消热键的ID



);






//
定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)



[Flags()]




public

enum
KeyModifiers






...
{



None
=

0
,



Alt
=

1
,



Ctrl
=

2
,



Shift
=

4
,



WindowsKey
=

8




}





}










public
Form1()






...
{



InitializeComponent();



HotKey.RegisterHotKey(
this
.Handle,
100
,
0
, Keys.F1);







}








protected

override

void
WndProc(
ref
Message m)






...
{




const

int
WM_HOTKEY
=

0x0312
;




//
按快捷键




switch
(m.Msg)






...
{




case
WM_HOTKEY:




switch
(m.WParam.ToInt32())






...
{




case

100
:



MessageBox.Show(
"
Press F1
"
);




break
;



}






break
;



}






base
.WndProc(
ref
m);



}













}





}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: