gpt4 book ai didi

c++ - 以编程方式获取 Windows 设置 |账户设置 |需要登录

转载 作者:行者123 更新时间:2023-12-02 10:16:30 25 4
gpt4 key购买 nike

尝试以编程方式获取 Windows 设置时遇到问题。我想检测用户是否有配置在 PC 从 sleep 中唤醒时需要登录。我只能从屏幕保护程序设置中获取信息,但在这种情况下还不够。
我用谷歌搜索了很多,但找不到任何解决方案,这可能吗?
谢谢
Screen Capture Require Sign In option

最佳答案

好的,经过长时间的搜索,我找到了您需要的答案,在PowerGetActiveScheme ()的帮助下和 PowerReadDCValueIndex ()
代码示例:(C#)

根据您的需要,您可以轻松转换为 C++。

using System;
using System.Runtime.InteropServices;

namespace PowrprofTest
{
class Program
{

private static readonly Guid CONSOLELOCK = new Guid("0e796bdb-100d-47d6-a2d5-f7d2daa51f51");
private static readonly Guid SUB_NONE = new Guid("fea3413e-7e05-4911-9a71-700331f1c294");

[StructLayout(LayoutKind.Sequential)]
public class GuidClass
{
public Guid Value;
}

[DllImport("powrprof.dll")]
public static extern UInt32 PowerGetActiveScheme(
IntPtr UserRootPowerKey,
ref IntPtr ActivePolicyGuid
);

[DllImport("powrprof.dll", CharSet = CharSet.Unicode)]
public static extern UInt32 PowerReadACValueIndex(
IntPtr RootPowerKey,
ref Guid SchemeGuid,
ref Guid SubGroupOfPowerSettingsGuid,
ref Guid PowerSettingGuid,
ref UInt32 AcValueIndex
);

[DllImport("powrprof.dll", CharSet = CharSet.Unicode)]
public static extern UInt32 PowerReadDCValueIndex(
IntPtr RootPowerKey, ref Guid SchemeGuid,
ref Guid SubGroupOfPowerSettingsGuid,
ref Guid PowerSettingGuid,
ref UInt32 AcValueIndex
);

static void Main(string[] args)
{
Guid scheme = GetActiveSchemeGuid();

bool sleepLockEnabledAC = (GetACValue(scheme, SUB_NONE, CONSOLELOCK) == 1) ? true : false;
bool sleepLockEnabledDC = (GetDCValue(scheme, SUB_NONE, CONSOLELOCK) == 1) ? true : false;

Console.WriteLine("Sleep lock enabled on AC : " + sleepLockEnabledAC);
Console.WriteLine("Sleep lock enabled on DC : " + sleepLockEnabledDC);
Console.ReadLine();
}

static Guid GetActiveSchemeGuid()
{
IntPtr activeSchemePtr = IntPtr.Zero;
uint res = PowerGetActiveScheme(IntPtr.Zero, ref activeSchemePtr);
GuidClass temp = new GuidClass();
Marshal.PtrToStructure(activeSchemePtr, temp);
Guid scheme = temp.Value;
return scheme;
}

/// <summary>
/// Get setting for Plugged in
/// </summary>
static UInt32 GetACValue(Guid scheme, Guid subgroup, Guid setting)
{
UInt32 value = 0;
PowerReadACValueIndex(IntPtr.Zero, ref scheme, ref subgroup, ref setting, ref value);
return value;
}

/// <summary>
/// Get setting for On battery
/// </summary>
static UInt32 GetDCValue(Guid scheme, Guid subgroup, Guid setting)
{
UInt32 value = 0;
PowerReadDCValueIndex(IntPtr.Zero, ref scheme, ref subgroup, ref setting, ref value);
return value;
}
}
}

调试:

1

在 AC 上启用 sleep 锁定:真

2

在 AC 上启用 sleep 锁定:错误

关于c++ - 以编程方式获取 Windows 设置 |账户设置 |需要登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61768023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com