Modificateurs de clavier au démarrage de l'application
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?
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...");
}
}