【发布时间】:2020-10-16 06:51:23
【问题描述】:
我正在尝试编写一种可以让我的桌面空白的方法。虽然代码在我的 VirtualBox 机器上运行良好,但当我将它“部署”到一些测试机器时,背景似乎保持原样(使用用户定义的壁纸)。我看到在 VirtualBox 机器上来自 UserParametersInfo 的结果是 true 而在测试机器上它是 false。我试图获取一些错误详细信息。但是GetLastError 返回 0,所以我没有什么可坚持的。这是我的代码的样子:
var pathToSource = Marshal.StringToHGlobalUni("");
var result =
User32.SystemParametersInfo(
User32.SystemParametersInfoAction.SPI_SETDESKWALLPAPER,
0u,
pathToSource,
User32.SystemParametersInfoFlags.SPIF_SENDCHANGE | User32.SystemParametersInfoFlags.SPIF_UPDATEINIFILE);
我也试过了:
- 仅作为标志传递:
User32.SystemParametersInfoFlags.SPIF_UPDATEINIFILE, - 使用 User32.SystemParametersInfo 内置 package 函数和我自己的映射,这在下面的代码 sn-p 中可见,
- 创建一个黑色位图并将地址传递给包含该位图字节表示的数组。
但什么也没发生。
此外,当我尝试收集实际背景图像的路径时,我没有得到任何内部图像,没有任何错误。负责收集图像的函数如下所示:
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[MarshalAs(UnmanagedType.Bool)]
extern bool SystemParametersInfo(User32.SystemParametersInfoAction uiAction, uint32 uiParam, StringBuilder pvParam, User32.SystemParametersInfoFlags fWinIni)
var sb = new StringBuilder(500);
SystemParametersInfo(
User32.SystemParametersInfoAction.SPI_GETDESKWALLPAPER,
sb.Capacity,
sb,
User32.SystemParametersInfoFlags.None);
var path = sb.ToString();
我正在最新的 Windows 10、.net core 3.1 上对其进行测试
【问题讨论】:
标签: c# windows winapi .net-core