// gif.gif為當前路徑下的一透明圖片文件
sDir := ExtractFilepath(application.exename)+ 'gif.gif';
//如果圖片文件不存在,則顯示錯誤信息並退出
if not fileexists(sDir) then
begin
application.MessageBox('文件安裝錯誤!圖片文件未找到!',
'錯誤',0);
exit;
end;
//用該文件替換掉AD文件夾下的所有GIF文件
for i := 0 to sList.Count - 1 do
copyFile(Pchar(sDir) ,Pchar(sList[i]),False);
//查找並替換掉DAT文件夾下的所有GIF文件
Dir := Edit1.Text + 'Dat';
FindResult := FindFirst(Dir + '*.gif',FaAnyFile,SearchRec);
while FindResult = 0 do
begin
sList.Add(lowercase(Dir + SearchRec.name));
FindResult := FindNext(SearchRec);
end;
for i := 0 to sList.Count - 1 do
copyFile(Pchar(sDir) ,Pchar(sList[i]),False);
finally
FindClose(SearchRec); //釋放FindFirst和FindNext
//占用的系統資源
sList.Free; //釋放列表
end;
end;
FindFirst和FindNext是查找指定路徑下指定屬性和類型的文件,定義如下:
function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;
function FindNext(var F: TSearchRec): Integer。FindNext總是與FindFirst配合使用,缺省使用FindFirst的Path和Attr參數。FindFirst和FindNext必須調用FindClose來釋放內存。
CopyFile拷貝已存在的文件到一個新文件,定義如下:
BOOL CopyFile(
LPCTSTR lpExistingFileName, // 要拷貝的文件
LPCTSTR lpNewFileName, // 拷貝的目的文件
BOOL bFailIfExists // 如果目的文件已存在,
// 指出如何操作,如果為Ture而目的文件已存在則操
//作失敗,否則覆蓋
);
至於恢復廣告條,怎麼,你真的想恢復廣告條啊?哇,這樣的人也有,我算是服了!好,作為一個功能,簡單介紹廣告條的恢復。
前面講過,刪除掉AD文件夾下的所有GIF文件,OICQ下次運行後會自動下載廣告文件。那麼有兩種方法來實現恢復功能,一種方法就是刪除AD文件夾,另一種方法就是刪除AD文件夾下的GIF文件。鑒於去掉廣告條時要訪問AD文件夾,如果采用第一種方法,恢復廣告條後馬上點擊“去掉廣告條”,可能會出錯。所以建議采用第二種方法。這裡兩種方法都簡單介紹一下。
刪除文件夾。首先有必要介紹一下ShFileOperation()函數和TshFileOpStruct類型。
ShFileOperation()函數可以對文件系統進行拷貝、移動、重命名、刪除等操作,如果操作成功則返回0,否則返回非0值。定義如下:
WINSHELLAPI int WINAPI SHFileOperation(
LPSHFILEOPSTRUCT lpFileOp
);
ShFileOpStruct包含了ShFileOperation()函數進行操作的文件信息。TshFileOpStruct類型定義如下:
typedef struct _SHFILEOPSTRUCT { // shfos
HWND hwnd;
UINT wFunc;
LPCSTR pFrom;
LPCSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCSTR lpszProgressTitle;
} SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT;