C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[47779] [질문] USB 장치 제거 및 삽입 상태 파악할려는데요.. ㅜㅜ
나그네 [] 1813 읽음    2007-01-17 12:36
안녕하세요..

항상 좋은 정보를 얻어가고 있습니다.

다름이 아니라,

이번에 여러개의 USB 장치(개발된 장치) 와 통신을 해야 하는데요,,

제가 궁금한 점은,

프로그램을 실행시켰을 때, USB상태를 파악해야 하고요,

프로그램 실행중 제거 및 삽입되는 상태도 파악해야 합니다.

프로그램 실행중에 WM_DEVICECHANGE 메세지로 체크하면,

WParam에는 DBT_DEVNODES_CHANGED (0x0007)만 들어오더라구요. (삽입이나 제거 둘다...)

모 어쨌든간에, 상태가 변경되었다는 것은 확인할 수 있었는데요,

CreateFile을 하려면, 디바이스 패스명을 알아야 하는데요,

(예를 들면, \\\\.\\USB#Vid_0547&Pid_1002#5&214b60b3&0&7#{a5dcbf10-6530-11d2-901f-00c04fb951ed} 등과 같은거)

그걸 추출하는 방법을 모르겠습니다.

'USB완전정복' 이라는 책에는

SetupDiGetDeviceInterfaceDetail(DeviceInfoSet, &MyDeviceInterfaceData, DetailData, Length, &Length, NULL)

을 하면,

DetailData->DevicePath 에 패스명이 들어온다구는 하는데,

SetupDiGetDeviceInterfaceDetail 리턴이 true가 안되고,

DetailData->DevicePath에는 이상한 문자만 있더라고요.


질문의 요지는 CreateFile을 하기 위해서 첫번째 인자인 디바이스패스명을 어떻게 추출하느냐는 겁니다.

다시한번 정리하자면, 폼생성시 현재 디바이스 상태를 점검하여 제가 필요한 USB 장치가 있는가를 확인 후,

디바이스 패스명을 알아내서 CreateFile하고, 프로그램 운용중에 새로운 장치가 삽입되거나 제거되면,

그상태에 따라 CreateFile을 할려는 것입니다.

이것때문에 며칠째 골머리를 앓고 있습니다.

제가 아직 접해보지 못한 부분이라 상세한 답변이나 예제 좀 부탁드리겠습니다.

즐건 하루되세요......

+ -

관련 글 리스트
47779 [질문] USB 장치 제거 및 삽입 상태 파악할려는데요.. ㅜㅜ 나그네 1813 2007/01/17
47805     Re:[질문] USB 장치 제거 및 삽입 상태 파악할려는데요.. ㅜㅜ 3183 2007/01/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.