2009-04-29 90 views
2

我想捕获应用程序启动过程中是否按下修饰键(以确定全屏或窗口)。应用程序启动期间的键盘修饰符

在主窗口构造函数中,我尝试检查Keyboard.Modifiers枚举以查看Shift是否关闭。它总是显示'没有'。

因此,我尝试了一种不同的方法,开始DispatcherTimer并检查其Tick事件中的移位。这似乎工作正常。

问题是,这是最好的(唯一)的方式来做到这一点?为什么修饰符不能在窗口构造函数中返回正确的值?

回答

1

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(); 
    } 
} 
+0

是的 - 比定时器方法更好。但任何想法为什么修饰符不能在构造器中工作? – PaulB 2009-04-29 15:13:47

0

我敢打赌Keyboard.Modifiers使用的封面,这可能不会,直到你的消息循环工作下GetKeyState已派出第一条消息。 GetAsyncKeyState会为你工作(通过P/Invoke我猜,除非有一种.NET方式调用它,我不知道)。

0

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..."); 
    } 
} 
相关问题