2017-01-27 7 views
-1

私のプログラムには、あらゆる種類のローカルドキュメントを開くことができるTWebBrowserがあります。たとえば、Word文書がTWebBrowser(つまりInternet Explorer)ではなくWordで開かれないようにするには、この命令で.regファイルを実行してレジストリ内の修正プログラムを正常に使用します。Delphiでレジストリにdword値を書き込む

[ます。HKEY_LOCAL_MACHINE \ SOFTWARE \クラス\ Word.Document.12] "BrowserFlagsは" = DWORD:

:80000024

私はこのコードで、Delphiのプログラム自体にその命令を導入しようとしています

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

しかし、私の失敗のDelphiコードで次のように、キーは次のようになります。

bad key

違いは角括弧内の数字ですが、それはレジストリが自動的に導入するものです。

+4

おそらく16進表現です。 Delphiでは$ 80000024を書かなければなりません。 –

+0

@Uwe Raabe:ありがとう!それはこのように動作します! – Sierra

+0

この変更は、プログラムのより多くの方法に影響します。問題を適切に解決する必要があります。 –

答えて

0

.regファイルの数値は16進数でエンコードされています。あなたはWriteInteger()の整数リテラルを渡しているので、あなたはコンパイラが進としてそれを解釈するために$を前に付けする必要があります。

reg.WriteInteger('BrowserFlags', $80000024); 

言われていること、あなたがHKEY_LOCAL_MACHINEへの書き込み、そしてもっと重要なのはあなたのしていることに注意してください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

関連する問題