昨日までで40個のボタンを判別できたので、それに動作を付け加えていきます。
ちなみに改めて何使えるかを考えると、動画や音楽鑑賞ですね。
リモコンの利点を活かして画面から離れると、目が悪いせいもあってそれぐらいしかできることがありません。
そんな訳で普段音楽聴くのに使ってるWindowsMediaPlayer(WMP)と、テレビを見るのに使ってるmAgicTVを使えるようにしたいと思います。 方法は簡単。 リモコンの各ボタンにkeybd_event()を使って、ショートカットキーを割り当てていきます。
まず最初に取り掛かったのが、ミスっても一番影響の少なそうな音量。
「音量↓」と「音量↑」のボタンに、
keybd_event(VK_VOLUME_DOWN,0x00,KEYEVENTF_EXTENDEDKEY|0,0); keybd_event(VK_VOLUME_DOWN,0x00,KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,0);
てな感じで、ボタンを押し、離す処理を割り当てます。
以下、同じようにボタンに割り当てていきます
「音量↓」 VK_VOLUME_DOWN 「音量↑」 VK_VOLUME_UP 「ミュート」 VK_VOLUME_MUTE 「スキップ」 VK_MEDIA_NEXT_TRACK 「リプレイ」 VK_MEDIA_PREV_TRACK 「停止」 VK_MEDIA_STOP 「一時停止」 VK_MEDIA_PLAY_PAUSE 「再生」 VK_MEDIA_PLAY_PAUSE
これだけで、一通りWMPは扱えます。
mAgicTVの方はショートカットキーが載ってる説明書が見つからなかったので、手探りで色々押して探してみました。
以下の通りです。
各チャンネル 「1」 VK_F1 「2」 VK_F2 「3」 VK_F3 「4」 VK_F4 「5」 VK_F5 「6」 VK_F6 「7」 VK_F7 「8」 VK_F8 「9」 VK_F9 「*」 VK_F10 「0」 VK_F11 「#」 VK_F12 「チャンネル↑」 VK_VK_PRIOR 「チャンネル↓」 VK_NEXT
10〜12チャンネルが若干気に入らないんですが、ボタンがないので仕方ないですね。
数字の1,2,3あたりでフルスクリーンにしたりと、画面の大きさを変えられるようなのですが、どのボタンに対応させようか迷っています。
録画のキーも見つけたので必要があれば「録画」ボタンに対応させるつもりです。
で、ここまでだと操作はできても起動ができないので、起動機能も追加します。
CreateProcessA()を使って、以下のようにします。
int Open_WMP(){ STARTUPINFO si; PROCESS_INFORMATION pi;
GetStartupInfo(&si);
CreateProcessA(NULL, "C:\\Program Files\\Windows Media Player\\wmplayer.exe", NULL,NULL,FALSE,NULL,NULL,NULL,&si,&pi);
return 0;
}
ちなみにWMPは「Windows」ボタン、mAgicTVは「テレビ」ボタンに割り当てました。
「番組ガイド」ボタンもあったので、それにはmAgicTVガイドを割り当てました。
ついでに起動したら、閉じる処理も行いたいので、「クリア」ボタンに
keybd_event(VK_LMENU,0x00,KEYEVENTF_EXTENDEDKEY|0,0); keybd_event(VK_F4,0x00,KEYEVENTF_EXTENDEDKEY|0,0); keybd_event(VK_LMENU,0x00,KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,0); keybd_event(VK_F4,0x00,KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,0);
を追加しました。
「Alt+F4」なんで、Altを押してF4を押してから、離すようにしないといけません。
これである程度の操作は行える訳ですが、WMPやmAgicTVのウィンドウにフォーカスがいつもいってるとは限りません。
誤動作を防止するために、フォーカスしてるウィンドウを特定してからイベントを起こすようにしました。
まずボタンの処理の前に、以下のプログラムを入れてウィンドウクラスを調べます。
int CheckActiveWindow(char WC[1000]){ HWND hWnd,hWnd2; int i; char windows_class[2][100]={{"WMPlayerApp"},{"mAgicTVWindow"}}; hWnd = GetForegroundWindow(); for(i=0;i<2;i++){ hWnd2=FindWindowA(windows_class[i],NULL); if(hWnd==hWnd2) return (i+1); } return 0; }
ウィンドウテキストのように可変では困るので、「mAgicTVWindow」のようなウィンドウクラスを用います。
ちなみにVisualStudio付属の「Spy++」というソフトで、実行中の各アプリケーションのウィンドウクラスが調べられます。
あとは処理をする前にCheckActiveWindow()の返り値から、フォーカスしてるウィンドウかどうかif分岐させるだけです。
最近の記事を見る
⇒ブログでのnofollowの使い方 後編 (2008/10/01) ⇒ブログでのnofollowの使い方 前編 (2008/09/30) ⇒GoogleChromeに潜む小悪魔 〜GoogleUpdate.exe〜 (2008/09/25) ⇒QLOOKの解析タグのカスタマイズを使いこなす (2008/09/19) ⇒メモリーカード変換アダプタ一覧 (2008/09/15) ⇒Buzzurlを導入してみた (2008/09/09) ⇒Firefox 3のブックマークを解析してみた (2008/09/03) ⇒Googleでの検索順位が一気に上昇・復活 (2008/08/29) ⇒CREATIVE ZEN その9(ZEN関連記事のまとめ) (2008/08/24) ⇒ブログやサイトにソースコードを乗せる時に便利なツール (2008/08/22)
テーマ:プログラミング - ジャンル:コンピュータ メインカテゴリ:ハードウェア カテゴリ:GV-MC/RCkit
|