2017-01-27 5 views
-1

내 프로그램에는 사용자가 모든 종류의 로컬 문서를 열 수있는 TWebBrowser가 있습니다. 예를 들어, Word 문서가 TWebBrowser 대신 (즉, Internet Explorer에서) Word에서 열리지 않게하려면이 명령으로 .reg 파일을 실행하여 레지스트리에서 수정을 성공적으로 사용하십시오.델파이로 레지스트리에 dword 값을 입력하십시오.

이 코드 80000024

내가 델파이 프로그램 자체에서 그 명령을 소개하려합니다 : :

[HKEY_LOCAL_MACHINE \ 소프트웨어 \ 클래스 \ Word.Document.12] "BrowserFlags"= DWORD를

procedure RegOpenExplorer; 
var 
    reg: TRegistry; 
begin 
    reg:= TRegistry.Create; 
    try 
    reg.RootKey:=HKEY_LOCAL_MACHINE; 
    reg.OpenKey('SOFTWARE\Classes\Word.Document.12\', true); 
    reg.WriteInteger('BrowserFlags',80000024); 
    reg.CloseKey; 
    finally 
    reg.Free; 
    end; 
end; 

작동하지 않습니다. 실제로 효과는 수정 사항을 실행 취소합니다.

성공적으로 (또는 수동) .reg 파일로 조작 할 때 는 레지스트리 키는 다음과 같습니다

:

good key

그러나 다음과 같이 나의 실패 델파이 코드로, 키가됩니다

:

bad key

차이점은 괄호 안에있는 숫자이지만 레지스트리 자체가 자동으로 소개하는 것입니다.

+4

이것은 아마도 16 진수 표현입니다. 델파이에서는 $ 80000024를 작성해야합니다. –

+0

@Uwe Raabe : 감사합니다! 그것은 이런 식으로 작동합니다! – Sierra

+0

그 변화는 프로그램에 더 많은 영향을줍니다. 문제를 올바르게 해결해야합니다. –

답변

0

.reg 파일의 숫자 값은 16 진수로 인코딩됩니다.

말했다되고 그건
reg.WriteInteger('BrowserFlags', $80000024); 

, 더 중요한 것은 당신이 HKEY_LOCAL_MACHINE에 작성하는 점에 유의하고 : 당신이 WriteInteger()에 리터럴 정수를 전달하고 있기 때문에, 당신은 컴파일러 16 진수로 해석 할 수있는 $으로 접두사 필요 KEY_ALL_ACCESS 액세스 권한 (TRegistry이 사용하는 기본 액세스 권한)으로 키를 여는 중입니다. 관리자로 승격 된 앱을 아직 실행하지 않은 경우 앱을 실행해야합니다. TRegistry.Access 속성을 KEY_SET_VALUE으로 설정하고 대신 HKEY_CURRENT_USER으로 작성해야합니다.

procedure RegOpenExplorer; 
var 
    reg: TRegistry; 
begin 
    reg := TRegistry.Create(KEY_SET_VALUE); 
    try 
    reg.RootKey := HKEY_LOCAL_MACHINE; // or HKEY_CURRENT_USER 
    if reg.OpenKey('SOFTWARE\Classes\Word.Document.12\', true) then 
    try 
     reg.WriteInteger('BrowserFlags', $80000024); 
    finally 
     reg.CloseKey; 
    end; 
    finally 
    reg.Free; 
    end; 
end; 
+0

우수 : "보호 된 데이터를 설정하지 못했습니다."라는 오류도 때로는 해결되었습니다. – Sierra