2009-04-29 28 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..."); 
    } 
} 
相關問題