2012-01-24 9 views
1

OSに基づいてレジストリに書きたいと思います。私は場所にOS検出機能を持っていて、レジストリセクションでチェック機能を置くことができることを発見したので、次試してみました:条件に基づいてレジストリに書き込んでください

Root: HKLM; SubKey: Software\Microsoft\Windows; ValueType: dword; ValueName: Test; ValueData: 1; Flags: createvalueifdoesntexist; Check: IsWindows7 

しかし、それは動作しませんでした、私はwin7のとWinXPの上に設置する場合ことを意味し、それ両方の場合にレジストリに値を書き込んだ。

function IsWindows7(): Boolean; 
var 
    Version: TWindowsVersion; 
begin 
    GetWindowsVersionEx(Version); 

    // Windows 7 version is 6.1 (workstation) 
    if (Version.Major = 6) and 
    (Version.Minor = 1) and 
    (Version.ProductType = VER_NT_WORKSTATION) 
    then 
    Result := True 
    else 
    Result := False; 
end; 

任意のアイデア/提案:

ここでOSを検出するためのコードはありますか?

+0

あなたの 'IsWindows7'チェック機能のコードを見せてください。なぜ、標準の 'MinVersion'と' OnlyBelowVersion'パラメータを使用しないのですか? – Deanna

+0

返信いただきありがとうございます!標準のパラメータを使用することはできますが、どこかでテストしてからテストに基づいてレジストリに書き込む必要があります。私が求めているのは、与えられた行が正しいかどうかです。 –

+0

はいです。最初のコメントは正しいです、問題はIsWindows7から来るべきですので、この関数を質問に追加してください。純粋なハワードによって、Win7(6ではなく7)の正しい主要なvesrion番号をテストしますか? – az01

答えて

2

あなたのための私の解決策は、以下を参照してください。

[Registry] 

Root: HKLM; SubKey: {code:IsWindows7}; ValueType: dword; ValueName: Test; ValueData: 1; Flags: createvalueifdoesntexist; Check: IsWindows7 

[Code] 

function IsWindows7(S: String) : string; 
var 
    Version: TWindowsVersion; 
begin 

GetWindowsVersionEx(Version); 

    // Windows 7 version is 6.1 (workstation) 
    if (Version.Major = 6) and 
    (Version.Minor = 1) and 
    (Version.ProductType = VER_NT_WORKSTATION) 
    then 
    Result := '<registry path for win 7>' 
else 
    Result := '<registry path for other win os >'; 

end; 

ハッピーコーディング!

関連する問題