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

时间:2014-02-03 09:37:16

标签: c++ windows winapi windows-7

以下代码适用于Windows 8.1(已测试),但不适用于Windows 7.

std::wstring loc = L"C:\\Users\User\\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并搜索谷歌没有运气。

1 个答案:

答案 0 :(得分:3)

您的代码唯一可能出错的是您没有编译Unicode。因此SystemParametersInfo扩展为SystemParametersInfoA,但您传递了一个宽字符串。否则你的代码是正确的并且确实有效。

使用此特定API调用调试问题非常棘手。它没有给你很多有用的反馈。明显的故障模式是该特定JPEG文件存在问题。也许它实际上并不是一个JPEG文件,尽管有扩展。或者它可能使用shell不支持的JPEG功能。或许你得到的文件名错了。那些是解释失败的东西。

我会通过为测试目的创建不同的JPEG文件来开始调试。如果这会导致成功,那么您就知道问题是您正在使用的JPEG文件。