>백엔드 개발 >C++ >Win32 API를 사용하여 C#에서 전역 단축키를 설정하는 방법은 무엇입니까?

Win32 API를 사용하여 C#에서 전역 단축키를 설정하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-24 05:36:13914검색

How to Set Global Hotkeys in C# Using Win32 API?

C# 글로벌 단축키 설정 안내

글로벌 단축키를 사용하면 프로그램에 초점이 맞지 않을 때에도 키 입력을 캡처할 수 있습니다. 이는 바로 가기 키를 구현하거나 키 조합으로 트리거되는 특정 작업을 수행하는 데 유용합니다. 다음은 C#을 사용하여 전역 단축키를 설정하는 방법에 대한 자세한 지침입니다.

단축키 처리 클래스 만들기

먼저 단축키 등록 및 캡처를 처리하기 위해 KeyboardHook이라는 클래스를 만듭니다.

<code class="language-csharp">public sealed class KeyboardHook : IDisposable
{
    // 导入必要的Win32 API函数
    [DllImport("user32.dll")]
    private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
    [DllImport("user32.dll")]
    private static extern bool UnregisterHotKey(IntPtr hWnd, int id);

    // 定义一个类来处理窗口消息
    private class Window : NativeWindow, IDisposable
    {
        ...
        // 处理Win32热键消息
        protected override void WndProc(ref Message m)
        {
            ...
            // 调用事件以通知父级
            if (KeyPressed != null)
                KeyPressed(this, new KeyPressedEventArgs(modifier, key));
        }
    }

    private Window _window = new Window();
    private int _currentId;

    // 注册热键
    public void RegisterHotKey(ModifierKeys modifier, Keys key)
    {
        ...
        // 注册热键
        if (!RegisterHotKey(_window.Handle, _currentId, (uint)modifier, (uint)key))
            throw new InvalidOperationException("无法注册热键。");
    }
}</code>

단축키 등록

KeyboardHook 클래스를 인스턴스화하고 RegisterHotKey 메서드를 사용하여 원하는 단축키 조합을 등록합니다. 예를 들어 Ctrl, Alt 및 F12 키를 단축키로 등록하려면:

<code class="language-csharp">hook.RegisterHotKey(ModifierKeys.Control | ModifierKeys.Alt, Keys.F12);</code>

단축키 이벤트 처리

핫키를 눌렀을 때 코드를 실행하려면 KeyboardHook 클래스 KeyPressed 이벤트

를 구독하세요.
<code class="language-csharp">hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(hook_KeyPressed);</code>

이벤트 핸들러에서는 원하는 작업이나 논리를 수행할 수 있습니다.

로그아웃 단축키

메모리 누수를 방지하려면 프로그램이 종료되거나 단축키가 더 이상 필요하지 않은 경우 단축키를 로그아웃하세요.

<code class="language-csharp">hook.Dispose();</code>

중요 팁

  • 이 기술을 사용하려면 콘솔 애플리케이션 프로젝트가 아닌 Windows Forms 프로젝트가 필요합니다.
  • 적절한 동기화 메커니즘이 없는 다중 스레드 환경에서는 NativeWindow 클래스를 사용하지 마세요.
  • RegisterHotKey 기능 애플리케이션당 단축키 조합은 256개로 제한됩니다.

위 내용은 Win32 API를 사용하여 C#에서 전역 단축키를 설정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.