2ヶ月ぶりに「テープ起こし専用メディアプレイヤー」更新しました。
Vectorの方もそのうち更新されるはず。
■変更点
・ウィンドウをアクティブにしなくても(別ウィンドウからでも)キーボード操作できる
→ Ctrl+Shift同時押し+今までどおりのキーボード操作
・再生速度が設定できるようになった
→ 0.01倍~3倍 ただし0.5倍ぐらい以下にすると音が出なくなる?
・ファイルの長さを表示
・「常に最前面に表示」オプション
■ダウンロード
・KeyPlayer ver.1.10
・SourceCode(VisualStudio2005pro+C#2.0)
・archive
別ウィンドウからのキー操作に必要なグローバルフック、昨日の時点でかなりわけわからなくてあきらめてたんだけどぬるり。: グローバルフック・ザ・キーボードでHongliangさんがコンポーネントの使用を快諾してくれました。本当にありがとうございます。
しかも俺がコメントで訊ねてからコンポーネントに修正入れてくれた。マジ仕事速い。
コンポーネントになっていて、ドラッグアンドドロップで追加してイベント一つ登録すれば動く
今回色々わかったこと・工夫したこと
・axWMP(WindowsMediaPlayerのコンポーネント)は「ファイルの長さ」がaxWMP.currentMedia.durationStringってのはどうなんだ。かなり探したぞ
・フォーカスを消す
一応、これはキーボードで操作するアプリなので、ボタンやチェックボックスをマウスクリックした後そこにフォーカスが残っていると困るので
this.ActiveControl = null;
をCheckedChangedやClickイベントの後で実行する事でフォーカスを無くす様工夫した。
・ホットキー登録
ちなみに、前のエントリのコメントとぬるり。: グローバルフック・ザ・キーボード両方で指摘されたがKeyPlayerの用途の場合RegisterHotKeyで十分だったらしい。
じゃあグローバルキーフックやるのってどんな時だろう?
ざっと調べた/コード読んだ感じだと
・他のアプリケーションに無理矢理キーコード送る
・キーコードを別のキーコードだったことにできる
・キーコードを無かった事にもできる(CallNextHookExを呼ばなければ可能らしい)
なんか他のアプリケーションをキーコードで無理矢理操作するのって、前作った携帯電話の目覚ましの時もそうだったけど一般的なインタフェースなのかもしれない。
組み込み機器とかAPIは本当に0xA2みたいなコードだけだし、そういうの向けには一番シンプルでわかりやすいしな(試す時は自分でキーボードで試す → マイコンにキーコード送らせて試す)
WebみたいなAPIで繋がっていく世界は、API仕様を公開するプロトコル(WSDLとか)まであるけど、そういうパワーを持たせられない領域の工夫も面白い。いや本当にキーコード操作っていう仕様がそうなのかは知らんが