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

在註冊時出現0x80004005錯誤,不知道怎樣解決

 
ericlaw
一般會員


發表:1
回覆:1
積分:0
註冊:2004-08-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-09-22 15:53:18 IP:60.248.xxx.xxx 未訂閱

在註冊時出現0x80004005錯誤,不知道怎樣解決

附上source 有人可以幫忙看一下錯在那裡嗎錯在那麼嗎?

unit ShellExecuteHookObj;

{$WARN SYMBOL_PLATFORM OFF}

interface
uses
Windows, ActiveX, ComObj, ShlObj, ShellAPI,SysUtils;

type
TTShellExecuteHook = class(TComObject, IShellExecuteHook)
protected
function Execute(var ShellExecuteInfo: TShellExecuteInfo): HResult; stdcall;
end;
const
Class_TShellExecuteHook: TGUID = '{935FA400-243D-11D3-B06E-857B2AE2BE64}';
// ShellExecuteHooksKey = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks';


implementation
uses ComServ;
const
ShellExecuteHooksKey = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks';
resourcestring
sCreateRegKeyError = '創建註冊表項失敗';

type
TShellExComObjectFactory = class(TComObjectFactory)
public
procedure UpdateRegistry(Register: Boolean); override;
end;
{ TShellExComObjectFactory }

function TTShellExecuteHook.Execute(var ShellExecuteInfo: TShellExecuteInfo): HResult;
var
FileName: string;
begin
Result := S_FALSE;
with ShellExecuteInfo do
begin
FileName := UpperCase(ExtractFileName(lpFile));
if Pos('NOTEPAD', FileName) = 1 then
begin
Result := S_OK;
hInstApp := 32;
MessageBox(Wnd, '不允許記事本運行!', '錯誤', MB_OK or MB_ICONERROR);
end;
end;
end;
{
//也可以將execute改寫為下面代碼,看看文件裡都記錄了些什麼東東
function TTShellExecuteHook.Execute(var ShellExecuteInfo: TShellExecuteInfo): HResult;
var
FileStream: TFileStream;
a:TStringList;
S:string;
begin
Result := S_FALSE;
with ShellExecuteInfo do
begin
FileStream:=TFileStream.Create('c:\shellexecutehook.txt',fmopenwrite);
S:=string(lpVerb) ':' string(lpFile) DateTimeToStr(Now) #13#10;
FileStream.Seek(FileStream.Size,soFromBeginning);
FileStream.Write(PChar(S)^,Length(S));
FileStream.Free;
end;
end;
}


{
procedure TIeKavassComObjectFactory.UpdateRegistry(Register: Boolean);
begin
if Register then
SetRegistryString(ShellExecuteHooksKey,GUIDToString(Class_IeKavassObj),'IE衛士')
else
RegDeleteValue(ShellExecuteHooksKey,GUIDToString(Class_IeKavassObj));
inherited UpdateRegistry(Register);
end;

initialization
TIeKavassComObjectFactory.Create(ComServer, TIeKavassObj, Class_IeKavassObj,
'IeKavassObj', 'IE衛士', ciMultiInstance, tmApartment);


}
procedure TShellExComObjectFactory.UpdateRegistry(Register: Boolean);
const
hellExecuteHooksKey = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks';
var
Handle: HKey;
Status, Disposition: Integer;
ClassID: string;
begin
ClassID := GUIDToString(Class_TShellExecuteHook);


if Register then
begin
Status := RegCreateKeyEx(HKEY_LOCAL_MACHINE, PChar(ShellExecuteHooksKey), 0, 'ShellExecute hook sample',
REG_OPTION_NON_VOLATILE, KEY_READ or KEY_WRITE, nil, Handle, @Disposition);
if Status = 0 then
begin
Status := RegSetValueEx(Handle, PChar(ClassID), 0, REG_SZ,
PChar(Description), Length(Description) 1);
RegCloseKey(Handle);
end;
end else
begin
Status := RegOpenKeyEx(HKEY_LOCAL_MACHINE, PChar(ShellExecuteHooksKey), 0,
KEY_READ or KEY_WRITE, Handle);
if Status = 0 then
begin
Status := RegDeleteValue(Handle, PChar(ClassID));
RegCloseKey(Handle);
end;
end;

if Status <> 0 then raise EOleError.Create(sCreateRegKeyError);
inherited UpdateRegistry(Register);
end;

initialization
TShellExComObjectFactory.Create(ComServer, TTShellExecuteHook, Class_TShellExecuteHook,
'TShellExecuteHook', 'ShellExecute hook sample', ciMultiInstance, tmApartment);
end.


附加檔案:shell.ZIP
系統時間:2024-04-20 9:35:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!