본문 바로가기
Delphi Tip/하드웨어

델파이 USB 인식

by MonoSoft 2021. 8. 18.
728x90
반응형

델파이 USB 인식

 

 

USB를 꽂거나 뺏을 때 이벤트 발생

해당 이벤트가 발생하면 처리하는 함수 구현 방법

 

1. 이벤트 발생 시 파라미터로 받을 데이터 타입 선언

type
TWMDeviceChange = packed record
Msg : Cardinal;
Event: Word;
dwData: Longword;
Result : LongInt;
end;

 

2. 메인 Form 클래스 안에 함수 선언

TfrmMain = class(TForm)
public
procedure WMDeviceChange(var Msg: TWMDeviceChange);
message WM_DEVICECHANGE;
end;

 

3. 함수 기능 구현

procedure TfrmMain.WMDeviceChange(var Msg: TWMDeviceChange);
const
DBT_DEVICEARRIVAL = $8000;
DBT_DEVICEREMOVECOMPLETE = $8004;
begin
case Msg.Event OF
DBT_DEVICEARRIVAL : begin
//USB가 연결 됬을 때 구현
end;
DBT_DEVICEREMOVECOMPLETE : begin
//USB 연결이 해제 되었을 때 구현
end;
end;
end;

 

다음은 현재 컴퓨터에 연결된 드라이브 중 이동식 디스크 드라이브를 찾는 예이다.

var

i: Integer;

driveName: string;

begin

//A ~ Z 까지 드라이브 검색

for i := 0 to 25 do

begin

driveName := Char(i+Ord('A')) + ':\';

 

//드라이브 타입 가져오기

case GetDriveType(PChar(driveName)) of

DRIVE_UNKNOWN : begin

//알려지지 않은 드라이브

end;

 

DRIVE_REMOVABLE : begin

//이동식 디스크 (제거가 가능한 드라이브)

end;

DRIVE_NO_ROOT_DIR : begin

//루트가 없는 드라이브 (잡히지 않은 드라이브)

end;

 

DRIVE_FIXED : begin

//로컬 디스크 (제거가 불가능한 드라이브)

end;

DRIVE_REMOTE : begin

//리모트 드라이브 (네트워크 드라이브)

end;

DRIVE_CDROM : begin

//CD-ROM 드라이브

end;

DRIVE_RAMDISK : begin

//램 디스크

end;

end;

end;

end;

 

여기서 주의 할 사항이 있다.

이동식 디스크로 검색이 되었더라도, 비어있는 드라이브라면

접근했을 때 디스크가 없다는 오류 메시지가 출력된다.

이러한 오류를 피하기 위해서는 그 전에

디스크가 비어있는지, 즉 접근이 가능한 디스크 인지 확인을 해야 한다.

디스크의 정보를 가져오는 GetVolumeInformation() 함수를 이용하여

접근이 가능한지를 리턴값으로 알 수 있다. 

728x90
반응형

댓글