Windowsストアアプリってキーボードからの情報取得ってどうやるんだろ
皆さんこんばんは。どうでもいいですがブログでは朝でも昼でも「こんばんは」で行こうと思っているぜんのーです。ずっと夜ならずっと寝てられて幸せですよね。
突然ですが、友人に罵られました。
「ホームポジション汚っ!」
何を隠そう、ぜんのーはむしろIT音痴ですのでタッチタイピングなんて高等技術を習得しておりません。でもなんか悔しいので、タイピングゲームでもして練習しようと思ったわけですよ。しかしFLASHとかで公開されてるものってネットにつながってないと使えないじゃないですか。なので、
ストアアプリとして作って自給自足のスローライフ的な感じでいこう。
そう考えました。無いなら探すよりも作ろうというのがぜんのー的思考です。
さて、WindowsPhoneのアプリを作っていた時は文字入力するタイミングなんてTextBoxという名の文字入力ができる箱に触れた時くらいのもので、VisualStudioでツールボックスから選んでドラッグアンドドロップしたら画面内に部品(コントロールっていうらしいです)が作れていたわけですよ。こいつ↓
何と簡単なのでしょうか。しかしですね、躓きました。
Windows8ってパソコンなんで、普通にキーボードがついてることが多いじゃないですか。で、しかもタイピングゲームってことはTextBoxに打った文字が次々出ていくのもなんか嫌じゃないですか。透明にして使おうにも、クリックしてフォーカス(←今、コンピュータがこの部品を見てるよって感じのものです)をTextBoxに合わせてもらえるのかどうかも怪しいですし。時代は、脱TextBoxですよ。
で、調べたらありました。なんか、
「画面全体にフォーカスが合っていて、キーボードの入力があったら何が押されたかを通知する」
みたいな感じらしいです。よくわかりませんが。
実際にコードを書いてみました。
// キーボードでの入力受付
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;
}
void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
{
string str = args.VirtualKey.ToString(); //ここで入力された内容を文字列にします
str.Equals( /*ここに比較する内容*/ );
}
// ここまで
こんな感じで取得したいページの.csファイルに記述をしておけばいい感じにやってくれるっぽいです。あとは文字列同士の比較にEqualsメソッド使って正しければ云々って処理を付けていけばタイピングゲームになりそうですね。
なんかよくわかんないんですが、文字列同士を「==」という論理演算子で比べてしまうと「異なるメモリ領域に記録されている別の文字列だから一緒じゃないですよ」みたいな感じで言われてしまうっぽいので要注意です。
あと、取得してきてるVirtualKeyですが、文字のキーは大文字で取得してきますが、マイナスとかは全然違う文字の並びだったので、一度試しにキーボード入力を画面かコンソールに出力して確認した方がいいのかもしれません。
そんなこんなで出来上がったのがこの「タイピングドクター 気楽 寂」。これからバージョンアップを重ねていく予定です。
http://apps.microsoft.com/windows/app/248270af-edc3-4c70-bfac-a3b97ff34654
そんなこんなでお昼ご飯を食べなければいけませんので本日はこの辺で。
また後日。では。