繁体   English   中英

Windows 10中如何设置账号图片

[英]How to set account's picture in Windows 10

我想通过我的C#程序来设置账号的图片,但是找不到任何API来设置。

所以我尝试通过生成accountpicture-ms文件来设置它,然后通过更改注册表来应用它。 但是,Windows 无法读取我的程序生成的文件。 这是我生成accountpicture-ms文件的代码。

        private static readonly byte[] ACCOUNTPICTURE_MS_HEADER = new byte[] { 0xB2, 0xF9, 0x00, 0x00, 0xAE, 0xF9, 0x00, 0x00, 0x31, 0x53, 0x50, 0x53, 0x18, 0xB0, 0x8B, 0x0B, 0x25, 0x27, 0x44, 0x4B, 0x92, 0xBA, 0x79, 0x33, 0xAE, 0xB2, 0xDD, 0xE7, 0xD5, 0x0C };
        private static readonly byte[] FIRST_PICTURE_HEADER = new byte[] { 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x34, 0x00, 0x39, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x0C, 0x00, 0x00 };
        private static readonly byte[] SECOND_PICTURE_HEADER = new byte[] { 0x00, 0x00, 0xBD, 0xEC, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x34, 0x00, 0x39, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xEC, 0x00, 0x00 };

        public static byte[] CreateAccountPicture(Image avatar)
        {
            Bitmap avatar96 = Utils.ResizeImage(avatar, 96, 96);
            MemoryStream stream96 = new MemoryStream();
            avatar96.Save(stream96, ImageFormat.Jpeg);
            avatar96.Dispose();
            Bitmap avatar448 = Utils.ResizeImage(avatar, 448, 448);
            MemoryStream stream448 = new MemoryStream();

            avatar448.Save(stream448, ImageFormat.Jpeg);
            avatar448.Dispose();
            avatar.Dispose();
            byte[] jfif96 = stream96.ToArray();
            byte[] jfif448 = stream448.ToArray();
            stream96.Close();
            stream448.Close();
            MemoryStream picture = new MemoryStream(jfif96.Length + jfif448.Length + ACCOUNTPICTURE_MS_HEADER.Length + FIRST_PICTURE_HEADER.Length + SECOND_PICTURE_HEADER.Length);
            picture.Write(ACCOUNTPICTURE_MS_HEADER, 0, ACCOUNTPICTURE_MS_HEADER.Length);
            picture.Write(FIRST_PICTURE_HEADER, 0, FIRST_PICTURE_HEADER.Length);
            picture.Write(jfif96, 0, jfif96.Length);
            picture.Write(SECOND_PICTURE_HEADER, 0, SECOND_PICTURE_HEADER.Length);
            picture.Write(jfif448, 0, jfif448.Length);
            picture.Write(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0, 8);
            byte[] pic = picture.ToArray();
            picture.Close();
            return pic;
        }

有没有办法生成这种文件或设置帐户的图片?

图片设置取自注册表分支HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\{User_SID} 有名为Image{X}的字符串参数,其中 {X} 为 32, 40, 48, 96, 192, 200, 240, 448。每一项代表对应大小图像的路径。 这样你就可以

  • 生成一组具有上述大小的图像并将整个图像集存储在磁盘上
  • 以管理员身份运行您的代码,以便能够写入 HKLM 注册表 hive。
  • 将路径写入注册表。
  • 可能需要重新启动或注销/登录才能应用更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM