チェックボックスつきの、TV_ITEMのチェック状態の変更と、ユーザが変更したイベントの取得ってどうするのかしらー? このあたり、あまりに原始的な所為か、ちっとも、それらしい情報に行き当たらないんだよね。起動は遅くてもUIは.NETが簡単でいいやー。
何してるのかって? とりあえず、USB Selectは、今、熟成中(放置ともいう)。その間に、ちょっとリフレッシュを兼ねて、この間実験に使ったツールを、もうちょっと整備してリリースしようとしているってワケです。いきなり、DSK1:をアンマウントして、知らん顔っていうツールじゃ、いくらなんでも、ねぇ(^^;;
現状は、UI部としては、ツリーで、ルートから各デバイスのエントリポイントが表示されている。各エントリはチェックボックスがあって、マウント状態を示している。チェックをはずしたりつけたりすると、マウント状態も変更可能。つまり、手動でアンマウントしたりマウントしたりできる。(ただし、これを実現するには、TV_ITEM関連の操作が出来るようにならなければならない。現状では単にチェックの外れているリストが表示されているだけ。)
実行部としては、デバイスのマウント・アンマウントは実行できている。恐ろしいことに、ルートパーティションを持っているデバイス(つまり内蔵のフラッシュ)さえもアンマウント可能。ただし、これやっちゃうと、確実に要リセット……だと思う。エミュレータはおかしな状態になってしまった。合掌。大和哲がいうように、エミュレータではネイティブアプリが実行できないんだったら、W-ZERO3を地獄行きにするところだったよ。
こんな物騒なツールをナニに使うのかというと、カードの抜き差しをするのに、現状だと、電源を切るとか、リセットするとかしないと、外で書き換えてきた情報が反映されないので、これを簡単にしたいというわけです。将来的には、自動的に、カードの引抜を検出して、アンマウントできればなぁと思っています。
シェクまく
.NETでC#というところが非常に辛いところです(僕の手元にないから)。
VBなら初歩、VCだとちょっと微妙な状態でした(実現できるけど、え?ほんとに?これしか方法ないの?という感じ)。
TV_ITEMと書いてあるあたりVCにちかいかもしれません・・・
hiro
TV_ITEMは、がっつりWin32です。VC++です。
というのも、例の、カードをマウントしたり、アンマウントしたりというのは、IMPLICIT_CALLを伴うので、C#からやる方法がわからないのです。
ということで、ついでだから、Win32アプリをVC++でガリガリいくことを考えています。
で、問題のチェックボックスのコントロールは、出来ました。
tvi.stateMask = TVIS_STATEIMAGEMASK;
tvi.stete = INDEXTOSAATEIMAGEMASK(2);
とかしてやればいいのでした。ただし、これは、昨日、このエントリを書いた時点ではやっていたんです。ただ、これが反映されなかった。それは、TVIF_STATEをセットしないでやっていた、所為でした。こんなの素人にはわかりませんって oTL