Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

現在押されているキーと修飾キーを取得する

$
0
0

ぱぱっと取れるものなのかしら。と思ってみたら若干めんどくさかった。

現在押されているキー

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見ながら書いただけで動かしてないので間違えてる可能性大。次の記事で、これを使ってあれをする・・・!予定。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>