Q&A

  • 드라이브(Media) 찾기..
Delphi 에서 ListBOX 에 시스템에 탑재된 미디어(Floopy, HARD, CDROM.....)

을 찾아 등록하는 것을 구현하고 싶습니다.



하지만 생각처럼 그리 쉽진 않군요..



조언 부탁합니다. 될수있으면 자세하고 쉽게 설명해 주세요..



그럼-

2  COMMENTS
  • Profile
    김종호 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

  • Profile
    김정완 1999.08.10 11:52
    이지만 께서 말씀하시기를...

    > Delphi 에서 ListBOX 에 시스템에 탑재된 미디어(Floopy, HARD, CDROM.....)

    > 을 찾아 등록하는 것을 구현하고 싶습니다.

    >

    > 하지만 생각처럼 그리 쉽진 않군요..

    >

    > 조언 부탁합니다. 될수있으면 자세하고 쉽게 설명해 주세요..

    >

    > 그럼-



    안녕하세요 ^^; 괴물입니다.



    기본적인 드라이브의 타입은 GetDriveType API로 알수 있습니다.



    이곳 '델파이 팁모아, 나이렉스(한델)'에 가보시면 아시겠지만

    드라이브 타입, s/n얻기,

    CDD같은경우 안에 든 CD의 포맷과, 트랙정보, 이상한(^^) 열고 닫기등..

    방대한 내용이 있습니다..



    ps.

    참고로(^^) 제일빨리 컴의 논리드라이브를 알아내는방법으로,

    GetLogicalDrives라는 API가 있습니다.



    • 안치봉
      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 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
    • 김영대
      1999.08.10 21:03
      박대석 께서 말씀하시기를... > cad file을 델파이에서 display할 수 있는 방법이 없는지요 아래 사이...
    • 제임스딘
      1999.08.10 19:01
      임명숙 께서 말씀하시기를... > Query로 table을 핸들링해보고자 하는 초짭니다. > Query로 입력을 해보...
    • 이지만
    • 1999.08.10 07:40
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김종호
      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
    • 김영대
      1999.08.10 21:02
      이광주 께서 말씀하시기를... > tracert에서 나오는 데이터값들을 델에서 사용하고 싶습니다. > 데이터 ...
    • 김영대
      1999.08.10 20:52
      귀염뎅이 께서 말씀하시기를... > 안녕하세요. > 델파이 초보입니다. > 애플리케이션 실행간에 object( ...
    • 김영대
      1999.08.10 20:56
      안갑철 께서 말씀하시기를... > 델파이 프로그램에서 사용자ID와 비밀번호를 입력받은후 > 해당 입력값을...
    • 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
    • 김정완
      1999.08.10 10:50
      박면구 께서 말씀하시기를... > TComboBox를 상속받아서 > TComDouble 이라는 콤포넌트를 만드려고 합니...