Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
드라이브(Media) 찾기..
Delphi 에서 ListBOX 에 시스템에 탑재된 미디어(Floopy, HARD, CDROM.....)
을 찾아 등록하는 것을 구현하고 싶습니다.
하지만 생각처럼 그리 쉽진 않군요..
조언 부탁합니다. 될수있으면 자세하고 쉽게 설명해 주세요..
그럼-
2
COMMENTS
김종호
•
1999.08.12 04:26
이지만 께서 말씀하시기를...
> Delphi 에서 ListBOX 에 시스템에 탑재된 미디어(Floopy, HARD, CDROM.....)
> 을 찾아 등록하는 것을 구현하고 싶습니다.
>
> 하지만 생각처럼 그리 쉽진 않군요..
>
> 조언 부탁합니다. 될수있으면 자세하고 쉽게 설명해 주세요..
>
> 그럼-
저는 API를 사용하지 않고
직접 레지스트리에서 장치 디바이스를 찾는 방법으로 구현해 보았습니다.
레지스트리의 HKEY_LOCAL_MACHINEEnum 이부분에 디바이스 정보가
들어 있습니다. 이곳에서 원하는 것들을 찾을수가 있지요.
참 HKEY_DYN_DATAConfig ManagerEnum 이부분에는 현재 사용중이
디바이스들만을 찾아서 그 레지스트리 경로들을 저장하고 있습니다.
아래 소스...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, Registry, Winsock;
type
TForm1 = class(TForm)
DeviceTree: TTreeView;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
ValueList : TStrings;
SubKeys : TStrings;
function GetRegValue(hkeyRoot: HKEY; strOpenKey: String; strName: String): String;
procedure GetSubReg;
procedure SearchRegDevice;
procedure LoadHardwareType;
function IsHardwareInfo(Value: string;var hwIndex: Integer): Boolean;
procedure AnalysisList;
public
{ Public declarations }
end;
Type
HardwareInfo = record
TitleName: String;
TypeName: String;
Node: TTreeNode;
end;
var
Form1: TForm1;
hwInfo: array[0..11] of HardwareInfo;
count: Integer;
implementation
{$R *.DFM}
procedure TForm1.LoadHardwareType;
var
LoadFile: TextFile;
i: Integer;
begin
AssignFile(LoadFile, 'Hardware.txt');
FileMode := 0; // Read only
Reset(LoadFile);
while not eof(LoadFile) do
begin
Readln(LoadFile, hwInfo[count].TitleName);
Readln(LoadFile, hwInfo[count].TypeName);
Inc(count);
end;
for i:=0 to count-1 do
hwInfo[i].Node := DeviceTree.Items.AddChild(DeviceTree.Items.GetFirstNode, hwInfo[i].TitleName);
end;
function TForm1.IsHardwareInfo(Value: string;var hwIndex: Integer): Boolean;
var
i: Integer;
begin
result := False;
for i:=0 to count-1 do
if UpperCase(Value) = UpperCase(hwInfo[i].TypeName) then
begin
hwIndex := i;
result := True;
break;
end;
end;
function TForm1.GetRegValue(hkeyRoot:HKEY;
strOpenKey: String; strName: String): String;
var
regTree: TRegistry;
begin
Try
regTree := TRegistry.Create;
regTree.RootKey := hkeyRoot;
if regTree.OpenKey(strOpenKey, False) then
result :=regTree.ReadString(strName);
Finally
regTree.Free;
end;
end;
procedure TForm1.GetSubReg;
var
regDYN, SubDyn: TRegistry;
TempList: TStrings;
value : String;
i: Integer;
begin
Try
TempList := TStringList.Create;
regDYN := TRegistry.Create;
regDYN.RootKey := HKEY_DYN_DATA;
regDYN.OpenKey('Config ManagerEnum', False);
if regDYN.HasSubKeys then
begin
regDYN.GetKeyNames(TempList);
for i:=0 to TempList.Count-1 do
begin
SubDyn := TRegistry.Create;
SubDyn.RootKey := HKEY_DYN_DATA;
SubDyn.OpenKey('Config ManagerEnum'+TempList.Strings[i], False);
Value := SubDyn.ReadString('HardWareKey');
SubKeys.Add(Value);
SubDyn.Free;
end;
end;
Finally
TempList.Free;
regDYN.Free;
end;
end;
procedure TForm1.SearchRegDevice;
var
Value: String;
i, hwIndex: Integer;
begin
for i:=0 to SubKeys.Count-1 do
begin
Value := '';
Value := GetRegValue(HKEY_LOCAL_MACHINE,
'Enum'+SubKeys.Strings[i], 'Class');
if IsHardwareInfo(Value, hwIndex) then
begin
Value := GetRegValue(HKEY_LOCAL_MACHINE,
'Enum'+SubKeys.Strings[i], 'DeviceDesc');
ValueList.AddObject(value, TObject(hwIndex));
end;
end;
end;
procedure TForm1.AnalysisList;
var
i, hwIndex: Integer;
hwTitle : String;
hwNode : TTreeNode;
begin
for i:=0 to ValueList.Count-1 do
begin
hwIndex := Integer(ValueList.Objects[i]);
DeviceTree.Items.AddChild(hwInfo[hwIndex].Node, ValueList.Strings[i]);
end;
hwNode := DeviceTree.Items.GetFirstNode;
hwNode.Expanded := True;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
ValueList := TStringList.Create;
SubKeys := TStringList.Create;
DeviceTree.Items.Add(Nil, '컴퓨터');
count := 0;
LoadHardwareType;
// 하드웨어 정보 수집
ValueList.Clear;
SubKeys.Clear;
GetSubReg;
SearchRegDevice;
AnalysisList;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ValueList.Free;
SubKeys.Free;
end;
end.
이 텍스트 파일은 읽어올 하드웨어의 종류를 담고 있습니다.
같은 폴더에 복사해서 실행하세요.. ^^;
파일명 : Hardware.txt
네트워크 어댑터
Net
디스플레이 어댑터
Display
마우스
Mouse
키보드
Keyboard
모니터
Monitor
하드 디스크
hdc
플로피 디스크
fdc
CD-ROM
CDROM
사운드 및 게임 컨트롤러
MEDIA
모뎀
Modem
포트
Ports
0
0
삭제
수정
댓글
김정완
•
1999.08.10 11:52
이지만 께서 말씀하시기를...
> Delphi 에서 ListBOX 에 시스템에 탑재된 미디어(Floopy, HARD, CDROM.....)
> 을 찾아 등록하는 것을 구현하고 싶습니다.
>
> 하지만 생각처럼 그리 쉽진 않군요..
>
> 조언 부탁합니다. 될수있으면 자세하고 쉽게 설명해 주세요..
>
> 그럼-
안녕하세요 ^^; 괴물입니다.
기본적인 드라이브의 타입은 GetDriveType API로 알수 있습니다.
이곳 '델파이 팁모아, 나이렉스(한델)'에 가보시면 아시겠지만
드라이브 타입, s/n얻기,
CDD같은경우 안에 든 CD의 포맷과, 트랙정보, 이상한(^^) 열고 닫기등..
방대한 내용이 있습니다..
ps.
참고로(^^) 제일빨리 컴의 논리드라이브를 알아내는방법으로,
GetLogicalDrives라는 API가 있습니다.
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
이중락
•
1999.08.10 19:37
1
COMMENTS
/
0
LIKES
폼위의 수많은 VCL속성을 효율적으로 변경
안치봉
•
1999.08.10 19:56
for i := 0 to ControlCount - 1 do begin if Controls[i] is TLabel then TLabel(Controls[i]).V...
발도제
•
1999.08.10 19:32
2
COMMENTS
/
0
LIKES
프린트 스풀러 제어방법! 답이 없어 제가 연구한 결과를 올립니다.
김영대
•
1999.08.10 20:58
좋은 소스를 공개해 주셔서 감사합니다 하시는일 잘 되시길 바랍니다
발도제
•
1999.08.10 21:50
김영대 께서 말씀하시기를... > 좋은 소스를 공개해 주셔서 감사합니다 > 하시는일 잘 되시길 바랍니다 ...
오세웅
•
1999.08.10 19:30
1
COMMENTS
/
0
LIKES
타이틀바 없는 폼 이동및 클릭
구창민
•
1999.08.10 22:40
오세웅 께서 말씀하시기를... > 안녕하세요 > 타이틀바 없는 폼의 이동에 대해서는 이곳에서 찾을 > 수 ...
이현철
•
1999.08.10 18:04
4
COMMENTS
/
0
LIKES
메모 컴포넌트에서 빈줄 삭제..
고구마
•
1999.08.10 19:22
이현철 께서 말씀하시기를... > 안녕하세요. > 메모의 내용을 스트링 배열에다 저장한후 나중에 다시 불...
이현철
•
1999.08.10 20:29
네. 답변 감사합니다. 전 메모에 있는 내용을 스트링 배열에 저장하고. 그걸 DB에 저장했거든요. 나중에 ...
고구마
•
1999.08.10 23:42
이현철 께서 말씀하시기를... > 네. 답변 감사합니다. > 전 메모에 있는 내용을 스트링 배열에 저장하고....
구창민
•
1999.08.10 22:15
이현철 께서 말씀하시기를... > 네. 답변 감사합니다. > 전 메모에 있는 내용을 스트링 배열에 저장하고....
박대석
•
1999.08.10 17:56
1
COMMENTS
/
0
LIKES
cad file display
김영대
•
1999.08.10 21:03
박대석 께서 말씀하시기를... > cad file을 델파이에서 display할 수 있는 방법이 없는지요 아래 사이...
장일형
1999.08.10 17:53
0
COMMENTS
/
0
LIKES
그림 패턴 비교??
임명숙
•
1999.08.10 08:50
1
COMMENTS
/
0
LIKES
Query로 입력을 하려고 하면 read_only 라고 나와여~~
제임스딘
•
1999.08.10 19:01
임명숙 께서 말씀하시기를... > Query로 table을 핸들링해보고자 하는 초짭니다. > Query로 입력을 해보...
이지만
•
1999.08.10 07:40
2
COMMENTS
/
0
LIKES
드라이브(Media) 찾기..
Delphi 에서 ListBOX 에 시스템에 탑재된 미디어(Floopy, HARD, CDROM.....) 을 찾아 등록하는 것을 구현하고 싶습니다. 하지만 생각처럼 그리 쉽진 않군요.. 조언 부탁합니다. 될수있으면 자세하고 쉽게 설명해 주세요.. 그럼-
김종호
•
1999.08.12 04:26
이지만 께서 말씀하시기를... > Delphi 에서 ListBOX 에 시스템에 탑재된 미디어(Floopy, HARD, CDROM.......
김정완
•
1999.08.10 11:52
이지만 께서 말씀하시기를... > Delphi 에서 ListBOX 에 시스템에 탑재된 미디어(Floopy, HARD, CDROM.......
이광주
•
1999.08.10 06:02
1
COMMENTS
/
0
LIKES
tracert의 구현방법
김영대
•
1999.08.10 21:02
이광주 께서 말씀하시기를... > tracert에서 나오는 데이터값들을 델에서 사용하고 싶습니다. > 데이터 ...
김배성
1999.08.10 05:34
0
COMMENTS
/
0
LIKES
MS-SQL 6.5 가 싫어요.~~~~~
귀염뎅이
•
1999.08.10 04:56
1
COMMENTS
/
0
LIKES
Drag&drop되는 object의 위치 추적
김영대
•
1999.08.10 20:52
귀염뎅이 께서 말씀하시기를... > 안녕하세요. > 델파이 초보입니다. > 애플리케이션 실행간에 object( ...
안갑철
•
1999.08.10 04:25
1
COMMENTS
/
0
LIKES
델파이에서 UNIX계정을 이용하여 접속하려면...?
김영대
•
1999.08.10 20:56
안갑철 께서 말씀하시기를... > 델파이 프로그램에서 사용자ID와 비밀번호를 입력받은후 > 해당 입력값을...
황하성
•
1999.08.10 03:44
1
COMMENTS
/
0
LIKES
외부프로그램 실행시 옵션 지정은 어떻게?
sunhee
•
1999.08.10 03:53
처음 프로그램 돌아갈 때 winexe("a.exe a1 a2", SW_SHOWNORMAL)이런 식으로 적어주시면 됩니다. 그...
김여정
•
1999.08.10 03:28
1
COMMENTS
/
0
LIKES
[긴급]다양한 조건+다양한결과 산출방법
조복기
•
1999.08.10 08:11
안녕하세요..조복기입니다.. 제가 이해가 잘 안가긴 하지만요 조건도 유동적이고 결과필드들도 유동...
이용일
•
1999.08.10 03:07
3
COMMENTS
/
0
LIKES
캡션바없는 폼 드래그 질문.
문보석
•
1999.08.10 19:31
이용일 께서 말씀하시기를... > 또 질문이군요..^^; > 캡션바없는 폼이 있는데요. > 이 폼 안에 Memo컴...
이용일
•
1999.08.11 03:03
문보석 께서 말씀하시기를... > 저는 씨빌더 사용자라 파스칼프로그램은 잘 모르겠구요...물론 거의 비슷...
안치봉
•
1999.08.10 03:20
글쎄요. 두가지중에 하나는 포기를 하시죠.. 아니면 3번을 택하시던지 (자세한건 나이렉스의 팁란에서 캡...
이용일
•
1999.08.10 02:57
1
COMMENTS
/
0
LIKES
파일 찾기
sunhee
•
1999.08.10 03:37
메뉴중에서요 팁모아쪽에 김영대님쪽것을 찾아보면 있습니다. 파일 찾기 검색하면 될거 같네요. 이용일...
박면구
•
1999.08.10 02:43
1
COMMENTS
/
0
LIKES
콤포넌트에 TStrings 프라퍼트 넣기 에러
김정완
•
1999.08.10 10:50
박면구 께서 말씀하시기를... > TComboBox를 상속받아서 > TComDouble 이라는 콤포넌트를 만드려고 합니...
franco97
1999.08.10 02:43
0
COMMENTS
/
0
LIKES
[출력]용지방항을 임의대로 지정하는 방법은?
궁금이
1999.08.10 01:34
0
COMMENTS
/
0
LIKES
NT에서 OLEAUT32.DLL Error
양동욱
1999.08.09 21:07
0
COMMENTS
/
0
LIKES
QReport 출력시 글자사이 간격을 늘릴수 없나요?
이지만
1999/08/10 07:40
Views
367
Likes
0
Comments
2
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> Delphi 에서 ListBOX 에 시스템에 탑재된 미디어(Floopy, HARD, CDROM.....)
> 을 찾아 등록하는 것을 구현하고 싶습니다.
>
> 하지만 생각처럼 그리 쉽진 않군요..
>
> 조언 부탁합니다. 될수있으면 자세하고 쉽게 설명해 주세요..
>
> 그럼-
저는 API를 사용하지 않고
직접 레지스트리에서 장치 디바이스를 찾는 방법으로 구현해 보았습니다.
레지스트리의 HKEY_LOCAL_MACHINEEnum 이부분에 디바이스 정보가
들어 있습니다. 이곳에서 원하는 것들을 찾을수가 있지요.
참 HKEY_DYN_DATAConfig ManagerEnum 이부분에는 현재 사용중이
디바이스들만을 찾아서 그 레지스트리 경로들을 저장하고 있습니다.
아래 소스...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, Registry, Winsock;
type
TForm1 = class(TForm)
DeviceTree: TTreeView;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
ValueList : TStrings;
SubKeys : TStrings;
function GetRegValue(hkeyRoot: HKEY; strOpenKey: String; strName: String): String;
procedure GetSubReg;
procedure SearchRegDevice;
procedure LoadHardwareType;
function IsHardwareInfo(Value: string;var hwIndex: Integer): Boolean;
procedure AnalysisList;
public
{ Public declarations }
end;
Type
HardwareInfo = record
TitleName: String;
TypeName: String;
Node: TTreeNode;
end;
var
Form1: TForm1;
hwInfo: array[0..11] of HardwareInfo;
count: Integer;
implementation
{$R *.DFM}
procedure TForm1.LoadHardwareType;
var
LoadFile: TextFile;
i: Integer;
begin
AssignFile(LoadFile, 'Hardware.txt');
FileMode := 0; // Read only
Reset(LoadFile);
while not eof(LoadFile) do
begin
Readln(LoadFile, hwInfo[count].TitleName);
Readln(LoadFile, hwInfo[count].TypeName);
Inc(count);
end;
for i:=0 to count-1 do
hwInfo[i].Node := DeviceTree.Items.AddChild(DeviceTree.Items.GetFirstNode, hwInfo[i].TitleName);
end;
function TForm1.IsHardwareInfo(Value: string;var hwIndex: Integer): Boolean;
var
i: Integer;
begin
result := False;
for i:=0 to count-1 do
if UpperCase(Value) = UpperCase(hwInfo[i].TypeName) then
begin
hwIndex := i;
result := True;
break;
end;
end;
function TForm1.GetRegValue(hkeyRoot:HKEY;
strOpenKey: String; strName: String): String;
var
regTree: TRegistry;
begin
Try
regTree := TRegistry.Create;
regTree.RootKey := hkeyRoot;
if regTree.OpenKey(strOpenKey, False) then
result :=regTree.ReadString(strName);
Finally
regTree.Free;
end;
end;
procedure TForm1.GetSubReg;
var
regDYN, SubDyn: TRegistry;
TempList: TStrings;
value : String;
i: Integer;
begin
Try
TempList := TStringList.Create;
regDYN := TRegistry.Create;
regDYN.RootKey := HKEY_DYN_DATA;
regDYN.OpenKey('Config ManagerEnum', False);
if regDYN.HasSubKeys then
begin
regDYN.GetKeyNames(TempList);
for i:=0 to TempList.Count-1 do
begin
SubDyn := TRegistry.Create;
SubDyn.RootKey := HKEY_DYN_DATA;
SubDyn.OpenKey('Config ManagerEnum'+TempList.Strings[i], False);
Value := SubDyn.ReadString('HardWareKey');
SubKeys.Add(Value);
SubDyn.Free;
end;
end;
Finally
TempList.Free;
regDYN.Free;
end;
end;
procedure TForm1.SearchRegDevice;
var
Value: String;
i, hwIndex: Integer;
begin
for i:=0 to SubKeys.Count-1 do
begin
Value := '';
Value := GetRegValue(HKEY_LOCAL_MACHINE,
'Enum'+SubKeys.Strings[i], 'Class');
if IsHardwareInfo(Value, hwIndex) then
begin
Value := GetRegValue(HKEY_LOCAL_MACHINE,
'Enum'+SubKeys.Strings[i], 'DeviceDesc');
ValueList.AddObject(value, TObject(hwIndex));
end;
end;
end;
procedure TForm1.AnalysisList;
var
i, hwIndex: Integer;
hwTitle : String;
hwNode : TTreeNode;
begin
for i:=0 to ValueList.Count-1 do
begin
hwIndex := Integer(ValueList.Objects[i]);
DeviceTree.Items.AddChild(hwInfo[hwIndex].Node, ValueList.Strings[i]);
end;
hwNode := DeviceTree.Items.GetFirstNode;
hwNode.Expanded := True;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
ValueList := TStringList.Create;
SubKeys := TStringList.Create;
DeviceTree.Items.Add(Nil, '컴퓨터');
count := 0;
LoadHardwareType;
// 하드웨어 정보 수집
ValueList.Clear;
SubKeys.Clear;
GetSubReg;
SearchRegDevice;
AnalysisList;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ValueList.Free;
SubKeys.Free;
end;
end.
이 텍스트 파일은 읽어올 하드웨어의 종류를 담고 있습니다.
같은 폴더에 복사해서 실행하세요.. ^^;
파일명 : Hardware.txt
네트워크 어댑터
Net
디스플레이 어댑터
Display
마우스
Mouse
키보드
Keyboard
모니터
Monitor
하드 디스크
hdc
플로피 디스크
fdc
CD-ROM
CDROM
사운드 및 게임 컨트롤러
MEDIA
모뎀
Modem
포트
Ports