C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法
ツリー表示
トピック表示
ランキング
記事検索
過去ログ
ログ内検索
キーワードを複数指定する場合は 半角スペース で区切ってください。
検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
[返信]をクリックすると返信ページへ移動します。
キーワード
/
検索条件
/
(AND)
(OR)
検索範囲
/
(現在のログ)
(全過去ログ)
(過去ログ1)
(過去ログ2)
(過去ログ3)
(過去ログ4)
(過去ログ5)
(過去ログ6)
(過去ログ7)
(過去ログ8)
(過去ログ9)
(過去ログ10)
(過去ログ11)
(過去ログ12)
(過去ログ13)
(過去ログ14)
(過去ログ15)
(過去ログ16)
(過去ログ17)
(過去ログ18)
(過去ログ19)
(過去ログ20)
(過去ログ21)
(過去ログ22)
(過去ログ23)
(過去ログ24)
(過去ログ25)
(過去ログ26)
(過去ログ27)
(過去ログ28)
(過去ログ29)
(過去ログ30)
(過去ログ31)
(過去ログ32)
(過去ログ33)
(過去ログ34)
(過去ログ35)
(過去ログ36)
(過去ログ37)
(過去ログ38)
(過去ログ39)
(過去ログ40)
(過去ログ41)
(過去ログ42)
(過去ログ43)
(過去ログ44)
(過去ログ45)
(過去ログ46)
(過去ログ47)
(過去ログ48)
(過去ログ49)
(過去ログ50)
(過去ログ51)
(過去ログ52)
(過去ログ53)
(過去ログ54)
(過去ログ55)
(過去ログ56)
(過去ログ57)
(過去ログ58)
(過去ログ59)
(過去ログ60)
(過去ログ61)
(過去ログ62)
(過去ログ63)
(過去ログ64)
(過去ログ65)
(過去ログ66)
(過去ログ67)
(過去ログ68)
(過去ログ69)
(過去ログ70)
(過去ログ71)
(過去ログ72)
(過去ログ73)
(過去ログ74)
(過去ログ75)
(過去ログ76)
(過去ログ77)
(過去ログ78)
(過去ログ79)
(過去ログ80)
(過去ログ81)
(過去ログ82)
(過去ログ83)
(過去ログ84)
(過去ログ85)
(過去ログ86)
(過去ログ87)
(過去ログ88)
(過去ログ89)
(過去ログ90)
(過去ログ91)
(過去ログ92)
(過去ログ93)
(過去ログ94)
(過去ログ95)
(過去ログ96)
(過去ログ97)
(過去ログ98)
(過去ログ99)
(過去ログ100)
(過去ログ101)
(過去ログ102)
(過去ログ103)
(過去ログ104)
(過去ログ105)
(過去ログ106)
(過去ログ107)
(過去ログ108)
(過去ログ109)
(過去ログ110)
(過去ログ111)
(過去ログ112)
(過去ログ113)
(過去ログ114)
(過去ログ115)
(過去ログ116)
(過去ログ117)
(過去ログ118)
(過去ログ119)
(過去ログ120)
(過去ログ121)
(過去ログ122)
(過去ログ123)
(過去ログ124)
(過去ログ125)
(過去ログ126)
(過去ログ127)
(過去ログ128)
(過去ログ129)
(過去ログ130)
(過去ログ131)
(過去ログ132)
(過去ログ133)
(過去ログ134)
(過去ログ135)
(過去ログ136)
(過去ログ137)
(過去ログ138)
(過去ログ139)
(過去ログ140)
(過去ログ141)
(過去ログ142)
(過去ログ143)
(過去ログ144)
(過去ログ145)
(過去ログ146)
(過去ログ147)
(過去ログ148)
(過去ログ149)
(過去ログ150)
(過去ログ151)
(過去ログ152)
(過去ログ153)
(過去ログ154)
(過去ログ155)
(過去ログ156)
(過去ログ157)
(過去ログ158)
(過去ログ159)
(過去ログ160)
(過去ログ161)
(過去ログ162)
(過去ログ163)
(過去ログ164)
(過去ログ165)
(過去ログ166)
(過去ログ167)
(過去ログ168)
(過去ログ169)
(過去ログ170)
(過去ログ171)
(過去ログ172)
(過去ログ173)
(過去ログ174)
(過去ログ175)
(過去ログ176)
(過去ログ177)
(過去ログ178)
(過去ログ179)
強調表示
/
ON
(自動リンクOFF)
結果表示件数
/
20件
30件
40件
50件
100件
記事No検索
/
ON
大文字と小文字を区別する
No.66415 の関連記事表示
ヒット / 11件
(1-11 を表示)
<<
0
>>
■66415
カードリーダーによるSDメモリ利用の監視について
□投稿者/ YY -
(2013/04/22(Mon) 13:47:13)
分類:[VB.NET/VB2005 以降]
こんにちは、お世話になります。
XPpro+VB2008
USBデバイスの検出したくいろいろ調べています。
下記のサンプルコードでは、USBデバイスの抜き差しの検知はできるようになっていますが、
ただし、USBメモリリーダーに挿入しても反応しません。この問題を解決したくご質問させていただきました。
どうぞよろしくお願い致します。
参照URL:
ttp://hcs-papa.seesaa.net/article/169705315.html
サンプルコード-------------ここから-------------------------
Private WM_DEVICECHANGE = &H219
Private Enum DBT As Int32
DBT_DEVICEARRIVAL = &H8000
DBT_DEVICEQUERYREMOVE = &H8001
DBT_DEVICEQUERYREMOVEFAILED = &H8002
DBT_DEVICEREMOVEPENDING = &H8003
DBT_DEVICEREMOVECOMPLETE = &H8004
End Enum
Private Enum DBT_DEVICETYPE
DBT_DEVICETYPE_OEM = &H0
DBT_DEVICETYPE_DEVNODE = &H1
DBT_DEVICETYPE_VOLUME = &H2
DBT_DEVICETYPE_PORT = &H3
DBT_DEVICETYPE_NET = &H4
DBT_DEVICETYPE_DEVICEINTERFACE = &H5
DBT_DEVICETYPE_HANDLE = &H6
End Enum
Public Structure DEV_BROADCAST_VOLUME
Public dbcv_size As UInt32
Public dbcv_devicetype As UInt32
Public dbcv_reserved As UInt32
Public dbcv_unitmask As UInt32
End Structure
Protected Overrides Sub WndProc(ByRef m As _
System.Windows.Forms.Message)
Select Case m.Msg
Case WM_DEVICECHANGE
Dim dbv As New DEV_BROADCAST_VOLUME
dbv = _
Marshal.PtrToStructure(m.LParam, _
GetType(DEV_BROADCAST_VOLUME))
If dbv.dbcv_devicetype = _
DBT_DEVICETYPE.DBT_DEVICETYPE_VOLUME Then
Dim drv As String = ""
drv = getDriveString(dbv.dbcv_unitmask)
Select Case m.WParam.ToInt32
Case DBT.DBT_DEVICEARRIVAL
MessageBox.Show(drv & "を取り付けた!")
Case DBT.DBT_DEVICEREMOVECOMPLETE
MessageBox.Show(drv & "を取り外した!")
Case Else
End Select
End If
Case Else
End Select
MyBase.WndProc(m)
End Sub
Private Function getDriveString(ByVal lParam As Int32) As String
getDriveString = ""
Dim I As Integer
For I = 0 To 25
If lParam And 1 Then
Exit For
End If
lParam >>= 1
Next
If I >= 26 Then
Exit Function
End If
getDriveString = Chr(Asc("A") + I)
End Function
サンプルコード-------------ここまで-------------------------
親記事 /過去ログ112より /
関連記事表示
削除チェック/
■66426
Re[1]: カードリーダーによるSDメモリ利用の監視について
□投稿者/ shu -
(2013/04/23(Tue) 08:30:20)
■
No66415
(YY さん) に返信
DriveInfo辺りで取得できないですか?
試してはいません。
記事No.66415 のレス /過去ログ112より /
関連記事表示
削除チェック/
■66427
Re[2]: カードリーダーによるSDメモリ利用の監視について
□投稿者/ YY -
(2013/04/23(Tue) 09:17:16)
shu 様
ご回答どうもありがとうございます。
> DriveInfo辺りで取得できないですか?
dim oDrive As IO.DriveInfo
For Each oDrive In IO.DriveInfo.GetDrives
if oDrive.DriveType = IO.DriveType.Removable And oDrive.IsReady Then
debug.print(oDrive.Name)
endif
next
これにより、装着済み(SDカードなどをカードリーダーに挿入し、カードリーダーをPCへ接続済みの状態)でプログラムを実行した場合は
oDrive.Name の結果は得られますが、
ただし、プログラムを実行し、カードリーダーをPCへ接続した状態で、SDカードのみ抜き差しすると無反応です。
なんとかこの状態(プログラムを実行し、カードリーダーをPCへ接続した状態で)でも SDカードなどカードリーダーの抜き差しを検知し
その有効ドライブを監視したい。
記事No.66415 のレス /過去ログ112より /
関連記事表示
削除チェック/
■66429
Re[3]: カードリーダーによるSDメモリ利用の監視について
□投稿者/ 774RR -
(2013/04/23(Tue) 10:49:21)
USB フロッピードライブで、フロッピーディスクを使ったことはある?
USB ドライブ自体の脱着では WM_DEVICECHANGE がやってくるが
ドライブにフロッピーディスクを抜き差ししても WM_DEVICECHANGE は来ないんだ。
同じことが起きているんだろう。
USB カードリーダー自体の脱着では WM_DEVICECHANGE がやってくるが
そのカードリーダーに SD メモリを抜き差ししても WM_DEVICECHANGE は来ないんだろう。
SD カードの抜き差しで WM_DEVICECHANGE が来るタイプのリーダーを使うか
WM_DEVICECHANGE に頼らず他の方法でチェックするか、どっちかだろう。
記事No.66415 のレス /過去ログ112より /
関連記事表示
削除チェック/
■66432
Re[4]: カードリーダーによるSDメモリ利用の監視について
□投稿者/ YY -
(2013/04/23(Tue) 11:08:52)
774RR 様
ご回答どうもありがとうございます。
> USB ドライブ自体の脱着では WM_DEVICECHANGE がやってくるが
> ドライブにフロッピーディスクを抜き差ししても WM_DEVICECHANGE は来ないんだ。
> 同じことが起きているんだろう。
おっしゃる通りです。
>
> SD カードの抜き差しで WM_DEVICECHANGE が来るタイプのリーダーを使うか
こういうタイプのリーダーもあるのですね。ただ 対応しないリーダーも検知したいので..
> WM_DEVICECHANGE に頼らず他の方法でチェックするか、どっちかだろう。
WM_DEVICECHANGE に頼らず他にどんな方法があるか教えていただけませんでしょう。
記事No.66415 のレス /過去ログ112より /
関連記事表示
削除チェック/
■66437
Re[5]: カードリーダーによるSDメモリ利用の監視について
□投稿者/ 774RR -
(2013/04/23(Tue) 12:09:56)
何をどうすべきかは、要望というか案件というか次第だろう。
タイマーでも使って定期的に DriveInfo を取得するとか?
そこまでする必然があるかどうか、あたりから検討が必要そう。
メディアの着脱をいちいち通知しないってことは「いつ抜いてもいい」って意味だ。
タイマーで定期的に読み込む=ユーザーの着脱とタイミングがかぶる可能性がある。
たとえ読み込みアクセスであってもアクセス中に抜くのはまずそうな気がする。
記事No.66415 のレス /過去ログ112より /
関連記事表示
削除チェック/
■66436
Re[5]: カードリーダーによるSDメモリ利用の監視について
□投稿者/ とっちゃん -
(2013/04/23(Tue) 12:07:11)
>
■
No66432
(YY さん) に返信
> WM_DEVICECHANGE に頼らず他にどんな方法があるか教えていただけませんでしょう。
一応。。。選択肢だけ。
RegisterDeviceNotification API という、デバイスからの通知を受け取るためのメッセージ登録があります。
.NET からはちょっと使いにくいAPIかもしれませんが、メディアの抜き差しもチェックできた気がします。
http://msdn.microsoft.com/en-us/library/aa363217.aspx
ここに、登録できる通知メッセージがいろいろ出てますので、確認してみてください。
もし、このAPIを使っても検出できないという場合は、ポーリングになります。
記事No.66415 のレス /過去ログ112より /
関連記事表示
削除チェック/
■66446
Re[6]: カードリーダーによるSDメモリ利用の監視について
□投稿者/ YY -
(2013/04/23(Tue) 15:35:05)
とっちゃん 様 774RR 様
ご回答どうもありがとうございます。
> RegisterDeviceNotification API という、デバイスからの通知を受け取るためのメッセージ登録があります。
いろいろ調べてみましたが、下記の記事を見つけました。8年前の記事でした(;゚Д゚)!
http://microsoft.public.jp.visualc.narkive.com/hhXH7VQD
それから、下記のサンプルコードでテストしてみましたが、
やはり、(カードリーダーをPCへ接続した状態で、SDカードを挿入した場合は無反応でした。)
http://timwappat.info/page/ub-funkey-usb-detection-example-vbnet-wpf.aspx
>
> もし、このAPIを使っても検出できないという場合は、ポーリングになります。
タイマーで、774RR様のご指摘のようにあんまり良い方法ではないですが、
残りこの方法しかないでしたら仕方ない。
でも、ちょっと納得行かないですよね。(素人考え’OSよ、こんなんことでなぜ簡単に把握できないの!!’)独り言(;´Д`)
引き続きなにかタイマーなどをつかった良いアイデアご存知でしたらご教示の程宜しくお願い致します。
記事No.66415 のレス /過去ログ112より /
関連記事表示
削除チェック/
■66450
Re[7]: カードリーダーによるSDメモリ利用の監視について
□投稿者/ とっちゃん -
(2013/04/23(Tue) 17:14:17)
>
■
No66446
(YY さん) に返信
> とっちゃん 様 774RR 様
> ご回答どうもありがとうございます。
>
>>RegisterDeviceNotification API という、デバイスからの通知を受け取るためのメッセージ登録があります。
>
> いろいろ調べてみましたが、下記の記事を見つけました。8年前の記事でした(;゚Д゚)!
>
http://microsoft.public.jp.visualc.narkive.com/hhXH7VQD
>
懐かしい。。。MSのNewsGroupに投稿したやつだ。
あそこ、検索できたんだ。。。知らなかったw
えっと、かなり面倒ですがこの方法でXPでは検出できてます。
少なくとも当時はピックアップできてました。
当時は、XP以前のOS(2000や9x系)での検出ができなかったので
結果的にはポーリングを選択したんですよねー。
#ちなみにお仕事的に使ってたのは、デジカメメディアの検出
>その後、糸口が見つかり、なんとか検出できるようになりました。
と、書かれてる部分で、SetupDi系 API使ってガチャガチャやってる部分を
使えば、メディアの抜き差しも検出できるようになるはずです。
このあたりは、Vista以降でも変わってないと思います。
記事No.66415 のレス /過去ログ112より /
関連記事表示
削除チェック/
■66454
Re[8]: カードリーダーによるSDメモリ利用の監視について
□投稿者/ YY -
(2013/04/23(Tue) 17:54:59)
とっちゃん 様
ご回答どうもありがとうございます。
> 懐かしい。。。MSのNewsGroupに投稿したやつだ。
8年前からガチャガチャ(熱意を感じられますヽ〔゚Д゚〕丿スゴイ)
>
> >その後、糸口が見つかり、なんとか検出できるようになりました。
>
> と、書かれてる部分で、SetupDi系 API使ってガチャガチャやってる部分を
> 使えば、メディアの抜き差しも検出できるようになるはずです。
>
> このあたりは、Vista以降でも変わってないと思います。
なんとかその部分をVB.NETに変換できないかチャレンジしてみます。(素人ながら・・・(;´Д`))
記事No.66415 のレス /過去ログ112より /
関連記事表示
削除チェック/
■66455
Re[9]: カードリーダーによるSDメモリ利用の監視について
□投稿者/ とっちゃん -
(2013/04/23(Tue) 18:30:23)
>
■
No66454
(YY さん) に返信
> なんとかその部分をVB.NETに変換できないかチャレンジしてみます。(素人ながら・・・(;´Д`))
ざっと見た感じでは、変換はできるんじゃないかな?とは思いますが、P/Invoke苦手なのでよくわからんですw
うまく変換できないようなら、ここができない!と質問すれば、VBに詳しい人たちが教えてくれると思いますよ。
#その時はスレッド分けてピンポイントで質問することをお勧めします。
記事No.66415 のレス /過去ログ112より /
関連記事表示
削除チェック/
<<
0
>>
パスワード/
-
Child Tree
-