線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1237
推到 Plurk!
推到 Facebook!

用Delphi將IE收藏夾導出為HTML文件

 
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-05 11:36:49 IP:220.160.xxx.xxx 未訂閱
用Delphi將IE收藏夾導出為HTML文件    廣東南海市公安局電腦安全監察股 喻凱    上網時間長了,總會保存一些好的網站位址,以備將來訪問。但是,如果收藏機網址太多,選擇的時候反而很費勁。這時候,將這些收藏夾導出為一個HTML檔,然後將它設置為流覽器默認首頁就成為一個不錯的選擇。這裏,我們用Delphi實現將這個功能。    一、程式功能分析 1、將IE收藏夾導出為HTML檔,要求不打亂IE收藏夾原來網址的分類和級別關係; 2、將檔導出到Windows的桌面,並將其設置為流覽器默認首頁;    二、程式具體實現 1、取得收藏夾資訊,將其轉化為HTML代碼 收藏夾直接對應於windows目錄的Favorites文家夾檔夾,這個檔夾中,每一個子檔夾就是收藏夾中的一個分類,檔夾中的每一個尾碼為.URL的檔就是收藏夾的一個收藏。打開一個.名為“電腦世界報”的.URL檔,其內容如下: [InternetShortcut] URL=http://www.ccw.com.cn 原來,“電腦世界報”的這個收藏的網址就是檔中的URL鍵值。 現在,我們明白了,要導出收藏夾,只要取得Favorites檔夾的所有檔案名和檔中的URL鍵值就可以了。我們用一個函數來實現: function Tform1.GetIEFavourites(const favpath: string): TStrings; var searchrec: TSearchrec; str: TStrings; 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  SetString(filename, Buffer, GetPrivateProfileString('InternetShortcut', PChar('URL'), nil, Buffer, SizeOf(Buffer), PChar(dir + searchrec.Name))); //構造一個收藏的鏈結,每個鏈結加入一個換行控制符 str.Add('' copy(searchrec.Name,1,length(searchrec.Name)-4) '' '
'); 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 //在HTML中加入一個換行控制符 str.add('
'); str.add(searchrec.name '
'); str.AddStrings(GetIEFavourites(dir '\' searchrec.Name)); end; found := FindNext(searchrec); end; FindClose(searchrec); Result := str; end; 在這個函數中,參數favpath是收藏夾的具體路徑;函數直接返回一段HTML代碼。以上代碼中,有兩個函數要必須注意: (1)GetPrivateProfileString函數 功能是取得一個INI檔的鍵值,在以上代碼中,是取得URL鍵值。函數如下: DWORD GetPrivateProfileString( LPCTSTR lpAppName, // points to section name LPCTSTR lpKeyName, // points to key name LPCTSTR lpDefault, // points to default string LPTSTR lpReturnedString, // points to destination buffer DWORD nSize, // size of destination buffer LPCTSTR lpFileName // points to initialization filename ); 參數解釋: lpAppName:INI檔的“節”,代碼中為“InternetShortcut”; lpKeyName:INI檔lpAppName節中的“鍵”,代碼中為“URL”; lpReturnedString:默認返回值; nSize:緩衝大小; lpFileName:INI檔案名,代碼中為每一個URL檔; (2)copy函數 功能是拷貝字串的一部分,在以上代碼中是取得URL檔的檔案名,也就是收藏夾中的單個收藏名;函數如下: function Copy(S; Index, Count: Integer): string; 參數解釋: S:源字串,代碼中為URL檔案名(帶尾碼); Index:拷貝的開始位置,代碼中為S字串的開始; Count:要拷貝的字串個數,代碼中為URL檔案名長減4,目的是去掉URL檔案名的尾碼“.URL”; 2、取得的資訊保存為HTML檔,並將其設為流覽器首頁 為了便於理解,程式中首先將取得的收藏夾資訊導入到一個Richedit中,然後加入HTML檔的頭尾資訊(可以不要)。這樣做還有一個好處是可以用戶可以直接修改要生成檔的HTML源代碼。 導入Richedit的程式碼如下: procedure TForm1.Button1Click(Sender: TObject); var pidl: PItemIDList; FavPath: array[0..MAX_PATH] of char; begin SHGetSpecialFolderLocation(Handle, CSIDL_FAVORITES, pidl); SHGetPathFromIDList(pidl, favpath); //加入HTML檔頭資訊 memo1.Lines.Add('<html>'); memo1.Lines.Add('<head><Title>我的收藏夾</Title></head>'); memo1.Lines.Add('<Body bgcolor="white">'); memo1.Lines.Add('

我的收藏夾

'); memo1.Lines.Add('

'); //取得收藏夾資訊 memo1.Lines.add(GetIEFavourites(StrPas(FavPath)).gettext); //加入HTML檔尾資訊 memo1.Lines.Add('</BODY></HTML>'); button2.Enabled:=true; showmessage('代碼生成完成!'); end; 在以上代碼中,有兩個函數要注意: (1)SHGetSpecialFolderLocation 此函數的功能是取得系統特定目錄的路徑;函數如下: WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation(; HWND hwndOwner, int nFolder, LPITEMIDLIST *ppidl ); 參數解釋: hwndOwner:HWND信息; nFolder:需要取得的路徑的代碼,程式中為CSIDL_FAVORITES收藏夾路徑; *ppidl:路徑保存指標; (2)SHGetPathFromIDList 此函數從指標取得路徑資訊;函數如下: WINSHELLAPI BOOL WINAPI SHGetPathFromIDList( LPCITEMIDLIST pidl, LPSTR pszPath ); 參數解釋: pidl:指標資訊,程式中從SHGetSpecialFolderLocation取得; pszPath:路徑保存字串,程式中為favpath; 3、導出檔,並設置其為流覽器首頁 procedure TForm1.Button2Click(Sender: TObject); var Reg: TRegistry; deskpath:string; begin //取得桌面路徑 Reg := TRegistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', false) then deskpath:=Reg.readString('Desktop'); finally Reg.CloseKey; Reg.Free; inherited; end; //設為首頁 Reg := TRegistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKey('Software\Microsoft\Internet Explorer\Main', false) then Reg.writeString('Start Page',deskpath '\我的收藏夾.htm'); finally Reg.CloseKey; Reg.Free; inherited; end; //將文件導出到桌面 memo1.Lines.SaveToFile(deskpath '\我的收藏夾.htm'); showmessage('檔導出完成!'); end; 以上代碼從註冊表獲得Windows桌面路徑,然後輸出檔,並將此檔設置為流覽器首頁。設置為流覽器首頁的實現就是修改註冊表:“HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main”中的鍵值“Start Page”就可以了。 三、總結與啟示 看了以上代碼,我們可以得到一些編程思路如:遍曆檔,讀寫註冊表等。如果仔細想想,我們還可以發現怎樣將一個網址直接加入收藏夾的思路!
附加檔案:43136_Demo.rar
系統時間:2024-05-18 14:31:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!