C++使用CreateProcess执行cmd命令(实例演示)

c++执行cmd指令、cmd隐藏进程不出现控制台、结束进程、调用exe、CreateProcess以及WinExec的使用 需求分析: 我们在调用外部的exe时会弹出控制台黑框,而我们不想在软件中出现这个黑框,修改软件属性为窗体也不起作用。调用如何结束也是我们要解决的一个问题。 知识点: 1.如执行cmd命令 在C++中执行cmd指令的几种方法: (1) system("指令");//会出现黑框,指令完成后进行之下代码 (2)WinExec("指令",SW_NORMAL);//不会出现 阅读详情

本人微信公众号:CPP进阶之旅
如果觉得这篇文章对您有帮助,欢迎关注 “CPP进阶之旅” 学习更多技术干货

使用CreateProcess可以执行cmd命令,也可以执行一些可执行程序。

//摘自msdn的示例代码
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
void _tmain( int argc, TCHAR *argv[] )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    if( argc != 2 )
    {
        printf("Usage: %s [cmdline]\n", argv[0]);
        return;
    }

    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line)
        argv[1],        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    ) 
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

在上面的代码基础上改造之后,执行打开windows下的记事本的命令。

//使用CreateProcess执行notepad的测试的代码
//调用示例 CString strcmd=_T("notepad");cmdProcess(strcmd);
void cmdProcess( CString strCmd)
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
	
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    //隐藏掉可能出现的cmd命令窗口
    si.dwFlags = STARTF_USESHOWWINDOW;
	si.wShowWindow = SW_HIDE;
    ZeroMemory( &pi, sizeof(pi) );
    
    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line)
        (LPSTR)(LPCTSTR)strCmd,        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    ) 
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

MSDN CreateProcess函数介绍:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx
MSDN CreateProcess实例地址:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx

欢迎关注我的个人微信公众号,查看专业的客户端/服务端开发知识、笔试面试题目、程序员职场经验与心得分享。
在这里插入图片描述

【并发编程二】c++创建子进程CreateProcess() CreatProcess()需要若干参数来指定新进程的运行方式,但实际使用中多半参数都是用不到的,可以设置为NULL。int main(int argc, char*argv[])_argc 是整型变量,argv 是指向字符串的指针数组。进程相关的API 阅读详情

相关推荐

C++之CreateProcess

【代码】C++之CreateProcess。

我不是码农的博客~~~ 1336

C++ 进程与线程---CreateProcess()函数(1)

目录 1、CreateProcess()函数 1.1 lpApplicationName & lpCommandLine 1.2 lpProcessAttributes & lpThreadAttributes 1.3bInheritHandles 1.4 dwCreationFlags 1.5 lpEnvironment 1.6lpCurrentDirectory 1.7lpStartupInfo 1.8lpProcessInformation 1、Create...

weixin_41885845的博客 8828

c++ ShellExecute 执行cmd命令

WinExec, CreateProcess; ShellExecute 都能执行cmd命令, ShellExecute 相对简单些,且可一次执行多行命令 C++ LPCWSTR stringToLPCWSTR(std::string orig) { size_t size = orig.length(); wchar_t* buffer = new wchar_t[size + 1]; MultiByteToWideChar(CP_ACP, 0, orig.c..

全粘工程师 3076

VC++ 创建进程并等待其退出

VC 创建进程并等待其退出flyfish CString s = L"C:\\test.exe"; STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.wShowWindow = SW_HIDE; PROCESS_INFORMATION pi; ZeroMemory(

二分掌柜的 3235

C++程序中使用命令行命令copy/xcopy拷贝文件/文件夹,解决调用CopyFile拷贝文件速度过慢的问题(附源码)

本文详细讲述如何在C++程序中使用命令行命令copy/xcopy拷贝文件/文件夹解决调用CopyFile拷贝文件速度过慢的问题。

dvlinker的技术专栏 2万+

基于51单片机扫地机器人(全套Proteus仿真+原理图+程序+说明书)

(内含源程序代码,原理图,仿真,讲解视频,元件清单等,【精品】值得推荐!!!扫地机器人是以单片机为主控制器。通过单片机控制小车行驶、除尘、蜂鸣。扫地机器人使用双电机驱动,以提高整车运动的平稳性;在智能车进驶过程中,采用双超声波模块实现避障。

2301_76434107的博客 1895

c/c++代码中执行cmd命令

c/c++代码中执行cmd命令

litx的博客 2万+

1.3-----Simplify 3D切片软件:从新手困惑到高效打印的进阶设置指南

本文详细介绍了Simplify 3D切片软件在大型模型打印中的高效设置技巧,包括切片效率、支撑结构智能生成和精细参数调节等核心优势。通过实战案例和进阶参数设置指南,帮助用户从新手快速进阶到高效打印,显著提升3D打印质量和效率。

weixin_42552716的博客 422

Windows下,在C++中执行exe,以及执行命令的一些方法

Windows下,在C++中执行exe,以及执行命令有其中一下几种方法: (1)system (2)ShellExecute (3)CreateProcess (4)使用通道 一、使用system 这个都比较熟悉,直接system(“cmd”);即可 二、使用shellExecute int ret = (int)ShellExecute(NULL, L"", L"fortemp.exe",NUL...

95年的程序狮 4599

EDA环境下的LSF进阶调优:如何为Cadence/VCS等工具正确配置cgroups与daemon starter

本文深入探讨了在EDA环境中如何为Cadence/VCS等工具正确配置LSF的cgroups与daemon starter,解决资源分配与特殊应用兼容性问题。通过详细解析cgroups技术、daemon starter配置及混合资源管理策略,帮助提升LSF集群的效率和稳定性,特别适用于高性能计算和芯片设计场景。

weixin_33724046的博客 461

秃鹰搜索优化算法(BES)详解:从自然捕食到全局优化

秃鹰搜索优化算法(Bald Eagle Search Optimization Algorithm,BES)是由马来西亚学者Alsattar等人于2020年提出的一种新型元启发式优化算法。该算法灵感来源于秃鹰在自然界中高超的捕食行为,特别是其独特的狩猎策略和卓越的视觉搜索能力,模拟了秃鹰捕食鲑鱼等猎物的完整过程。

qq_42212808的博客 1353

CreateProcess 执行 cmd 命令

CreateProcess 执行cmd 命令 并输出

xmmdbk的博客 2218

反应动力学仿真软件:Kintecus_(4).用户界面及操作指南

在 Kintecus 中,反应方程的定义非常灵活。您可以定义简单的一阶反应、复杂的多步反应以及不同类型的反应机制。

kkchenjj的博客 1182

C++ 调用cmd的几种方法

文章目录systemWinExecShellExecute阻塞式调用ShellExecute如何调用winsat(解决应用程序重定向问题)任务计划程序 调用cmd来执行响应的命令,windows实际上也给了一些接口,但是有些在执行某些命令的时候,却不能够执行,比如 winsat。 system 这个命令使用 VS 的同学一定不陌生 当我们想要执行某个命令或打开某个程序时 system("c...

The Laughing Uncle的博客 2万+

压缩包密码破解工具ZIP Cracker2.0.1.2 正式版

一款多功能文件密码破解工具,支持ZIP、RAR、Office等主流加密格式,提供CPU/GPU双模式破解。该软件采用黑客风格界面,具备环境自检修复功能,支持实时监控硬件使用率。内置hashcat等专业破解工具,通过拖拽文件即可快速破解,GPU模式速度可达CPU的10-100倍。最新版本优化了中文路径支持,并提升了启动速度。

bfq05234214的博客 482

提升ARM Cortex-M系统性能的关键技术:TCM技术解析与实战指南

TCM技术为ARM Cortex-M处理器提供了宝贵的确定性性能提升手段,特别适合对时序敏感的实时应用。通过合理配置和优化,工程师可以显著提高系统性能、降低中断响应时间并优化功耗。随着嵌入式系统对实时性要求的不断提高,TCM技术将在工业控制、汽车电子、医疗设备等领域发挥更加重要的作用。未来,ARM处理器可能会进一步扩展TCM容量并优化其与其他内存子系统的协同工作方式,为开发者提供更强大的实时性能保障。

1680

windows下C与C++执行cmd命令并实时获取输出

在windows下一般会使用系统的cmd命令或者其他现成的一些命令行可执行程序来完成一些操作,比如:调用ping命令来测试网络是否畅通、调用ffmpeg命令进行视频转码等等。为了能在软件界面上有更好的交互输出,都需要将命令执行的过程拿到,进行处理,然后在界面上进行显示,让用户知道程序正在正常运行,下面就介绍几种输出的获取方式。

6370

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C/C++中一次性执行多个DOS命令

在C语言中执行DOS命令的方法很多,如:ShellExecute, WinExec, CreateProcess等,但是这些接口都是只能一次执行一条命令,在我的启动脚本里有很多命令,有一些是设置环境变量的,这样就没法在代码中一条条执行脚本中的命令,必须要找到一个办法可以一次性执行多条命令。main.exe的原始目录是D:\Workspace\research\C\Chrome\,执行时,首先执行了cd..,退到上一层目录,然后执行dir,显示上一层目录的内容,证明上面的代码确实可以一次执行多条DOS命令。

2501_94294320的博客 643

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++中调用cmd命令行运行脚本

由于之前在项目中,需要解析GDAS数据格式的气象数据,于是写了一个解析GDAS数据的Python的小脚本 ,这个脚本使用的是MeteoInfo的库。MeteoInfo软件包中已经包含了IronPython运行所需的各种库文件,关于如何使用MeteoInfo写脚本程序,可以看看如下的文章  http://hi.baidu.com/meteoinfo/blog/item/ac9ebccdfb150b0

qq871514048的专栏 4151

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VC 调用cmd

vc中调用的cmd命令目前知道4种方法,分别是system、WinExec,ShellExecute和CreateProcess四个命令. 下面简单介绍一下 : 1.在VC中调用DOS命令时,可以用函数system("DOS命令"),如我们经常见的命令system("ipconfig"),当然也可以执行别的应用程序,只要在cmd下执行的在这里应该也没问题,只是注意打开文件或保存文件时若不指

eryadabendan的专栏 3437
上一篇: SCSI指令使用之弹带和加载磁带指令使用(实例演示)
下一篇: windows下磁盘相关接口调用实例(持续更新)
Coding13
博客等级 码龄10年 53粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值