質問
(フルスクリーンまたはウィンドウ表示を決定するために)アプリケーションの起動中に修飾キーが押されていたかどうかをキャプチャしたかった。
メインウィンドウのコンストラクターで、 Keyboard.Modifiers 列挙型。Shiftが押されているかどうかを確認します。常に「なし」と表示されていました。
だから、 DispatcherTimer およびTickイベントでシフトをチェックします。それはうまくいくようです。
質問は、これがこれを行うための最良の(唯一の)方法ですか?そして、なぜ修飾子はウィンドウコンストラクタで正しい値を返さないのですか?
解決
Keyboard.Modifiers
は、使用する適切なクラス/プロパティです。
FrameworkElement.Loaded
イベントのハンドラーで修飾子を確認することをお勧めします。
InitializeComponent()
の後の Window
コンストラクター内:
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で呼び出す方法がわからない限り、それを推測します)。
すばらしい概要 ... 2番目のリンクには、プロセスでそれを示す優れたコードがあります... Joshを追加するだけですGのコード(この質問の回答から2番目のリンクのプロジェクトまで):
InitializeComponent()の後のWindowコンストラクター内:
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...");
}
}