メッセージ「WM_DEVICECHANGE」を、拾うことでデバイスの変化を取得できます。
ドライブの追加などを知ることが出来ます。
CDの挿入・排出も検出できます。
XPなどの場合は、WM_DEVICECHANGEが定義されていますが、CEの場合は定義されていません。
ただ、実際にはメッセージ自体は飛ぶようなので直値で拾うことが出来ます。
WM_DEVICECHANGE = 0x219
詳しい情報は、MSDNの解説を参照ください。
メッセージの発行についての注意点
MSDNの解説
WindowsXP/2000/CEで確認しました。
ドライブの追加などを知ることが出来ます。
CDの挿入・排出も検出できます。
XPなどの場合は、WM_DEVICECHANGEが定義されていますが、CEの場合は定義されていません。
ただ、実際にはメッセージ自体は飛ぶようなので直値で拾うことが出来ます。
WM_DEVICECHANGE = 0x219
詳しい情報は、MSDNの解説を参照ください。
メッセージの発行についての注意点
MSDNの解説
WindowsXP/2000/CEで確認しました。
サンプル
<Category : C/C++>
#include <Dbt.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
{
default:
return 0;
}{
case WM_COMMAND:
//...
break;
case WM_DESTROY:break;
PostQuitMessage(0);
break;
case WM_DEVICECHANGE: //0x219:break;
{
TCHAR str[512];
switch(wParam){
case DBT_DEVICEARRIVAL:
MessageBox(hWnd,str,TEXT("確認"),MB_OK);
return TRUE;
}switch(wParam){
case DBT_DEVICEARRIVAL:
_stprintf(str,TEXT("ドライブが追加もしくはディスクが挿入されました。W=0x%x , L=0x%x"),wParam,lParam);
break;
case DBT_DEVICEREMOVECOMPLETE:break;
_stprintf(str,TEXT("ドライブが削除もしくはディスクが排出されました。W=0x%x , L=0x%x"),wParam,lParam);
break;
case DBT_DEVNODES_CHANGED:break;
_stprintf(str,TEXT("ドライブがシステムにより追加or削除されました。W=0x%x , L=0x%x"),wParam,lParam);
break;
default:break;
_stprintf(str,TEXT("デバイスに変化あり。W=0x%x , L=0x%x"),wParam,lParam);
break;
}break;
MessageBox(hWnd,str,TEXT("確認"),MB_OK);
return TRUE;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}return 0;