gpt4 book ai didi

c++ - 尝试使用 createprocess (API) 在 cmd throw c++ 上运行命令?

转载 作者:行者123 更新时间:2023-11-30 05:29:30 25 4
gpt4 key购买 nike

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;
}

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

最佳答案

dircmd.exe 理解的命令,它不是您可以执行的程序。

你可以试试命令cmd /k "dir desktop" ,正确表示为 C++ 字符串。

例如,

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;
}

注意如何调用 ZeroMemory已替换为 C++ 初始化。

只要让编译器完成它的工作,您就会得到更短、更清晰的代码,这些代码更有可能是正确的,而且同样高效(可能更高)。双赢。

免责声明:代码未经编译器审查。


如果目的是列出用户桌面文件夹的内容,请注意 dir desktop不那样做。作为命令解释器中的交互式命令,您可以使用 dir %userprofile%\desktop ,这也可以通过 Windows 运行对话框进行。根据命令解释器对命令行参数的行为,它可以直接通过 CreateProcess 工作。 , 或者不是。


通常,在使用 Windows API 级函数时,最好使用 wchar_t基于文本的函数,即定义 UNICODE在包括 <windows.h> 之前(或明确使用 ...W 函数)。

关于c++ - 尝试使用 createprocess (API) 在 cmd throw c++ 上运行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36356377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com