首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止Registry.GetValue溢出

防止Registry.GetValue溢出
EN

Stack Overflow用户
提问于 2010-11-14 15:06:55
回答 2查看 360关注 0票数 1

我试图让DWM colorizationColor使用:Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\DWM").GetValue("ColorizationColor")

然而,它返回的是-2144154163 (实际值为2150813133)。

我认为这是因为32位整数不能保持这个值.但是,事件转换(或转换)到int64失败。

这听起来可能是个容易回答的问题,但我找不到解决办法:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-14 15:25:20

颜色值和int值一样不切实际,最好是快速转换它。配置密钥的小包装器也不会造成伤害:

代码语言:javascript
复制
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。

票数 3
EN

Stack Overflow用户

发布于 2010-11-14 15:09:19

您需要进行一次未检查的转换:

代码语言:javascript
复制
unchecked {
    value = (uint)intValue;
}

编辑Registry.GetValue返回包含装箱Int32值的object

不能在单个强制转换中解压缩该值并将其转换为不同的值类型。

直接从对象进行转换时,首先需要将其解压缩为其实际类型,然后将其转换为uint

代码语言:javascript
复制
unchecked {
    value = (uint)(int)boxedObject;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4178049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档