我想捕获应用程序启动过程中是否按下修饰键(以确定全屏或窗口)。应用程序启动期间的键盘修饰符
在主窗口构造函数中,我尝试检查Keyboard.Modifiers枚举以查看Shift是否关闭。它总是显示'没有'。
因此,我尝试了一种不同的方法,开始DispatcherTimer并检查其Tick事件中的移位。这似乎工作正常。
问题是,这是最好的(唯一)的方式来做到这一点?为什么修饰符不能在窗口构造函数中返回正确的值?
我想捕获应用程序启动过程中是否按下修饰键(以确定全屏或窗口)。应用程序启动期间的键盘修饰符
在主窗口构造函数中,我尝试检查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 ...第二个链接有很大的代码来显示它在这个过程中...只要(在这个问题上,从答案的项目中第二个链接)增加约什G公司代码:
在的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)
{
MessageBox.Show("The Window is Shifty...");
}
}
是的 - 比定时器方法更好。但任何想法为什么修饰符不能在构造器中工作? – PaulB 2009-04-29 15:13:47