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

标签 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并用谷歌搜索没有成功。

最佳答案

您的代码唯一可能出错的地方是您没有针对 Unicode 进行编译。因此 SystemParametersInfo 扩展为 SystemParametersInfoA 但您传递了一个宽字符串。否则你的代码是正确的并且可以工作。

调试这个特定 API 调用的问题非常棘手。它不会给你很多有用的反馈。明显的故障模式是该特定 JPEG 文件存在问题。尽管有扩展名,但它可能实际上不是 JPEG 文件。或者它可能使用 shell 不支持的 JPEG 功能。或者你可能把文件名弄错了。这些都是解释失败的原因。

为了测试目的,我会通过创建一个不同的 JPEG 文件来开始调试。如果结果成功,那么您就知道问题出在您正在使用的 JPEG 文件上。

关于c++ - 使用 Win32/C++ API 更改 Windows 7 墙纸(操作未实现异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21523803/

相关文章:

C++ 理解整数溢出

c++ - 为什么我们选择 "bounding box"方法来填充一个三角形呢?

c++ - Windows 过滤平台错误

windows - DefWindowProc 处理哪些消息?

c++ - 我正在用 C++ 编写一个简单的继承程序,但出现了很多错误

c++ - 如何将 cv::Mat 转换为 cv::Vec3f?

.net - Powershell ScriptBlock 不执行

c - 保存 DC 的剪辑区域并在以后恢复它的正确方法是什么?

c++ - 检查服务是否正在运行?

c++ - 第二个线程中的 wglMakeCurrent 失败了吗?