我正在尝试使用以下方法获取DWM colorizationColor :
Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\DWM").GetValue("ColorizationColor")
然而它返回 -2144154163 (实际值 2150813133 )
我认为这是因为该值不能保存在32位int ...但是事件转换(或转换)到int64失败。
PD:这可能听起来像一个简单的问题,但我无法找到解决方案:(
答案 0 :(得分:2)
颜色值作为int值非常不切实际,最好快速转换它。处理钥匙的一个小包装也不会伤害:
using System.Drawing;
...
public static Color GetDwmColorizationColor() {
using (var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\DWM")) {
return Color.FromArgb((int)key.GetValue("ColorizationColor"));
}
}
但是不要这样做,有一个记录的API。 P / Invoke DwmGetColorizationColor()获取值,您将获得保证兼容性行为。如果将来某个Windows版本更改此注册表详细信访问pinvoke.net进行声明。
答案 1 :(得分:1)
您需要进行未经检查的演员:
unchecked {
value = (uint)intValue;
}
编辑:Registry.GetValue
返回包含object
盒装值的Int32
。
You cannot unbox the value and cast to a different value type in a single cast
直接从对象进行投射时,您需要首先将其拆分为实际类型,然后将其强制转换为uint
:
unchecked {
value = (uint)(int)boxedObject;
}