즐겨찾기 리스트를 리스트박스로 출력하기
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;
'IT-개발,DB' 카테고리의 다른 글
[개발/LabVIEW] 센서의 기초부터 알아보는 측정시스템 구성 노하우 (0) | 2015.09.10 |
---|---|
[개발/델파이] TAdvStringGrid에 Combobox 사용하는 방법 (0) | 2015.08.27 |
[SQL/Access] MS Access SQL IIF 함수 - SQL Case 함수 (0) | 2015.08.27 |
[개발] 도움말 오류 : 지원되지 않는 도움말 (0) | 2015.08.25 |
[개발/알고리즘] 피보나치 수열의 합 구하기 (0) | 2015.06.02 |
댓글