自訂搜尋

2008/05/20

C# 註冊系統快速鍵

最近在寫一些遊戲的模擬人性化操作小程式...絕對不是外掛= =



碰到了一些問題,就是想要在按特殊按鍵的時候自動執行或關閉程式

在網路上查了一下資料,發現可以用註冊快速鍵的方式來完成



程式碼大概長下面這個樣子



using的部分添加這個鬼

using System.Runtime.InteropServices;



宣告的部分添加四個鬼

[DllImport("user32.dll")] 

public static extern bool RegisterHotKey(IntPtr hWnd, 

        int id, // handle to window

        uint fsModifiers, // key-modifier options

        Keys vk // virtual-key code

);



[DllImport("user32.dll")] 

public static extern bool UnregisterHotKey(IntPtr hWnd,

        int id // hot key identifier 

);




protected override void WndProc(ref Message m)

{

            const int WM_HOTKEY = 0x0312; 



            switch (m.Msg)

            {

                case WM_HOTKEY:

                    ProcessHotkey(m); //按下热键时调用ProcessHotkey()函数

                    break;

            }

            base.WndProc(ref m); //将系统消息传递自父类的WndProc

}


private void ProcessHotkey(Message m)

{

            IntPtr id = m.WParam;

            

            string sid = id.ToString();

            switch (sid)

            {

                case "100": MessageBox.Show("left"); break

                case "200": MessageBox.Show("right"); break

                case "300":

                    this.Visible = true;

                    break;

                case "400":

                    this.Visible = false;

                    break;

            }

}



初始化的部分添加隨便鬼

public Form1()

{

        InitializeComponent();


        RegisterHotKey(Handle, 100, 2, Keys.Left); // Control + 鍵盤左

        RegisterHotKey(Handle, 200, 2, Keys.Right); //Control + 鍵盤右

        RegisterHotKey(Handle, 300, 2, Keys.Up); // Control + 鍵盤上

        RegisterHotKey(Handle, 400, 2, Keys.Down); // Control + 鍵盤下



         ...

}



private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

        UnregisterHotKey(Handle, 100); 

        UnregisterHotKey(Handle, 200); 

        UnregisterHotKey(Handle, 300);

        UnregisterHotKey(Handle, 400); 

}

沒有留言:

張貼留言

讀取中…