c++ builder 调用命令行,并获取命令行的内容

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

 当你需要调用命令行程序,并获取它的命令行输出内容的时候,这个函数就可以满足你的需要。

String ExecDosCmd(String cmd, TMemo *memo)
{
    SECURITY_ATTRIBUTES   sa;
    HANDLE   hRead,hWrite;

    sa.nLength   =   sizeof(SECURITY_ATTRIBUTES);
    sa.lpSecurityDescriptor   =   NULL;
    sa.bInheritHandle   =   TRUE;
    if   (!CreatePipe(&hRead,&hWrite,&sa,0))
    {
        return   FALSE;
    }

    STARTUPINFO   si;
    PROCESS_INFORMATION   pi;
    si.cb   =   sizeof(STARTUPINFO);
    GetStartupInfo(&si);
    si.hStdError   =   hWrite;
    si.hStdOutput   =   hWrite;
    si.wShowWindow   =   SW_HIDE;
    si.dwFlags   =   STARTF_USESHOWWINDOW   |   STARTF_USESTDHANDLES;

    //关键步骤,CreateProcess函数参数意义请查阅MSDN
    if   (!CreateProcess(NULL, cmd.c_str(), NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
    {
        return   FALSE;
    }
    CloseHandle(hWrite);

    char   buffer[4096]   =   {0};
    DWORD   bytesRead;
    String strOutPut = "";

    while(true)
    {
        if(ReadFile(hRead,buffer,4095,&bytesRead,NULL)   ==   NULL)
        break;
        //buffer中就是执行的结果,可以保存到文本,也可以直接输出
        //printf(buffer);
        strOutPut += buffer;
        Sleep(200);
        memo->Text = strOutPut;
    }


    return   strOutPut;
}

但是我再实际使用过程中,遇到个问题:

有些控制台应用,不是一条条的打印信息。而是修改控制台上已经显示的内容。这种控制台程序,我还没有弄清楚怎么解决。

c++builder调用VC的dll以及VC调用c++builder的dll 解析__cdecl,__fastcall, __stdcall 的不同:在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式。 比如说__cdecl,它是标准的c方法的堆栈调用方式,就是在函数调用时的参数压入堆栈是与函数的声明顺序相反的,其它两个可以看MSDN,不过这个对我们编程没有太大的作用 ------------------------------------------ 阅读详情

相关推荐

android 调用 c++builder

在`Main()`函数中,创建了应用程序对象和窗口对象,显示窗口,最后运行应用程序。在此示例中,使用静态代码块加载.so文件,在`onCreate()`方法中使用`VCL::Handle`来调用`Main()`函数显示窗口。编译成功后,您将得到一个.so文件,可以将其复制到您的Android应用程序的项目文件夹中。3. 将.so文件复制到您的Android应用程序的libs/armeabi-v7a/或libs/arm64-v8a/目录中。2. 在该Activity类中,创建一个新的窗口显示它。

1320

获取命令行输出内容

C++ 写的代码 关于获取命令行输出内容的 希望对大家有所帮助

C++ Builder中创建与调用动态库文件小结

C++ BUILDER 中创建DLL文件:    在工程中新建DLL WIZARD项目;    选择C++与VCL及VC++    在DLL工程中声明DLL文件的输出函数    extern "C" __declspec(dllexport) TYPE FUNCTIONNAME(TYPE PARAMETERS,...);    实现函数体    如有DATA MODULE需要进行初始化    如:

小可的专栏 1223

C++Builder中取得命令行参数

用过C语言编程的人都知道,在DOS下的编程可以通过main函数的参数取得命令行参数的个数以及每个参数的字符串,例如int main(int argv ,char *argv[]){…}  则命令行参数是argc个,这些参数分别存储在argv[0]~argv[argc-1]中,其中argv[0]是可执行文件的名字(含路径),那么Windows程序是怎么取得命令行参数的呢?用C语言写过windows程

Johnny的专栏 1768

C++ Builder技巧集锦

调用DOS程序时不显示窗口 使 用 ShellExecute调 用 DOS程 序 时 可 以 不 显 示 窗 口 , 如 :  ShellExecute(0, "open", "c:\\tools\\arj.exe", "ac:\\p.arj c:\\*.bat c:\\*.sys", NULL, SW_HIDE);    产生随机数代码 int SecVal; AnsiString

liqingdxy的专栏 837

C++里的调用cmd命令的方法

C++调用cmd命令的方法1、cmd函数修改系统时间2、cmd函数修改控制台颜色3、通过cmd函数打开某个指定路径的文件4、cmd命令怎样打开网页 大家现在可能还在为C++自动化犯愁吧!今天我就来和大家分享一下我自己的一些经验,对于新手小白分为两种: cmdcmdcmdcmd新手小白会熟练操作深入了解电脑暂未熟练操作深入了解电脑了解能够熟练使用cmd不是非常了解但是知道一点 但是各位小白...

沛沛霖的博客 2万+

C++ 调用cmd的几种方法

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

The Laughing Uncle的博客 2万+

发编程二】c++创建子进程CreateProcess()

CreatProcess()需要若干参数来指定新进程的运行方式,但实际使用中多半参数都是用不到的,可以设置为NULL。int main(int argc, char*argv[])_argc 是整型变量,argv 是指向字符串的指针数组。进程相关的API

junxuezheng的博客 9380

C++Builder 资料库

1.怎样在C++Builder中创建使用DLL 2.用C++Bulider在WIN.INI中保存信息 3.如何在C++Builder中检测硬件 4.C++Builder如何响应消息及自定义消息 5.利用C++ Builder开发动画DLL 6.用C++ Builder 3制作屏幕保护程序 7.TCP/IP头格式 8.UDP 9.判断windows的Desktop及其它目录 10用C++Builde

chiengod(钱神爷)的专栏 2万+

C++Builder建立及调用DLL

C++Builder建立及调用DLL DLL简称动态链接库,是Windows中程序的重要组成部分。想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程 序分为好几个模块,团队每一个成员开发一个模块。问题来了:如何将模块组合成一个完整系统?还有,我们开发的软件需要不断升级,如 何升级?难道每次非得把整个工程重新编译一次再发布给用户吗?解决这些问题的科学办法,就是开发动态

tkj_的博客 7554

在C#中调用C++Builder编写的DLL

 一建立DLL文件1 运行C++Builder6,新建一DLLWizard项目;2 保存文件为Main.cpp以及工程文件AddDll.bpj;3 新建一Unit,保存为Fun    Fun.h文件如下。#ifndef FunH#define FunH//--------------------------------------------------------

pigDeity的专栏 7209

C++Builder 工程里调用 DLL 函数

调用 Visual C++ DLL 给 C++Builder 程序员提出了一些独特的挑战。在我们试图解决 Visual C++ 生成的 DLL 之前,回顾一下如何调用一个 C++Builder 创建的 DLL 可能会有所帮助。调用 C++Builder 创建的 DLL 要比 Visual C++ 的少了许多障碍。   为了在你的 C++Builder 工程里调用 DLL,你需要三种元素:DLL ...

weixin_34117211的博客 846

simulink调用C/C++语言 S-Function Builder使用

simulink调用C/C++语言 S-Function Builder使用simulink调用C/C++语言主界面代码生成 simulink调用C/C++语言 simulink支持S函数实现我们写好的算法,但是C语言使用广泛,算法应用比较多,可以使用C语言编写S函数,这称作C Mex S函数,这项功能使得C语言用户能够代码重用,在simulink中使用测试c语言写好的算法。 simulink提供丰富文档介绍如何编写C Mex S函数,·对于不想重写S语言调用C语言程序的人来说,还是比较繁琐的。为了方便已有

yinxian5224的博客 7943

C++Builder的几则小应用

这是第一篇帖文,从网上找的。以下是原文。C++Builder的几则小应用(望月 2001年09月19日 19:00)Borland C++BUILDER(BCB)是一种面向对象的、可视化的快速应用程序开发环境。该工具在建立用户入接口时,不必编写程序来描述输入或输出接口的外观和配置,只要使用工具箱的工具,在程序设计阶段便可实现,是属于一种“What you see is what you g

lwd2k的专栏 1258

C++BUILDER6下编译log4cpp-0.2.8手记

   C++BUILDER6下编译log4cpp-0.2.8手记    log4cpp是一个非常不错的开源项目,但是现有的Release版本中安装程序都存在有问题,导致在编译时不能顺利完成。在C++BUILDER6中编译最新版的log4cpp-0.3.5rc2时存在的问题非常严重,很多文件都缺少头文件,在经过大量的对源代码的修改后仍然无法顺利编译。因此,选择了低版本的log4cpp-0.2.8来进

swnuwangyun的专栏 2846

C++Builder中傻瓜式调用com组件。

最近在网上发现c++builder中提供的CreateOleObject类对于com组件的调用十分实用,下边是调用iTrusPTA.dll的一个示例;CoInitialize(NULL); Variant pta = CreateOleObject("PTA.iTrusPTAExt"); Variant Certsss = CreateOleObject("PTA.Certificates"); Variant Cer = CreateOleObject("PTA.Certificate");

haijun286972766的专栏 5287

C++Builder 工程里使用 Visual C++ DLL——第1部分:C函数

C++Builder 工程里使用 Visual C++ DLL——第1部分:C函数译者序:  第一次读这篇文章是在 2001 年 10 月,帮我解决了一点小问题。本来不好意思翻译,因为英语水平实在太差。最近发现不少网友在问在 C++Builder 的工程里调用 Visual C++ DLL 的问题,也许是用 C++Builder 的人比以前多了吧。于

shadowstar's blog 2963
上一篇: VC 创建带参数的快捷方式
下一篇: c# 启动另外一个程序,然后让另外一个程序关闭自己
vrix
博客等级 码龄23年 669粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值