uses 에 ShlObj 추가.
// 즐겨찾기를 TStrings 형태로 반환
function GetIEFavorites(const favpath: String): TStrings;
var
Str: TStrings;
SearchRec: TSearchRec;
Path, Dir, FileName: String;
Buffer: array [0..2047] of Char;
Found: Integer;
begin
Str:=TStringList.Create;
// 일단 .URL 파일을 뒤지고
Path:=FavPath+'\*.url';
Dir:=ExtractFilePath(Path);
Found:=FindFirst(Path, faAnyFile, SearchRec);
while Found=0 do begin
// Buffer 의 내용을 GetPrivateProfileString 길이만큼 FileName 으로 복사
SetString(
FileName,
Buffer,
// INI 형식의 파일에서 특정 Key 읽어오기
// 즐겨찾기 파일인 .URL도 INI 형식으로 저장되어 있음.
GetPrivateProfileString('InternetShortcut', {대분류}
PChar('URL'), {키 이름}
nil, {Default 값}
Buffer, {내용을 복사할 버퍼}
SizeOf(Buffer), {복사할 크기}
PChar(Dir+SearchRec.Name)) {읽어올 파일 경로}
);
Str.Add(FileName);
Found:=FindNext(SearchRec);
end;
// 디렉토리일 경우엔 재귀 호출로 파고 들어감
Found:=FindFirst(Dir+'\*.*', faAnyFile, SearchRec);
while found=0 do begin
if ((SearchRec.Attr and faDirectory)>0) and (SearchRec.Name[1]<>'.') then begin
Str.AddStrings(GetIEFavorites(Dir+'\'+SearchRec.Name));
end;
Found:=FindNext(SearchRec);
end;
FindClose(SearchRec);
Result:=Str;
end;
사용법은 이렇다.
이 함수로 굴리면 리스트박스에 URL만 자동으로 추가됨.
procedure TForm1.Button1Click(Sender: TObject);
var
pIDList: PItemIDList;
FavPath: Array [0..MAX_PATH] of Char;
begin
// pIDList에 CSIDL_FAVORITES(즐겨찾기폴더)에 해당하는 포인터 지정
if SHGetSpecialFolderLocation(Handle, CSIDL_FAVORITES, pIDList)=S_OK then begin
// pIDList에 있는 Path 경로를 FavPath 에 대입
if SHGetPathFromIDList(pIDList, FavPath) then begin
//ShowMessage(FavPath);
ListBox1.Items:=GetIEFavorites(StrPas(FavPath));
end
else ShowMessage('Error: SHGetPathFromIDList');
end
else ShowMessage('Error<>S_OK');
end;
'Delphi' 카테고리의 다른 글
Bitmap 의 구조 (0) | 2009.04.18 |
---|---|
[Delphi] 시스템 경로를 받아오는 방법 (0) | 2009.04.18 |
[Delphi] HWND로 ClassName 얻어오기 (0) | 2009.04.18 |
[Delphi] 프로세스의 우선순위 출력 (0) | 2009.04.18 |
[Delphi] 프로세스 우선순위 올리기 (0) | 2009.04.18 |