【问题标题】:Setting application-wide hotkey in C#在 C# 中设置应用程序范围的热键
【发布时间】:2010-12-07 14:17:07
【问题描述】:

有一篇文章在 C# 中设置系统范围的全局热键 here

我想设置应用程序范围的热键,这样如果用户在应用程序的任何子窗口上按下热键,特定窗口将接收并处理它。

谢谢。

【问题讨论】:

    标签: c# winforms-interop


    【解决方案1】:

    您可以为您的应用程序创建一个基本表单并将 keypreview 属性设置为 true 并处理 keydown 事件,这样您的所有表单都将具有相同的键定义。

    您也可以使用以下例程为表单注册热键,但在此方法中,您需要在每个表单的加载事件上调用相同的方法。

    protected override bool ProcessCmdKey(ref Message message, Keys keys)
    {
        switch (keys)
        {
            case Keys.F2 | Keys.Control:
                //Process action here.
                return false;
        }
    
        return false;
    }
    

    您也可以使用 user32.dll 中的以下非托管方法,但我当然不建议这样做。

    static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint virtualKey);
    private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
    

    【讨论】:

    • 我尝试使用 RegisterHotKey,但由于它适用于系统范围,因此我无法在其他应用程序或同一应用程序的其他实例中使用相关键。
    • 如果您只希望它在应用程序范围内工作,您应该使用通用基本表单方法。
    猜你喜欢
    • 2011-04-15
    • 2011-05-18
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2012-12-20
    相关资源
    最近更新 更多