C\#단축 키(시스템 단축 키)응답 을 실현 하 는 방법 을 깊이 이해 합 니 다.

응용 프로그램 에서 우 리 는 Ctrl+C 복사,Ctrl+V 붙 여 넣 기 와 같은 단축 키 를 실현 해 야 할 수도 있다.본 고 는 그 실현 을 간단하게 소개 하고 실현 클래스 를 제시 했다.(1)HotKey.cs 라 는 클래스 파일 을 만 듭 니 다.코드 는 다음 과 같 습 니 다.

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace KoalaStudio.BookshopManager
{
    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 static extern bool RegisterHotKey()"라 는 함 수 는 단축 키 를 등록 하 는 데 사 용 됩 니 다.이 함 수 는 user32.dll 동적 링크 라 이브 러 리 를 참조 해 야 사용 할 수 있 으 며,user32.dll 은 비 위탁 관리 코드 이기 때문에 네 임 스페이스 방식 으로 직접 참조 할 수 없 기 때문에'Dll Import'로 도입 해 야 사용 할 수 있 습 니 다.그래서 함수 앞 에'[DllImport(user32.dll,SetLastError=true)]'라 는 문장 을 붙 여야 합 니 다.'public static extern bool UnregisterHotKey()"이 함 수 는 단축 키 를 로그아웃 하 는 데 사용 되 며,마찬가지 로 DllImport 로 user32.dll 을 인용 해 야 사용 할 수 있 습 니 다."public enum KeyModifiers{}은 보조 키 의 디지털 코드 를 문자 로 직접 표시 하여 사용 하기 편리 하도록 매 거 진 을 정의 합 니 다.이렇게 호출 할 때 우 리 는 모든 보조 키 의 코드 를 기억 하지 않 고 이름 만 직접 선택 하면 된다.2)창 FormA 의 경우 HotKey 클래스 가 FormA 의 Activate 이벤트 에 사용 되 는 단축 키 를 소개 하 며,이 경우 Shift+S,Ctrl+Z,Alt+D 등 세 개의 단축 키 를 등록 합 니 다.이곳 의 Id 번 호 는 임의로 설정 할 수 있 지만 중복 되 지 않도록 해 야 합 니 다.

private void Form_Activated(object sender, EventArgs e)
{
    // Shift+S,Id 100。HotKey.KeyModifiers.Shift 4 。
    HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S);
    // Ctrl+B,Id 101。HotKey.KeyModifiers.Ctrl 2 。
    HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);
    // Alt+D,Id 102。HotKey.KeyModifiers.Alt 1 。
    HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt, Keys.D);
}
FormA 의 Leave 이벤트 에서 단축 키 를 로그아웃 합 니 다.

private void FrmSale_Leave(object sender, EventArgs e)
{
    // Id 100
    HotKey.UnregisterHotKey(Handle, 100);
    // Id 101
    HotKey.UnregisterHotKey(Handle, 101);
    // Id 102
    HotKey.UnregisterHotKey(Handle, 102);
}
FromA 의 WndProc 함수

///
/// Windows
/// WndProc ,
///
///
protected override void WndProc(ref Message m)
{
    const int WM_HOTKEY = 0x0312;
    //
    switch (m.Msg)
    {
        case WM_HOTKEY:
            switch (m.WParam.ToInt32())
            {
                case 100:    // Shift+S
                    //         
                    break;
                case 101:    // Ctrl+B
                    //
                    break;
                case 102:    // Alt+D
                    //
                    break;
            }
        break;
    }
    base.WndProc(ref m);
}
를 다시 불 러 와 코드 를 완성 하면 창 에 Shift+S,Ctrl+B,Alt+D 세 개의 단축 키 중 임의의 그룹 을 누 르 면 프로그램 이 응답 합 니 다.

좋은 웹페이지 즐겨찾기