Question

I wanted to capture whether a modifier key was being pressed during application startup (to determine fullscreen or windowed).

In the main window constructor I tried checking the Keyboard.Modifiers enum to see if Shift is down. It always showed 'None'.

So I tried a different approach by starting off a DispatcherTimer and checking for shift in its Tick event. Thats seems to work fine.

Question is, is this the best (only) way to do this? And why does the modifier not return the correct value in the window constructor?

Was it helpful?

Solution

Keyboard.Modifiers is the right class/property to use.

I would suggest checking the modifiers in a handler for the FrameworkElement.Loaded event.

In the Window constructor after InitializeComponent():

this.Loaded += new RoutedEventHandler(Window_Loaded);

And:

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

OTHER TIPS

I bet Keyboard.Modifiers is using GetKeyState under the covers, which probably doesn't work until your message loop has dispatched its first message. GetAsyncKeyState would work for you (via P/Invoke I guess, unless there's a .net way of calling it that I don't know about).

Great summary... the second link has great code to show it in the process... Just add Josh G's code (from the answer in this question to the project in the second link) :

In the Window constructor after InitializeComponent():

this.Loaded += new RoutedEventHandler(Window_Loaded);

And:

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...");
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top