::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2004-08-06 15:23:25, Hit : 4420, Vote : 1189
 http://www.howto.pe.kr
 Type Library 목록 구하기

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ActiveX, ComObj, ComConst, registry, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure tlibcallback(guid:TGuid; const version, tlibname, filename: string; lcid:DWORD);
  end;

type
  TEnumTypeLibrariesCallback = procedure(guid:TGuid; const version, tlibname, filename:string; Lcid:DWORD) of object;
  procedure EnumTypeLibraries(callback:TEnumTypeLibrariesCallback; const UNCName:string='');

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure EnumTypeLibraries2(callback:TEnumTypeLibrariesCallback; R:TRegistry);
var
  VersionList, KeyList, LcIdList: TStringList;
  i, j, k, code : Integer;
  lcid : DWORD;
  key, tlibname, filename : string;
  guid : TGUID;
begin
  KeyList := TStringList.Create;
  VersionList := TStringList.Create;
  LcIdList := TStringList.Create;

  try
    R.OpenKey('TypeLib', False);

    R.GetKeyNames(KeyList);
    R.CloseKey;

    for i := 0 to KeyList.Count-1 do
    begin
      guid := StringToGUID(KeyList[i]);

      key := 'TypeLib\'+KeyList[i];

      R.OpenKeyReadOnly(key);

      VersionList.Clear;
      R.GetKeyNames(VersionList);
      R.CloseKey;

      for j := 0 to VersionList.Count-1 do
      begin
        R.OpenKeyReadOnly(key+'\'+ VersionList[j]);
        tlibname := R.ReadString('');
        R.GetKeyNames(LcIdList);
        R.CloseKey;

        for k := 0 to LcIdList.Count-1 do
        begin
          Val(LcIdList[k], lcid, code);
          if code = 0 then
          begin
            R.OpenKeyReadOnly(key+'\'+ VersionList[j]+'\'+LcIdList[k]+'\Win32');
            filename := R.ReadString('');
            R.CloseKey;
            callback(guid, VersionList[j], tlibname, filename, lcid);
          end;
        end;
      end;
    end;
  finally
    LcIdList.Free;
    VersionList.Free;
    KeyList.Free;
  end;
end;

procedure EnumTypeLibraries(callback:TEnumTypeLibrariesCallback; const UNCName:string);
var
  R: TRegistry;
begin
  R := TRegistry.Create(KEY_READ);
  try
    R.RootKey := HKEY_CLASSES_ROOT;
    if UNCName <> '' then
       if not R.RegistryConnect(UNCName) then
          raise Exception.CreateFmt('Can''t connect to registry of %s', [UNCName]);
    EnumTypeLibraries2(callback, R);
  finally
    R.Free;
  end;
end;

procedure TForm1.tlibcallback(guid:TGuid; const version, tlibname, filename: string; lcid:DWORD);
begin
  Memo1.Lines.Add(GUIDToString(guid)+' ('+version+')  :  '+tlibname+ ' :'+filename);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   Memo1.Clear;
   EnumTypeLibraries(tlibcallback);  
end;

end.





651   [데이터베이스] Record number for SQL Query in DBGrid #2  김영대 2003/03/05 4397 1091
650   [윈도우즈 API] 내 프로그램의 화면을 가리는 프로그램 리스트  김영대 2004/07/24 4400 1164
649   [일반/컴포넌트] ListView 의 item 을 강제로 편집상태로 만들기  김영대 2003/03/07 4403 1129
648   [윈도우즈 API] 실행중인 모든 프로그램 Minimized 시키기  김영대 2003/03/06 4406 1175
647   [윈도우즈 API] 윈도우즈"시작" 버튼 Disable/Enable  김영대 2003/03/07 4406 1160
646   [시스템] 윈도우즈 전체의 키보드 입력 금지  김영대 2003/03/07 4408 1169
645   [윈도우즈 API] 휴지통에 파일을 버리는 법  신훈재 2003/03/10 4411 1151
644   [일반/컴포넌트] StringGrid 에 ReadOnly 제한두기  김영대 2003/03/05 4415 1248
643   [일반/컴포넌트] 문자열의 다음 찾기  김영대 2003/03/07 4415 1299
642   [윈도우즈 API] treeview 에 있는 내용을 출력하기  신훈재 2003/03/10 4416 1031
641   [일반/컴포넌트] Adobe Acrobat 이 설치되었는지 검사하기  김영대 2004/08/06 4416 1094
640   [윈도우즈 API] 외부 프로그램의 크기를 내 프로그램에서 변경하기  김영대 2003/03/07 4418 1155
639   [데이터베이스] DBGrid 의 특정필드만 Highlighting 시키기  김영대 2003/03/06 4419 1082
  [윈도우즈 API] Type Library 목록 구하기  김영대 2004/08/06 4420 1189
637   [시스템] 현재 내 PC의 비디오 정보  김영대 2003/03/04 4422 1170
636   [일반/컴포넌트] RichEdit 에서 문자(열)를 찾아 글자속성 바꾸기  김영대 2003/03/06 4422 1157
635   [일반/컴포넌트] QReport에서 출력된 자료를 Text화일로 저장  김영대 2003/03/04 4423 1219
634   [윈도우즈 API] IE의 현재 url 가져오기  김영대 2003/03/07 4426 1102
633   [윈도우즈 API] 윈도우즈 '시작' 메뉴 Refresh 시키기  김영대 2003/03/07 4427 1371
632   [시스템] 윈도우즈 재시작  김영대 2004/08/30 4428 1129
631   [윈도우즈 API] Taskbar 의 특정 위치에 popup 메뉴 띄우기  김영대 2004/07/24 4432 1160
630   [윈도우즈 API] 모서리가 둥근(rounded ends) TEdit 만들기  김영대 2003/03/07 4435 1236
629   [윈도우즈 API] 윈도우즈 "시작" 메뉴를 내 프로그램 안으로...  김영대 2003/03/07 4437 1197
628   [데이터베이스] DBGrid 에서 수직 Scroll Bar 감추기  김영대 2003/03/05 4438 1208
627   [일반/컴포넌트] TPanel 로 만든 힌트  김영대 2004/08/05 4438 1110
626   [윈도우즈 API] Hook 을 사용한 커서(캐럿)모양 바꾸기  김영대 2003/03/04 4439 1178
625   [윈도우즈 API] 클립보드의 내용을 파일로 저장하기  김영대 2003/03/04 4444 1295
624   [윈도우즈 API] 폼에 애니메이션 효과 주기  김영대 2004/07/25 4445 1187
623   [데이터베이스] 델파이 에러코드의 설명(?) 구하기  김영대 2003/03/05 4446 1075
622   [일반/컴포넌트] 제어판의 applet 리스트 (51개)  김영대 2003/03/07 4446 1075
621   [시스템] 기본 프린터가 있어야 실행하지 ?  김영대 2003/03/05 4448 1169
620   [윈도우즈 API] Windows error beep 켜기/끄기  김영대 2003/03/07 4448 1266
619   [일반/컴포넌트] 윈도우즈 제어판 화면 띄우기  김영대 2003/03/07 4451 1200
618   [윈도우즈 API] 레지스트리(registry)를 바꾼후...  김영대 2003/03/05 4452 1196
617   [시스템] 두개의 파일이 완전히 동일한지 검사하기(CRC32)  김영대 2003/03/05 4454 1048
616   [시스템] 디스플레이 어댑터 목록 구하기  김영대 2004/08/11 4454 1176
615   [일반/컴포넌트] TListView Subcolumn Sorting  김영대 2003/03/06 4457 1146
614   [일반/컴포넌트] 커서(Cursor)의 이미지 구하기  김영대 2003/03/27 4457 1231
613   [일반/컴포넌트] URL encoding 하기  김영대 2003/03/30 4457 1142
612   [일반/컴포넌트] 화면변경시 콤포넌트 위치와 크기를 조정  김영대 2003/03/06 4458 1073

[1][2][3][4][5][6][7][8] 9 [10]..[25] [다음 10개]
 

Copyright 1999-2020 Zeroboard / skin by zero