ぱぱっと取れるものなのかしら。と思ってみたら若干めんどくさかった。
現在押されているキー
Window.Current.CoreWindowのGetKeyStateで指定したキーが押されたかどうかわかるので、VirtualKey全走査すればいいのか?修飾キーあたり排除してFirstOrDefaultっと・・・。動かしてません・・・!
var vkyes = VirtualKeys = Enum
.GetValues(typeof(VirtualKey))
.Cast<VirtualKey>()
.Where(k => k != VirtualKey.Menu &&
k != VirtualKey.LeftWindows &&
k != VirtualKey.Control &&
k != VirtualKey.Shift)
.ToArray();
var currentKey = vkeys.FirstOrDefault(k =>
Window.Current.CoreWindow.GetKeyState(k) == CoreVirtualKeyStates.Down);
現在押されている修飾キー
VirtualKeyModifiersで表してるらしい。これもCoreWindowのGetAsyncKeyStateみたいなメソッドで押せるかどうか判別できるらしい。まぁ、これくらいの数なら愚直にやってもいいかなってことで押されてる奴を|=でつないでいく。
var m = VirtualKeyModifiers.None; if (Window.Current.CoreWindow.GetAsyncKeyState(VirtualKey.Shift) == CoreVirtualKeyStates.Down) { m |= VirtualKeyModifiers.Shift; } if (Window.Current.CoreWindow.GetAsyncKeyState(VirtualKey.Control) == CoreVirtualKeyStates.Down) { m |= VirtualKeyModifiers.Control; } if (Window.Current.CoreWindow.GetAsyncKeyState(VirtualKey.Menu) == CoreVirtualKeyStates.Down) { m |= VirtualKeyModifiers.Menu; } if (Window.Current.CoreWindow.GetAsyncKeyState(VirtualKey.LeftWindows) == CoreVirtualKeyStates.Down) { m |= VirtualKeyModifiers.Windows; }
まとめ
MSDN見ながら書いただけで動かしてないので間違えてる可能性大。次の記事で、これを使ってあれをする・・・!予定。