2017-04-18 18 views
0

現在使用しているWindows OSが有効になっているかどうかをユーザーに知らせるC++関数を記述しようとしています。WindowsがC++でアクティブになっているかどうかをプログラムで確認する

私は同様の質問Programmatically check if Windows 7 is activatedを見つけましたが、この回答にはUID引数が必要です。私は、ユーザーが引数をまったく入力する必要はありません。

WindowsがC++でアクティブになっているかどうかをプログラムで確認するにはどうすればよいですか?

答えて

3
#define _WIN32_WINNT 0x600 

#include <iostream> 
#include <windows.h> 
#include <slpublic.h> 


/*' 
From: C:/Windows/System32/SLMGR.vbs 


' Copyright (c) Microsoft Corporation. All rights reserved. 
' 
' Windows Software Licensing Management Tool. 
' 
' Script Name: slmgr.vbs 
' 
' WMI class names 
private const ServiceClass       = "SoftwareLicensingService" 
private const ProductClass       = "SoftwareLicensingProduct" 
private const TkaLicenseClass       = "SoftwareLicensingTokenActivationLicense" 
private const WindowsAppId       = "55c92734-d682-4d71-983e-d6ec3f16059f" 
*/ 


/** Use the WindowsAppId above to check if Windows OS itself is Genuine. **/ 
bool isGenuineWindows() 
{ 
    //WindowsAppId 
    unsigned char uuid_bytes[] = {0x35, 0x35, 0x63, 0x39, 0x32, 0x37, 0x33, 0x34, 0x2d, 0x64, 0x36, 
           0x38, 0x32, 0x2d, 0x34, 0x64, 0x37, 0x31, 0x2d, 0x39, 0x38, 0x33, 
           0x65, 0x2d, 0x64, 0x36, 0x65, 0x63, 0x33, 0x66, 0x31, 0x36, 0x30, 
           0x35, 0x39, 0x66}; 

    GUID uuid; 
    SL_GENUINE_STATE state; 

    UuidFromStringA(uuid_bytes, &uuid); 
    SLIsGenuineLocal(&uuid, &state, nullptr); 
    return state == SL_GEN_STATE_IS_GENUINE; 
} 

int main() 
{ 
    std::cout<<isGenuineWindows(); 
    return 0; 
} 

リンクに対して:librpcrt4.alibslwga.a

+0

するWindowsのすべてのバージョンのため、この作品? – antman1p

+0

@ antman1pいいえこれはVista +、Vista、Win7、Win8、Win8.1、Win10でのみサポートされています。私はWin10とWin8、それをテストしました。私はWin7でそれをテストしていないが、私はそれが動作することを100%確信しています。 – Brandon

関連する問題