USBメモリなんかをアプリで検出する

USBメモリなどに送出したい映像など一式をいれといて、ブスッと挿したらそれが出るようにして欲しいとの指令が。
意図がはっきりしないし、LANやイーモバイルつなげよ!とも思ったのだが、結局は「通信事業者が儲かるモデル」の今のデジタルサイネージ業界に風穴を開けるためにも、一肌脱いでみた。

どうせやるなら、効率よく、汎用的に作りたい。規定のドライブを監視して特定フォルダがあったら、、、なんてやりたくない。それなら過去にやってるしな。オレは何か挿されたことを気づきたいんだ。んで、何が挿されたかを。

まずは情報収集。
実装については、この記事が参考になった。MSさま!!ありがとう。

Windows NT または Windows 2000 または Windows XP でリムーバブル メディアを Ejecting する方法
http://support.microsoft.com/kb/165721/ja

ただ、これだとドライブレターがわからないとそもそも始まらない。それは、WindowメッセージのWM_DEVICECHANGEで拾ったときにドライブレターを作る。こちらが参考になるね。
http://www.usefullcode.net/2007/02/usb.html

元々のMSさま!!の記事はこれですね。なんだかんだでMSさま!!の記事が参考になったよ、ということで。

CD-ROM 挿入/取り出しの通知を取得する方法
http://support.microsoft.com/kb/163503/ja

イジェクトは、作りたい処理の流れのゴール。ブスッと挿したらファイルコピーなど処理後、そのままアンマウントしたいので、最適な記事が見つかった。これらを使って、イベントから挿されたことを検出しコピーを行って、アンマウント、送出の開始を実装すれば良いね。switch開発プロジェクトのtrunkにはコミット済みです。switch.cppとMainScene.cppあたりに書いてあります。

ちなみに、新しいUSBメモリを挿したときはドライバのインストールみたいな状態になるけど、全画面アプリで動いてたらどうかなぁ、って思ったんですが、うまく裏でかわせたみたいで大丈夫みたい。ただ、別件で落ちてしまったので(汗)、報告する機会があれば改めて書きます。

コメント

  1. […] USBメモリなんかをアプリで検出する、USBメモリなんかをアプリで検出する2でまとめた件、実際にOSが削除テストを始めるまでの時間って結構あるみたい。USBメモリを入れてから30秒くら […]

タイトルとURLをコピーしました