Question

Je souhaitais savoir si une touche de modification était enfoncée au démarrage de l'application (pour déterminer le mode plein écran ou la fenêtre).

Dans le constructeur de la fenêtre principale, j'ai essayé de vérifier la Keyboard.Modifiers enum pour voir si Shift est en panne. Il a toujours montré «Aucun».

J'ai donc essayé une approche différente en démarrant une DispatcherTimer et en vérifiant le décalage dans son événement Tick. Cela semble fonctionner correctement.

La question est, est-ce la meilleure (seule) façon de faire cela? Et pourquoi le modificateur ne renvoie-t-il pas la valeur correcte dans le constructeur de fenêtre?

Était-ce utile?

La solution

Keyboard.Modifiers est la bonne classe / propriété à utiliser.

Je suggérerais de vérifier les modificateurs d'un gestionnaire pour l'événement FrameworkElement.Loaded .

Dans le constructeur Window après InitializeComponent () :

this.Loaded += new RoutedEventHandler(Window_Loaded);

Et:

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

Autres conseils

Je parie que Keyboard.Modifiers utilise GetKeyState sous les couvertures, ce qui ne fonctionnera probablement pas tant que votre boucle de message n'aura pas envoyé son premier message. GetAsyncKeyState fonctionnerait pour vous (via P / Invoke, je suppose, sauf s’il existe un moyen de le nommer .net que je ne connais pas).

Excellente récapitulatif ... le deuxième lien contient un code génial à afficher dans le processus ... Ajoutez simplement Josh Le code de G (de la réponse dans cette question au projet dans le deuxième lien):

Dans le constructeur de fenêtre après InitializeComponent ():

this.Loaded += new RoutedEventHandler(Window_Loaded);

Et:

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...");
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top