用Win32/C API更改Windows 7壁纸(未实现操作异常)
Change Windows 7 Wallpaper with Win32/C++ API (Operation not implemented exception)
以下代码在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文件。
相关文章:
- 为什么 std::lerp 不适用于任何已实现所需操作的类型?
- LLVM |如何实现逻辑非操作的 IR 代码生成
- 如何实现对序列对进行操作的C++元函数
- OpenCV 混合模式实现:为什么看似等效的操作会产生不同的结果?
- 为什么用于阈值矩阵元素的 Matlab 逻辑索引操作在性能上优于 mex 实现?
- 如果不在派生类实现中执行此操作,"basic_streambuf"是否会创建自己的获取/放置区域?
- 在 c++ 中实现内联汇编器以对变量进行异或操作的正确方法
- 在最少的操作中实现字符串所有字符的相同频率。(所有字符的范围从'a'到"z")
- 了解C++位操作中的二进制转换实现
- 是否可以通过一个模板函数实现列操作和行操作?
- 如何实现原子操作
- 这个指针增量操作在这里实现了什么
- 用Win32/C API更改Windows 7壁纸(未实现操作异常)
- 如何在 32 位体系结构的最低级别实现 64 位类型和操作?
- 如何实现多线程异步操作
- 二叉树访谈:实现跟随操作
- float4::set_wxy(以及其他set-swizzle操作)的更好的SSE2实现
- SRP 是否与单个类的可能操作或其在其中的实现相关
- C++ 11 标准是否保证 std::atomic<> 作为无锁操作实现?
- std::sort 如何仅使用迭代器实现交换操作