用Win32/C API更改Windows 7壁纸(未实现操作异常)



以下代码在Windows 8.1上工作(已测试),但在Windows 7上不行。

std::wstring loc = L"C:\UsersUser\Desktop\wallpaper.jpg";
BOOL ret = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)loc.c_str(), SPIF_UPDATEINIFILE);

当我在Windows 7上运行程序时,我会得到以下例外:

First-chance exception at 0x76E3C41F (KernelBase.dll) in MyApp.exe: 0xC0000002:  The requested operation is not implemented.

以前有人遇到过吗?我已经看了看http://msdn.microsoft.com/en-us/library/windows/desktop/ms724947(v=vs.85).aspx,aspx并搜索了Google,没有运气。

代码唯一错误的是您不是为Unicode编译。因此,SystemParametersInfo扩展到SystemParametersInfoA,但您通过宽字符串。否则,您的代码是正确的,并且确实有效。

通过此特定API调用来调试问题非常棘手。它不会给您太多有用的反馈。明显的故障模式是该特定的JPEG文件存在问题。尽管扩展名,也许它实际上不是JPEG文件。也许它使用了Shell不支持的JPEG功能。也许您弄错了文件名。这些是解释失败的事情。

我将通过为测试目的创建另一个JPEG文件来开始对此进行调试。如果这会导致成功,那么您知道问题是您正在使用的JPEG文件。

最新更新