You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言文件路径问题:如何拼接EXE路径与图片路径实现壁纸更换

问题解决:C语言拼接EXE所在目录与图片路径

你的代码核心问题是直接在完整EXE路径后拼接图片路径,但GetModuleFileNameW返回的路径包含EXE文件名(比如C:\demo\wallpaper.exe),直接拼接会变成C:\demo\wallpaper.exe//gwegus/pic.png,这显然不是正确的图片路径。需要先提取EXE所在的目录,再拼接图片路径。

修正步骤:

  • 找到路径中最后一个反斜杠\的位置,截断路径到目录部分
  • 拼接目标图片的相对路径
  • 修复宽字符打印的问题(printf无法正确输出wchar_t类型,改用wprintf)

修正后的代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <shlwapi.h>

// 链接shlwapi.lib,用于PathRemoveFileSpecW函数
#pragma comment(lib, "shlwapi.lib")

int main() {
    HMODULE module = GetModuleHandleW(NULL);
    wchar_t path[MAX_PATH];
    GetModuleFileNameW(module, path, MAX_PATH);

    // 移除路径中的EXE文件名,得到程序所在目录
    PathRemoveFileSpecW(path);

    // 拼接图片路径(如果图片在子文件夹gwegus里,就改成L"\\gwegus\\pic.png")
    wcscat_s(path, MAX_PATH, L"\\pic.png");

    // 设置桌面壁纸
    int retSysCall = SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, (void*)path, SPIF_UPDATEINIFILE);

    // 正确打印宽字符路径
    wprintf(L"%s\n", path);
    _getch();
    return 0;
}

关键说明:

  • PathRemoveFileSpecW是Windows提供的API,专门用于移除路径中的文件名部分,比手动查找反斜杠更可靠
  • 使用wcscat_s替代wcscat,避免缓冲区溢出风险(更安全)
  • 若图片在程序目录的子文件夹内,只需修改拼接的路径字符串即可

内容的提问来源于stack exchange,提问作者Garry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:42:19