应用程序启动时的键盘修饰符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用程序启动时的键盘修饰符相关的知识,希望对你有一定的参考价值。

我想捕获在应用程序启动期间是否按下修改键(以确定全屏或窗口)。

在主窗口构造函数中,我尝试检查Keyboard.Modifiers枚举以查看Shift是否已关闭。它始终显示“无”。

所以我尝试了一种不同的方法,开始使用DispatcherTimer 并检查其Tick事件的转变。这似乎工作正常。

问题是,这是最好(唯一)的方法吗?为什么修饰符不会在窗口构造函数中返回正确的值?

答案

Keyboard.Modifiers是正确使用的类别/财产。

我建议在FrameworkElement.Loaded事件的处理程序中检查修饰符。

Window之后的InitializeComponent()构造函数中:

this.Loaded += new RoutedEventHandler(Window_Loaded);

和:

void Window_Loaded(object sender, RoutedEventArgs e)
{
    // Examine Keyboard.Modifiers and set fullscreen/windowed
    if ((Keyboard.Modifiers & ModifierKeys.Shift) > 0)
    {
        //SetFullscreen();
    }
}
另一答案

我打赌Keyboard.Modifiers在封面下使用GetKeyState,这可能在你的消息循环发送它的第一条消息之前不起作用。 GetAsyncKeyState会为你工作(通过P / Invoke我猜,除非有一种我不知道的.net方式调用它)。

另一答案

伟大的summary ...第二个链接有很好的代码来显示它...只需添加Josh G的代码(从这个问题的答案到第二个链接中的项目):

在InitializeComponent()之后的Window构造函数中:

this.Loaded += new RoutedEventHandler(Window_Loaded);

和:

void Window_Loaded(object sender, RoutedEventArgs e)
{
    // Examine Keyboard.Modifiers and set fullscreen/windowed
    if ((Keyboard.Modifiers & ModifierKeys.Shift) > 0)
    {
        MessageBox.Show("The Window is Shifty...");
    }
}

以上是关于应用程序启动时的键盘修饰符的主要内容,如果未能解决你的问题,请参考以下文章

4.键盘修饰符以及自定义键盘修饰符

[Vue] : 键盘修饰符

键盘事件、事件修饰符

vue事件修饰符和键盘事件

vue基本使用

如何在 QML 中查询键盘修饰符?