librarycopyhook;
uses
comserv,
copymainin』copymain.pas』;
exports
dllgetclassobject,
dllcanunloadnow,
dllregisterserver,
dllunregisterserver;
begin
end.
//////////
unitcopymain;
inte***ce
useswindows,comobj,shlobj;
type
tcopyhook=class(tcomobject,icopyhook)
protected
functioncopycallback(wnd:hwnd;wfunc,wflags:uint;pszsrcfile:pansichar;
dwsrcattribs:dword;pszdestfile:pansichar;dwdestattribs:dword):uint;stdcall;
end;
tcopyhookfactory=class(tcomobjectfactory)
protected
functiongetprogid:string;override;
procedureapproveshellextension(register:boolean;constclsid:string);
virtual;
public
procedureupdateregistry(register:boolean);override;
end;
implementation
usescomserv,sysutils,registry;
//file://當windows外殼程式執行資料夾或者印表機埠操作時,copycallback
//file://方法就會被呼叫。
functiontcopyhook.copycallback(wnd:hwnd;wfunc,wflags:uint;
pszsrcfile:pansichar;dwsrcattribs:dword;pszdestfile:pansichar;
dwdestattribs:dword):uint;
const
fo_copy=2;
fo_delete=3;
fo_move=1;
fo_rename=4;
varsop:string;
begin
casewfuncof
fo_copy:sop:=format(』你確定要將%s拷貝到%s嗎?』,[pszsrcfile,pszdestfile]);
fo_delete:sop:=format(』你確定要將%s刪除嗎?』,[pszsrcfile]);
fo_move:sop:=format(』你確定要將%s轉移到%s嗎?』,[pszsrcfile,pszdestfile]);
fo_rename:sop:=format(』你確定要將%s重新命名為%s嗎?』,[pszsrcfile,pszdestfile]);
else
sop:=format(』無法識別的操作**%d』,[wflags]);
end;
//提示,讓使用者決定是否執行操作
result:=messagebox(wnd,pchar(sop),
』檔案掛鉤演示』,mb_yesnocancel);
end;
functiontcopyhookfactory.getprogid:string;
begin
result:=』』;
end;
proceduretcopyhookfactory.updateregistry(register:boolean);
varclsid:string;
begin
clsid:=guidtostring(classid);
inheritedupdateregistry(register);
approveshellextension(register,clsid);
ifregisterthen
//file://將clsid加入到登錄檔的copyhookhandlers中
createregkey(』directory/shellex/copyhookhandlers/』+classname,』』,
clsid)
else
deleteregkey(』directory/shellex/copyhookhandlers/』+classname);
end;
proceduretcopyhookfactory.approveshellextension(register:boolean;
constclsid:string);
const
sapprovekey=』software/microsoft/windows/currentversion/shellextensions/approved』;
begin
withtregistry.createdo
tryrootkey:=hkey_local_machine;
ifnotopenkey(sapprovekey,true)thenexit;
ifregisterthenwritestring(clsid,description)
elsedeletevalue(clsid);
finally
free;
end;
end;
const
clsid_copyhook:tguid=』』;
libid_copyhook:tguid=』』;
initialization
tcopyhookfactory.create(comserver,tcopyhook,clsid_copyhook,
』cr_copyhook』,』檔案操作掛鉤演示』,cimultiinstance,tmapartment);
end.
Linux防止檔案或資料夾被惡意刪除
在linux系統中,有個chattr命令,可修改檔案或資料夾的屬性。如果平時有些重要檔案需要防止被惡意刪除,可使用此命令實現。chattr rv v 版本編號 屬性 檔案或目錄 假如 important是個放置重要檔案的資料夾,可使用下面命令實現 sudo chattr r a important上...
git 恢復被刪除的檔案
剛接觸 git 的時候,當碰到之前刪除某個檔案 比如 後面開發又需要恢復的時候,會採取非常笨的方法。從某乙個檔案存在的 commit 切換出乙個新的分支,再將需要的某個檔案拷貝出來。像是類的檔案有時候會直接叫 ui 設計師再發乙份。這種需要恢復檔案情況不多時 好像確實也不是太多,目前本人遇到這種情況...
SQL SERVER 日誌檔案被刪除後的修復
今天一時間著急把sqlserver資料庫的日誌檔案給刪除了,結果怎麼附加也附加不上來了。急得只出汗,後來找到了下面這篇文章,試了試,還是真管用,謝天謝地。現 下來 sql server 修復,sql恢復,誤刪除表,sql 資料恢復,sql server 資料庫恢復修復,sql 找回業務。使用資料庫的...