首先,我想说我已经阅读了此类问题的先前答案,包括this excellently written one。
但是,我不太了解C ++能够使用更“高级”的修复。
我已经确保选择了正确类型的控制台(感兴趣的人Console (/SUBSYSTEM:CONSOLE)
),并且具有所需的导入,可能除了某处提到的IDL(属于缺乏理解类别)
如果这是重复的,我会非常乐意使用我复制的帖子,但我找不到任何可以帮助我技能水平的人。
IDE:Visual Studio
平台:Windows
headers.h
#pragma once
#include <stdio.h>
#include <iostream>
#include <string>
#include <windows.h>
#include <Shobjidl.h>
#include <time.h>
#include <stdlib.h>
#include <tchar.h>
的main.cpp
#include "headers.h"
using namespace std;
int main() {
string x = "C://Users/student/Desktop/i-should-buy-a-boat.jpg";
x.c_str();
wstring tempx = std::wstring(x.begin(), x.end());
LPCWSTR sw = tempx.c_str();
HRESULT SetWallpaper(
LPCWSTR monitorID,
LPCWSTR wallpaper
);
SetWallpaper(NULL, sw);
}
答案 0 :(得分:2)
SetWallpaper()
不是Win32 API导出的独立函数。它是IDesktopWallpaper界面的一种方法(参见here)。
所以你需要使用更像这样的代码:
#include "headers.h"
int main()
{
std::wstring x = L"C:\\Users\\student\\Desktop\\i-should-buy-a-boat.jpg";
CoInitialize(NULL);
IDesktopWallpaper *p;
if (SUCCEEDED(CoCreateInstance(__uuidof(DesktopWallpaper), 0, CLSCTX_LOCAL_SERVER, __uuidof(IDesktopWallpaper), (void**)&p)))
{
p->SetWallpaper(NULL, x.c_str());
p->Release();
}
CoUninitialize();
return 0;
}