2011년 3월 15일 화요일

즐겨찾기 리스트를 리스트박스로 출력하기

uses 에 ShlObj 추가.

// 즐겨찾기를 TStrings 형태로 반환functionGetIEFavorites(constfavpath: String): TStrings;
var Str: TStrings;
SearchRec: TSearchRec;
Path, Dir, FileName: String;
Buffer: array[0..2047] ofChar;
Found: Integer;

begin
Str:=TStringList.Create;
// 일단 .URL 파일을 뒤지고
Path:=FavPath+'\*.url';
Dir:=ExtractFilePath(Path);
Found:=FindFirst(Path, faAnyFile, SearchRec);
whileFound=0do 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);
whilefound=0do begin
if((SearchRec.Attr andfaDirectory)>0) and(SearchRec.Name[1]<>'.') then begin
Str.AddStrings(GetIEFavorites(Dir+'\'+SearchRec.Name));
end;
Found:=FindNext(SearchRec);
end;

FindClose(SearchRec);
Result:=Str;
end;



사용법은 이렇다.
이 함수로 굴리면 리스트박스에 URL만 자동으로 추가됨.

procedureTForm1.Button1Click(Sender: TObject);
var pIDList: PItemIDList;
FavPath: Array[0..MAX_PATH] ofChar;

begin
// pIDList에 CSIDL_FAVORITES(즐겨찾기폴더)에 해당하는 포인터 지정
ifSHGetSpecialFolderLocation(Handle, CSIDL_FAVORITES, pIDList)=S_OK then begin
// pIDList에 있는 Path 경로를 FavPath 에 대입
ifSHGetPathFromIDList(pIDList, FavPath) then begin
//ShowMessage(FavPath);
ListBox1.Items:=GetIEFavorites(StrPas(FavPath));
end
else
ShowMessage('Error: SHGetPathFromIDList');
end
else
ShowMessage('Error<>S_OK');
end;

댓글 없음:

댓글 쓰기