USB Selectで、Mass Storageモードにして、PCに接続すると、物理的には刺さったままのメモリカードが、ソフト的に、Windows Mobile端末から切り離されます。つまり、Mass Storageモードにある状態では、Windows Mobile側からメモリカードへアクセスできなくなります。(ファイルエクスプローラなどで見てみてください。空だと思います。)
これは、USB Mass Storageドライバがメモリカードを占有するためです。Mass Storageモードであっても、PCと接続していなければ、メモリカードは見えます。(このため、Mass Storageから、別のモードに切り替えたり、USBケーブルを外したりすると、「画像を表示するか?」というポップアップが出る。)
もし、USB Selectを利用したらメモリカードが見えなくなったという方がいらっしゃったら、上記をチェックしてみてください。別のモードに切り替えるか、ケーブルを外せば戻ってきます。
シェクまく
デバイスが挿入されたと勘違いして
Autorunが動いているのでしょうから
それを抑制してしまえばポップアップも出なくなると思います。
MSDNでQueryCancelAutoPlayをキーに検索すると出てきます。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_extending/autorun/autoplay_reg.asp
WindowsXPで試したところ、メモリーカード挿入時の動作も
抑制できていましたが、OSがWindowsNT系で
かつ自分自身がフォアグランドにある場合のみ有効です。
W-ZERO3はどうなんでしょうね?
下記のコードはぐぐった結果です。参考までに。
public class Form1 : System.Windows.Forms.Form
{
[DllImport("user32.dll")]
public static extern UInt32 RegisterWindowMessage(string lpString);
private UInt32 WM_QUERYCANCELAUTOPLAY = RegisterWindowMessage("QueryCancelAutoPlay");
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_QUERYCANCELAUTOPLAY)
{
m.Result = (IntPtr)1; // キャンセル
return;
}
base.WndProc(ref m);
}
}
hiro
情報ありがとうございます。なるほど。ここで問題が二つあります。
・user32.dllがない。(coredll.dllに内包なのかな?)
・一旦、マスストレージモードに変更した後はUSB Selectを起動している必要はないので、そういう状態で、ケーブルの抜き差しをされるとどうにもならなそう。
なんにしても、とりあえず、実験してみようと思います。ありがとうございます。
シェクまく
RegisterWindowMessageはcoredll.dllでOKのようです。
ケーブル抜き差し時は・・・マスストレージに変更した場合はレジストリをいぢってしまうとか。ただしこの場合はシステム全体で抑制されてしまうのですよ、とほほ。
一番の問題はQueryCancelAutoPlayがCEで動くか?という事なんですけどね。