C++ 试图在cmd throw c++;使用createprocces(API)? bool执行() { STARTUPINFO si; 处理信息; 布尔标志=真; 零内存(&si,sizeof(si)); si.cb=sizeof(si); 零内存(&pi,sizeof(pi)); string f=“dir desktop” 如果(CmdLine.parameter!=“”) { LPSTR l1=const_cast(f.c_str()); CreateProcess(NULL、l1、NULL、NULL、false、0、NULL、NULL、si和pi); flag=true; //WaitForSingleObject(pi.hProcess,无限); ////关闭进程和线程句柄。 //CloseHandle(pi.hProcess); //CloseHandle(pi.hThread); //} } 返回标志; }
我正在尝试通过VisualStudio运行cmd命令。 我使用createprocces(API)来运行这个东西 但是我不明白为什么它不运行任何东西。如果您在调用时将第一个参数设置为NULL,那么您必须确保C++ 试图在cmd throw c++;使用createprocces(API)? bool执行() { STARTUPINFO si; 处理信息; 布尔标志=真; 零内存(&si,sizeof(si)); si.cb=sizeof(si); 零内存(&pi,sizeof(pi)); string f=“dir desktop” 如果(CmdLine.parameter!=“”) { LPSTR l1=const_cast(f.c_str()); CreateProcess(NULL、l1、NULL、NULL、false、0、NULL、NULL、si和pi); flag=true; //WaitForSingleObject(pi.hProcess,无限); ////关闭进程和线程句柄。 //CloseHandle(pi.hProcess); //CloseHandle(pi.hThread); //} } 返回标志; },c++,api,createprocess,C++,Api,Createprocess,我正在尝试通过VisualStudio运行cmd命令。 我使用createprocces(API)来运行这个东西 但是我不明白为什么它不运行任何东西。如果您在调用时将第一个参数设置为NULL,那么您必须确保l1以要调用的模块名开始 由于dir是命令处理器的内部命令,而不是可执行文件,因此必须使用cmd作为模块名称,并给出其余参数 因此,请尝试以下方法: bool execute() { STARTUPINFO si; PROCESS_INFORMATION pi; boo
l1
以要调用的模块名开始
由于dir
是命令处理器的内部命令,而不是可执行文件,因此必须使用cmd
作为模块名称,并给出其余参数
因此,请尝试以下方法:
bool execute()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
bool flag = true;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
string f = "dir desktop"
if (CmdLine.parameter != "")
{
LPSTR l1 = const_cast<char *>(f.c_str());
CreateProcess(NULL, l1, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
flag = true;
// WaitForSingleObject(pi.hProcess, INFINITE);
// // Close process and thread handles.
// CloseHandle(pi.hProcess);
// CloseHandle(pi.hThread);
//}
}
return flag;
}
dir
是一个被cmd.exe
理解的命令,它不是您可以执行的程序
可以尝试命令<代码> CMD/K“DIR桌面”< /C>,适当地表示为C++字符串。
例如: < >注意调用<代码>零内存>代码>已被C++初始化替换。 只要让编译器完成它的工作,您就可以得到更短、更清晰、更可能正确、同样高效(可能更多)的代码。双赢 免责声明:编译器未审核代码如果目的是列出用户桌面文件夹的内容,请注意,
dir desktop
不会这样做。作为命令解释器中的交互式命令,您可以使用dir%userprofile%\desktop
,这也可以通过Windows运行对话框工作。根据命令行参数的命令解释器行为,它可以通过CreateProcess
直接工作,也可以不工作
通常,在使用Windows API级别函数时,最好使用基于
wchar\u t
的文本函数,即在包含
之前定义UNICODE
(或明确使用…W
函数)。为什么标志
在两处设置为真
,而从不设置为假
?
string f = "cmd /c=dir desktop";
auto execute()
-> bool
{
STARTUPINFO si = { sizeof( si ) };
PROCESS_INFORMATION pi = {};
string f = "cmd /k \"dir desktop\"\0";
bool const ok = !!CreateProcess( 0, &f[0], 0, 0, false, 0, 0, 0, &si, &pi );
if( !ok ) { return false; }
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return true;
}