作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
您好,我想写一个小程序来更改 Windows 7 中的墙纸
我想使用下面的代码:
#include "windows.h"
#include "wininet.h"
#include "shlobj.h"
#include "wchar.h"
#include <iostream>
void SetWallpaper(LPCWSTR file){
CoInitializeEx(0,COINIT_APARTMENTTHREADED);
IActiveDesktop* desktop;
HRESULT status = CoCreateInstance(CLSID_ActiveDesktop,NULL,CLSCTX_INPROC_SERVER,IID_IActiveDesktop,(void**)&desktop);
WALLPAPEROPT wOption;
ZeroMemory(&wOption, sizeof(WALLPAPEROPT));
wOption.dwSize=sizeof(WALLPAPEROPT);
wOption.dwStyle = WPSTYLE_CENTER;
status = desktop->SetWallpaper(file,0);
wcout << status << endl;
status = desktop->SetWallpaperOptions(&wOption,0);
wcout << status << endl;
status = desktop->ApplyChanges(AD_APPLY_ALL);
wcout << status << endl;
desktop->Release();
CoUninitialize();
}
int wmain(int argc, wchar* argv[]){
if(argc<=1){
wcout << "use: " << argv[0] <<" path_to_pic.bmp" <<endl;
}else{
wchar_t* file = argv[1];
SetWallpaper(file);
}
getchar();
return 0;
}
但此代码不会更改墙纸,它只会在调用 ApplyChanges 后给我 hresult error-code 80070002。
我做错了什么请帮忙
最佳答案
请将您的主入口函数从
int main(int argc, char* argv[])
到
int wmain(int argc, wchar_t* argv[] )
不需要像 wchar_t* file = (wchar_t*)argv[1];
这样的强制转换,它将像您的 wmain arguments are already in wchar_t* 一样工作
我能够使用你的代码和我的修改并更改我的电脑墙纸
关于c++ - 如何在 C++ 中更改事件桌面墙纸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8438067/
我是一名优秀的程序员,十分优秀!