【发布时间】:2020-07-25 13:16:31
【问题描述】:
我尝试对 CMD 执行命令,但它不起作用 包括:
#include <Windows.h>
#include <processthreadsapi.h>
#include <shellapi.h>
#include <stdio.h>
#include <iostream>
我如何尝试打开记事本:
ShellExecute(NULL, (LPCWSTR)"open", (LPCWSTR)"cmd", (LPCWSTR)"/c notepad.exe", NULL, SW_NORMAL);
【问题讨论】:
-
你能解释一下你的演员吗?我的意思是
LPCWSTR。 -
显式转换通常不是修复错误类型的编译器错误的方法。当然,您的代码可以编译,但可能无法正常工作。
-
另外,命令行必须包含程序名称。在这种情况下,它会认为
/c是程序名称并且将不起作用,因为/c然后作为实际参数丢失。您可以传递NULL而不是应用程序(或将其保留为cmd),然后使用cmd /c notepad.exe作为命令行。但是,我完全不明白您为什么要参与 CMD - 直接运行notepad.exe。 -
我认为您的函数
ShellExecute无法获取wchar_t*而不是char*或以空字符结尾的字符串。转换为正确的东西( char* 或什么都不做),它会起作用 -
这里有一个错误
(LPCWSTR)"/c notepad.exe",当您必须强制转换字符串类型时,您几乎总是做错事。请改用L"/c notepad.exe"。相关:https://stackoverflow.com/questions/1810343/is-a-wide-character-string-literal-starting-with-l-like-lhello-world-guarantee
标签: c++