|
음, 제가 알기로 WM_DEVICECHANGE는 어떤 장치의 변화든 발생되지만,
DBT_DEVICEARRIVAL 이나 DBT_DEVICEREMOVECOMPLETE는 CD나 DVD같은 볼륨 장치나 미디어들에서만
전달되는 파라메터인데요,
일반적인 USB장치라면, 삽입되었는지 제거되었는지를 해당 장치와 별도로 통신포트를 열어보아서
정상적으로 열리느냐 아니느냐로 처리하셔야 할 것 같아요.
그니깐, WM_DEVICECHANGE가 발생할때만, USB 장치를 열어보는거죠.
성공하면 삽입된 상태로 변수 하나를 셋 하고,
또다시 WM_DEVICECHANGE가 발생했을때, USB 장치를 열어보아서
실패하면 REMOVE되었다고 인식하게 처리하셔야 할 것 같네요.
Jooni 님이 쓰신 글 :
: USB 장치 연결, 해제를 처리해야 될 일이 생겨서 검색을 해보니 메시지 맵을 만든후DBT를 이용하여 판단을 하더군요.
:
: if ((UINT)msg.WParam == DBT_DEVICEARRIVAL) {
: Memo1->Lines->Add("Catch Device Change, Connect");
: } else if ((UINT)msg.WParam == DBT_DEVICEREMOVECOMPLETE) {
: Memo1->Lines->Add("Catch Device Change, Disconnect");
: }
:
: 정도의 소스 코드 였는데, 전 이상하게 USB 장, 탈착에 있어서 WM_DEVICECHANGE를 메시지맵으로 처리를 하면 WParam 값이 항상 7이며, LParam 값이 0입니다.
:
: 이상해서 Hi, Lo 나눠서 써보기도 했지만 항상 7이더군요. 검색해보니 저와 비슷한 증상을 겪은 분이 있던데 혹시 해결방법을 아시는분 계신지요?
|