2009-04-29 16 views
2

アプリケーションの起動時に修飾キーが押されているかどうかをキャプチャして、全画面またはウィンドウを決定したいと考えました。アプリケーション起動時のキーボード修飾子

メインウィンドウのコンストラクタで、Keyboard.Modifiers列挙型を調べて、Shiftキーが押されていないかどうかを確認しました。それは常に「なし」を示しました。

私はDispatcherTimerを開始し、そのTickイベントのシフトをチェックすることで別のアプローチを試みました。それはうまくいくようです。

質問は、これを行うための最良の(唯一の)方法ですか?なぜ、修飾子はウィンドウコンストラクタで正しい値を返さないのですか?

答えて

1

Keyboard.Modifiersは、使用する正しいクラス/プロパティです。

FrameworkElement.Loadedイベントのハンドラーで修飾語を確認することをお勧めします。

this.Loaded += new RoutedEventHandler(Window_Loaded); 

そして:WindowコンストラクタInitializeComponent()後に

void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    // Examine Keyboard.Modifiers and set fullscreen/windowed 
    if ((Keyboard.Modifiers & ModifierKeys.Shift) > 0) 
    { 
     //SetFullscreen(); 
    } 
} 
+0

うん - タイマー方式よりも良いです。しかし、なぜ修飾子がコンストラクタで動作しないのか、 – PaulB

+0

わかりません。キーボードクラス/デバイスは、アプリケーションが起動してからまだ初期化されていない必要があります。 –

+0

私は、後で作成されたコントロールのコンストラクタでKeyboard.Modifiersを使うことができると思っています。ちょうどアプリケーションが起動して以来、メインウィンドウではありません。 –

0

は、私はおそらくあなたのメッセージループまでは動作しませんカバー、下GetKeyStateを使用しているKeyboard.Modifiers賭け派遣したその最初のメッセージ。 GetAsyncKeyStateはP/Invokeを介してあなたのために働くでしょう。私が知りません。

0

summaryグレート... 2番目のリンクはジャスト(第2リンクで、この問題の答えからプロジェクトに)ジョシュ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..."); 
    } 
}