我想捕獲應用程序啓動過程中是否按下修飾鍵(以確定全屏或窗口)。應用程序啓動期間的鍵盤修飾符
在主窗口構造函數中,我嘗試檢查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