質問

(フルスクリーンまたはウィンドウ表示を決定するために)アプリケーションの起動中に修飾キーが押されていたかどうかをキャプチャしたかった。

メインウィンドウのコンストラクターで、 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...");
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top