2012-01-24 6 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)의 올바른 주요 버전을 테스트합니까? – 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; 
코딩

해피!