引用命名空間
using System.Runtime.InteropServices;
在類中引用方法
[DllImport("user32.dll",SetLastError=true)]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk);
private void Form2_Load1(object sender, System.EventArgs e)
{
RegisterHotKey(this.Handle,888,2,Keys.S);
//handle:這個窗體的handle 888:這個熱鍵的標誌id 2:crtl鍵 S: s鍵
}
private void Form2_Load1(object sender, System.EventArgs e)
{
UnregisterHotKey(this.Handle,888);
//handle:這個窗體的handle 888:上面那個熱鍵的標誌id
}
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0312: //這個是window訊息定義的 註冊的熱鍵訊息
if(m.WParam.ToString().Equals("888")) //如果是我們註冊的那個熱鍵
MessageBox.Show("你按了ctrl+a");
break;
}
base.WndProc (ref m);
}
這是熱鍵的定義 alt+crtl是3 直接相加就可以了
如果用sendmessagea這個api 就是
SendMessage(this.Handle,WM_SETHOTKEY,0x45a, 0)
//WM_SETHOTKEY 是 0x32
//0x45a 高字節是contrl鍵 低字節是a b c d 所以5a是z的ascii 4是alt 也就是alt+z
Demo
http://files.cnblogs.com/5tao/工作日誌.rar
參考:
你在程式中需要自己註冊全域熱鍵,
用到API
RegisterHotKey
UnregisterHotKey
首先,建立一個WinHotKey類,如下
public class WinHotKey
{
[DllImport("user32.dll",SetLastError=true)]
public static extern bool RegisterHotKey(
IntPtr hWnd, //視窗控制代碼
int id,
KeyModifiers fsModifiers,
Keys vk
);
[DllImport("user32.dll",SetLastError=true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd,
int id
);
[Flags()]
public enum KeyModifiers
{
None = 0,
Alt = 1,
Control =2,
Shift = 4,
Windows = 8
}
public WinHotKey()
{
//
// TODO: 在此處添加建構函式邏輯
//
}
}
然後,在程式中這樣調用
//快速鍵定義
private bool key_Ctrl = false;
private bool key_Shift = false;
private bool key_Alt = false;
private bool key_Windows = false;
private Keys key_other;
public void SetHotKey(bool bCtrl,bool bShift,bool bAlt,bool
bWindows,Keys nowKey)
{
try
{
this.key_Alt = bAlt;
this.key_Ctrl = bCtrl;
this.key_Shift = bShift;
this.key_Windows = bWindows;
this.key_other = nowKey;
WinHotKey.KeyModifiers modifier = WinHotKey.KeyModifiers.None;
if( this.key_Ctrl )
modifier |= WinHotKey.KeyModifiers.Control;
if(this.key_Alt )
modifier |= WinHotKey.KeyModifiers.Alt;
if(this.key_Shift)
modifier |= WinHotKey.KeyModifiers.Shift;
if(this.key_Windows)
modifier |= WinHotKey.KeyModifiers.Windows;
WinHotKey.RegisterHotKey(Handle,100,modifier,nowKey);
}
catch
{
//login.ShowMessage("快速鍵定義錯誤!");
}
}
//啟用熱鍵
protected override void WndProc(ref Message m )
{
const int WM_HOTKEY = 0x0312;
switch(m.Msg)
{
case WM_HOTKEY:
{
//如果有新訊息,彈出訊息
if( ReceiveNewMessage == true)
{
for(int i=0;i {
ManInfor searchMan = (ManInfor)this.manInforList[i];
if( searchMan.manInforID.Equals( getFriendID))
{
searchMan.Clicked = true;
searchMan.P2PShow();
break;
}
}
}
else
{
this.Show();
this.TopMost = true;
this.panel_Main.Refresh();
this.WindowState = System.Windows.Forms.FormWindowState.Normal;
}
}
break;
}
base.WndProc(ref m );
}
自己研究吧
void regallkey(HWND winhand)
{
RegisterHotKey(winhand, 96, MOD_ALT, 96);//0
RegisterHotKey(winhand, 97, MOD_ALT, 97);//1
RegisterHotKey(winhand, 98, MOD_ALT, 98);//2
RegisterHotKey(winhand, 99, MOD_ALT, 99);//3
RegisterHotKey(winhand, 100, MOD_ALT, 100);//4
RegisterHotKey(winhand, 101, MOD_ALT, 101);//5
RegisterHotKey(winhand, 102, MOD_ALT, 102);//6
RegisterHotKey(winhand, 103, MOD_ALT, 103);//7
RegisterHotKey(winhand, 104, MOD_ALT, 104);//8
RegisterHotKey(winhand, 105, MOD_ALT, 105);//9
RegisterHotKey(winhand, 106, MOD_ALT, 107);//密碼
RegisterHotKey(winhand, 107, MOD_ALT, 109);//查詢
RegisterHotKey(winhand, 108, MOD_ALT, 106);//返回
RegisterHotKey(winhand, 109, MOD_ALT, 111);//確認
RegisterHotKey(winhand, 110, MOD_SHIFT, 111);//左
RegisterHotKey(winhand, 111, MOD_SHIFT, 106);//右
RegisterHotKey(winhand, 960, MOD_ALT, 45);//0
RegisterHotKey(winhand, 970, MOD_ALT, 35);//1
RegisterHotKey(winhand, 980, MOD_ALT, 40);//2
RegisterHotKey(winhand, 990, MOD_ALT, 34);//3
RegisterHotKey(winhand, 1000, MOD_ALT, 37);//4
RegisterHotKey(winhand, 1010, MOD_ALT, 12);//5
RegisterHotKey(winhand, 1020, MOD_ALT, 39);//6
RegisterHotKey(winhand, 1030, MOD_ALT, 36);//7
RegisterHotKey(winhand, 1040, MOD_ALT, 38);//8
RegisterHotKey(winhand, 1050, MOD_ALT, 33);//9
}
void unregallkey(HWND winhand)
{
for(int i=96;i<122;i++)
UnregisterHotKey(winhand, i);//0
for(i=96;i<106;i++)
UnregisterHotKey(winhand, i*10);//0
}
數字鍵是 alt+NUM0~NUM9的組合
密碼鍵是 alt+小鍵盤的加號
查詢鍵是 alt+小鍵
返回鍵是 alt+小鍵盤星號
確認鍵是 alt+小鍵盤/號
左方向鍵是 shift+小鍵盤/號
右方向鍵是 shift+小鍵盤星號
視窗移動:
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
public static extern int MoveWindow(IntPtr hWnd,int x,int y,int m,int n,bool repaint);
+MoveWindow(myfrmShowLogin.Handle,1024,0,392,240,true);