Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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++ 试图在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

我正在尝试通过VisualStudio运行cmd命令。 我使用createprocces(API)来运行这个东西 但是我不明白为什么它不运行任何东西。

如果您在调用时将第一个参数设置为NULL,那么您必须确保
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;
}