我想捕获在应用程序启动期间是否按下修改键(以确定全屏或窗口)。
在主窗口构造函数中,我尝试检查Keyboard.Modifiers枚举以查看Shift是否已关闭。它总是显示“无”。
所以我尝试了一种不同的方法,开始DispatcherTimer 并检查其Tick事件的转变。这似乎工作正常。
问题是,这是最好(唯一)的方法吗?为什么修饰符没有在窗口构造函数中返回正确的值?
答案 0 :(得分:1)
Keyboard.Modifiers
是正确使用的类/属性。
我建议检查FrameworkElement.Loaded
事件的处理程序中的修饰符。
Window
之后的InitializeComponent()
构造函数:
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();
}
}
答案 1 :(得分:0)
我打赌Keyboard.Modifiers
正在使用GetKeyState
,这可能在您的消息循环发送了第一条消息之前无效。 GetAsyncKeyState
会对你有效(通过P / Invoke我猜,除非有一种我不知道的.net方式调用它)。
答案 2 :(得分:0)
很棒summary ...第二个链接有很好的代码可以在此过程中显示它...只需添加Josh G的代码(从此问题的答案到第二个链接中的项目) ):
在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...");
}
}