
現在VC++2008のC++/CLIを用いてwindows form アプリケーションを作成しています。
USBカメラの抜挿しを検知しようと思い,http://d.hatena.ne.jp/shiwork/20100126/1264453129のサイトを参考にさせていただき,下記のコードを書きました。
#include <windows.h>
#include <Dbt.h>
virtual void WndProc(System::Windows::Forms::Message% m) override
{
if(m.Msg == WM_DEVICECHANGE)
{
switch((int)(m.WParam))
{
case DBT_DEVICEREMOVECOMPLETE:
MessageBox::Show("out");
break;
case DBT_DEVICEARRIVAL:
MessageBox::Show("in");
break;
}
}
Form::WndProc(m);
}
このコードをステップ実行してみたところ,USBカメラを抜いても挿しても,m.WParamの値は '7'のままで変わりません。またswitchで一時停止し,F10で1ステップ実行したところ,すぐにswitchを抜けてしまい,条件式を全く評価していないようでした。
どのようにすれば,USBカメラの抜挿しを正常に検知できるでしょうか?
No.4ベストアンサー
- 回答日時:
見直したハズですが、アホな誤字があったので訂正。
># 接続したUSB2.0 Cameraのプロパティ、詳細の「デバイカクラスGUID」の値。
「デバイス クラス GUID」です。
No.3
- 回答日時:
というワケでやってみました。
(VS2005でC++/Win32アプリケーション。実行環境はWindows7 Pro 64Bit)# 結果としては正しいのか不明ですが…。
WM_CREATEの際に
DEV_BROADCAST_DEVICEINTERFACE devif;
ZeroMemory( &devif, sizeof(DEV_BROADCAST_DEVICEINTERFACE) );
devif.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
devif.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
devif.dbcc_classguid = GUID_USBCAMERA;
hDevNotify = RegisterDeviceNotification( hWnd, &devif, DEVICE_NOTIFY_WINDOW_HANDLE );
で登録。
# hDevNotifyはグローバル変数で型はHDEVNOTIFY。
# WM_DESTROYでUnregisterDeviceNotification()で後始末しています。
dbcc_classguidに設定するGUIDの問題なのか…結局通知されませんでした。
DEFINE_GUID(GUID_USBCAMERA,0x6BDD1FC6, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F);
で設定してみましたが変わらず。
# 接続したUSB2.0 Cameraのプロパティ、詳細の「デバイカクラスGUID」の値。
# ちなみに製品はBSW13KE09HSV。
dbcc_classguidを未設定に、RegisterDeviceNotification()の第3引数をDEVICE_NOTIFY_ALL_INTERFACE_CLASSESにすると、
DBT_DEVICEARRIVAL/DBT_DEVICEREMOVECOMPLETEが通知されます。
USBの抜き差しを行うとDEV_BROADCAST_DEVICEINTERFACE構造体のdbcc_classguidが{A5DCBF10-6530-11D2-901F-00C04FB951ED}の通知が来ます。
# WinDDKをインストールしていればGUID_DEVINTERFACE_USB_DEVICEまたはGUID_CLASS_USB_DEVICEで定義されている。
USB抜き差し全般で通知を有効にした上でUSBカメラを接続すると、
{A5DCBF10-6530-11D2-901F-00C04FB951ED}
{6994AD05-93EF-11D0-A3CC-00A0C9223196}
{65E8773D-8F56-11D0-A3B9-00A0C9223196}
が通知されました。
レジストリを検索すると…
{6994AD05-93EF-11D0-A3CC-00A0C9223196}がUSBカメラでした。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{6994AD05-93EF-11D0-A3CC-00A0C9223196}\##?#USB#VID_1E4E&PID_0103&MI_00#6&1810EB48&0&0000#{6994ad05-93ef-11d0-a3cc-00a0c9223196}\#GLOBAL\Device Parameters
のFriendlyNameが"USB2.0 Camera"でした。(デバイスマネージャで表示されるもの。たぶん環境依存。)
# ちなみに65E8773D-8F56-11D0-A3B9-00A0C9223196はAM_KSCATEGORY_CAPTURE、
# 6994AD05-93EF-11D0-A3CC-00A0C9223196はAM_KSCATEGORY_VIDEOとしてksuuids.hで登録されていました。
上記のGUID_USBCAMERAを6994AD05-93EF-11D0-A3CC-00A0C9223196に設定してDEVICE_NOTIFY_WINDOW_HANDLEでRegisterDeviceNotification()することで…
とりあえずUSBカメラの抜き差しを検出できました。
# ただし…6994AD05-93EF-11D0-A3CC-00A0C9223196がどの環境でもUSBカメラになるかは不明です。
# WindowsSDKで定義されているのだから…固定ですかねぇ。
# どのファイルをインクルードして使うのかはよくわかりませんでしたが。
No.2
- 回答日時:
>上記の設定は具体的にどのようにすれば実現できますでしょうか?
具体的に…と問われても……
USB-Serial変換かせいぜいUSBメモリの場合しか試したことはありませんから、
USBカメラ(Webカメラ?)がどのようになるのかは不明です。
「RegisterDeviceNotification」で検索すると使い方とか説明しているページがいくつか見つかるはずですから、
そちらのサンプル等を参照して試行錯誤…でしょうかね。
# 接続するUSBカメラによっても対応が変わる可能性がありますし……。
一般的なUSBカメラ(UVC対応カメラ)の場合のGUIDでもあれば、あるいは一般化できるのかも知れませんが。
# 家に帰れば…UVC対応カメラがあったハズ(あきばお~で処分価格で売っていたモノを1つ買ったので)。
あとは…もしかしたらDDKも必要かも知れないですな。
# C++/CLIは不明。
No.1
- 回答日時:
接続しているUSBカメラはストレージとして使えるタイプではない…ということでしょうか?
# デジカメなんかとUSB接続だとリムーバブルストレージとして見えたりしますが。
USB-Serial変換やUSB-Parallel変換、またはリムーバブルストレージ(カードリーダ系も含む。ドライブ名が割り当て可能なものですかね)ならば
特に設定しなくてもOSから通知が来ますが、それ以外のデバイスの場合は予め設定しておかないと通知の種類が少ない…のでしょう。
# USBなBluetoothドングルだと…シリアルポートとして反応するんだろうか……。
参考URL:http://social.msdn.microsoft.com/Forums/ja-JP/wi …
ご回答ありがとうございます。
>>リムーバブルストレージならば特に設定しなくてもOSから通知が来ます...
上記をもとに,USBメモリーを抜挿しした場合は,正常にコードは動作しました。
使用中のUSBカメラはストレージとして使用できるタイプではないようです。
リンク先を拝見しましが,RegisterDeviceNotificationの使用方法がわかりませんでした...
>>それ以外のデバイスの場合は予め設定しておかないと...
上記の設定は具体的にどのようにすれば実現できますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
新しくノートPC(Dynabook)を購...
-
防犯カメラで監視されてるみたい
-
コンビニバイトでやらかしたか...
-
wndProcを用いたUSBデバイスの...
-
ノートパソコンの内蔵カメラが...
-
坂道グループのミーグリについ...
-
デジタルビデオカメラからキャ...
-
デジカメ購入店
-
スマートメディヤ
-
バレずに動画をとる方法ってあ...
-
Teamsに利用できるWebカメラ
-
教えてください! 普通に家とか...
-
人が入れない床下の映像を撮りたい
-
東京で一番カメラバッグの在庫...
-
ワイヤレス防犯カメラを両面テ...
-
他人のパソコンなどのWEBカメラ...
-
携帯の外カメビデオで撮影した...
-
GoPro動画をレコーダーに取り込...
-
16MBでたった7枚しかとれません。
-
このマザボマイクを2つ使えま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
新しくノートPC(Dynabook)を購...
-
コンビニバイトでやらかしたか...
-
アダルトビデオとかである、洋...
-
防犯カメラで監視されてるみたい
-
ノートパソコンのカメラが作動...
-
監視カメラをお店につけている...
-
ノートパソコンの内蔵カメラが...
-
坂道グループのミーグリについ...
-
wndProcを用いたUSBデバイスの...
-
カメラを探しています。小型が...
-
こんなことってあるのでしょうか?
-
USBカメラ1台で他のPCより画像...
-
隣人から盗撮されているかも
-
ドライブレコーダーってHDRとWD...
-
防犯カメラの亀ソーラーの白と...
-
教えてください! 普通に家とか...
-
CyberLink YouCamというソフト...
-
人が入れない床下の映像を撮りたい
-
Excel 2000 の カメラ機能
-
コンビニでバイトしてます。外...
おすすめ情報