C语言调用ShellExecute,cmd参数带中文时乱码

最近使用ShellExecute遇到中文路径乱码问题,记录一下。

char complete_path[1024];
GetModuleFileNameA(NULL, complete_path, sizeof(complete_path));

//UTF-8到GB2312的转换,防止中文路径乱码
int len = MultiByteToWideChar(CP_UTF8, 0, filepath, -1, NULL, 0);
wchar_t* wstr = (wchar_t *)malloc(sizeof(wchar_t)*(len + 1));
memset(wstr, 0, sizeof(wchar_t)*(len + 1));
MultiByteToWideChar(CP_UTF8, 0, filepath, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char *path1 = (char *)malloc(sizeof(char)*(len + 1));
memset(path1, 0, sizeof(char)*(len + 1));
WideCharToMultiByte(CP_ACP, 0, wstr, -1, path1, len, NULL, NULL);
free(wstr);

//开启进程,complete_path是要启动的exe全路径,path1是cmd参数,比如某个要用exe打开的文件的路径
ShellExecute(NULL, "open", complete_path, path1, NULL, 1);
free(path1);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值