【发布时间】:2010-10-22 14:36:33
【问题描述】:
我想捕获在应用程序启动期间是否按下了修改键(以确定全屏还是窗口)。
在主窗口构造函数中,我尝试检查 Keyboard.Modifiers 枚举以查看 Shift 是否关闭。它总是显示“无”。
所以我尝试了一种不同的方法,从 DispatcherTimer 开始并检查其 Tick 事件中的转变。这似乎工作正常。
问题是,这是最好的(唯一的)方法吗?以及为什么修饰符在窗口构造函数中没有返回正确的值?
【问题讨论】:
我想捕获在应用程序启动期间是否按下了修改键(以确定全屏还是窗口)。
在主窗口构造函数中,我尝试检查 Keyboard.Modifiers 枚举以查看 Shift 是否关闭。它总是显示“无”。
所以我尝试了一种不同的方法,从 DispatcherTimer 开始并检查其 Tick 事件中的转变。这似乎工作正常。
问题是,这是最好的(唯一的)方法吗?以及为什么修饰符在窗口构造函数中没有返回正确的值?
【问题讨论】:
Keyboard.Modifiers 是要使用的正确类/属性。
我建议在 FrameworkElement.Loaded 事件的处理程序中检查修饰符。
在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)
{
//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...");
}
}
【讨论】: