win32程序执行控制台命令并重定向输出到文件

深入解析Windows PE文件:从结构原理到逆向分析实战 可执行文件(EXE)是软件在操作系统上运行的最终形态,理解其内部结构是软件工程与安全分析的基础。其核心在于解析特定的文件格式规范,例如Windows平台广泛采用的PE(Portable Executable)格式。该格式定义了文件头、节表、代码与数据节等标准结构,并涉及虚拟地址与文件偏移转换等关键原理。掌握这些原理对于软件调试、性能分析、兼容性排查及安全漏洞挖掘具有重要价值。在逆向工程与恶意软件分析等应用场景中,通过使用dumpbin、Ghidra等工具进行静态分析,或结合x64dbg进行动态调试,可以有效 阅读详情

ShellExecute系列函数,可以执行控制台命令,但是无法实现输出重定向。

system函数,可以执行命令,并实现输出重定向,但是无法隐藏控制台窗口。

CreateProcess函数,则既可以执行命令,又可以实现输出重定向,同时不显示控制台窗口。

但是,CreateProcess函数的使用显得有些复杂。

我们可以将他包装一下,让他变得和ShellExecute或system一样好用。

下面的函数my_exec就实现了这种包装。

通过my_exec执行命令,并实现输出重定向非常方便。

例如,执行ping命令,将结果输出到c:\haha.txt中。则按如下方式调用即可。

my_exec(TEXT("ping www.youkuaiyun.com"), TEXT("c:\\haha.txt"), -1);

再如,执行dos命令dir,并将结果输出到c:\fff.txt中。则按如下方式调用即可。

my_exec(TEXT("cmd.exe  /c  dir d:") , TEXT("c:\\fff.txt"), -1);

 

好了,函数my_exec的代码实现如下。

int my_exec(TCHAR *cmd, TCHAR *output_file, int wait_time_sec)
{
    PROCESS_INFORMATION pi;
    STARTUPINFO si;
    BOOL ret = FALSE;
    DWORD flags = CREATE_NO_WINDOW;
    HANDLE h;
   
    SECURITY_ATTRIBUTES sa;
    sa.nLength = sizeof(sa);
    sa.lpSecurityDescriptor = NULL;
    sa.bInheritHandle = TRUE;      

    h = CreateFile(output_file,
        FILE_APPEND_DATA,
        FILE_SHARE_WRITE | FILE_SHARE_READ,
        &sa,
        CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL );

 

    ZeroMemory( &pi, sizeof(PROCESS_INFORMATION) );
    ZeroMemory( &si, sizeof(STARTUPINFO) );
    si.cb = sizeof(STARTUPINFO);
    si.dwFlags |= STARTF_USESTDHANDLES;
    si.wShowWindow =SW_HIDE;
    si.hStdInput = NULL;
    si.hStdError = NULL;
    si.hStdOutput = h;


    ret = CreateProcess(NULL, cmd, NULL, NULL, TRUE, flags, NULL, NULL, &si, &pi);

 

    WaitForSingleObject(pi.hProcess, -1==wait_time_sec?INFINITE:wait_time_sec*1000 );

    CloseHandle(h);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return ret;
}

 

Windows安装MinGW-w64完整指南:从下载配置到编译测试 GCC(GNU编译器集合)是C/C++开发的核心工具链,它通过将源代码编译、链接为可执行程序,支撑了从系统内核到应用软件的构建。在Windows平台,MinGW-w64项目实现了GCC的移植,使开发者能在命令行环境中使用与Linux/Mac一致的编译命令,这对于学习标准C/C++语法、编译开源项目至关重要。其技术价值在于提供了轻量、原生的Windows开发环境,避免了虚拟机或模拟器的开销。典型应用场景包括高校课程作业、跨平台项目移植、以及依赖GNU工具链的开源库编译。本文聚焦于MinGW-w64的安装与配置 阅读详情

相关推荐

现代C++桌面图形应用开发实战:从Qt环境搭建到drawPolygon绘图实现

桌面应用开发是连接算法逻辑与用户交互的关键环节,其核心在于构建直观、响应式的图形用户界面。在C++生态中,跨平台原生GUI框架通过抽象系统底层图形接口,实现了高性能、一致的用户体验。其中,Qt框架凭借其成熟的信号与槽机制、丰富的内置组件和强大的绘图系统,成为开发复杂桌面应用的首选技术方案。该框架不仅简化了事件驱动编程模型,还通过QPainter等核心类支持从基础几何图形到自定义图表的绘制,例如实现drawPolygon等功能,极大地提升了开发效率。在工程实践中,结合CMake构建工具和VSCode等现代编辑

weixin_30357231的博客 437

控制台进程重定向(Win32, C++)

简单控制台输入输出重定向

FlameCyclone的博客 531

windows下文件系统重定向机制

用于存放 64 位系统文件。:用于存放 32 位系统文件(Windows 32-bit on Windows 64-bit)。这是 32 位应用程序在 64 位系统上的 "System32" 目录。当 32 位应用程序试图访问目录时,Windows 会自动将这些访问请求重定向到目录。这称为文件系统重定向。

A3872215的专栏 1315

【输出重定向】Windows下 cmd 、powershell输出重定向

输入重定向:指的是重新指定设备来代替键盘作为新的输入设备;输出重定向:指的是重新指定设备来代替显示器作为新的输出设备。通常是用文件或命令的执行结果来代替键盘作为新的输入设备,而新的输出设备通常指的就是文件。

风高秋月白,雨霁晚霞红 1万+

3D Slicer的学习(二) 图像的分割

先对不同层级标注,然后点击Fill between slices -> Initialize -> Apply拖动层级颜色区域就会变成连续自适应的动态变化区域。如图,点击Level tracing,在图像上放置鼠标,会显示可能想要选中区域的轮廓,点击鼠标右键会将其显示为蓝色。然后点击Grow from seeds -> Initialize -> Apply,显示3D之后会自动扩展到其他位置的相同部位,从而展示整个部位。如图为copy之后,将黄色区域的颜色复制到原本的绿色区域。

tuweibazong的博客 6080

如何把DeepSeek这个奈斯工具接入到Pycharm里

DeepSeek接入到Pycharm中,提高编程效率,以及帮助解决遇到的问题。

学无止境,何以言满 2621

win32 - 将控制台输出重定向到txt文本上

这里需要两个app. parent.cpp #include <Windows.h> #include <stdio.h> int main() { SECURITY_ATTRIBUTES se = {}; se.nLength = sizeof(SECURITY_ATTRIBUTES); se.bInheritHandle = true; ...

qq_39529180的博客 129

STM32F4使用CUBEMX ADC定时采样+DMA

STM32、FFT、ADC、TIM

m0_62379750的博客 4222

将windows命令行的结果保存到文件 (cmd命令的重定向输出)

这里的文件地址在C:/,如果想导出到别的地方,这里需要指定到别的路径。查询ip设置:ipconfig/all。例如:要将ip查询结果记录到文件中。要重定向到的文件:ip.txt。OK,网络配置被保存下来了.

Jason_WangYing的博客 4033

阿里云大模型ACP认证模拟考试(二)

摘要:在阿里云大模型高级工程师 ACP 认证暂无真题题库的现状下,模拟题具有重要意义。其依照真实考试设计,涵盖题型、题量与分值分布,助力考生熟悉考试框架,合理分配答题时间精力,提升效率。同时,模拟题紧扣官方课程,能帮助考生精准定位知识盲点,如大模型架构原理和通义千问应用实践等重点内容,以便针对性完善知识体系。此外,通过练习模拟题,考生可掌握不同题型的解题思维与技巧,快速洞察复杂题目本质,提高答题准确率。

davidkorhenn的博客 2070

自动化学报latex模板——ctex2.4.6和ctex2.9.2直接使用步骤

自动化学报latex模板——ctex2.4.6和ctex2.9.2直接使用步骤 1.背景及问题 最近在使用自动化学报latex模板写作业时,一只对latex搞不清楚,网上关于各种版本的latex下载了一堆(比如ctex中文套装方案的各个版本及texlive+texstudio方案,中间还升级了miktex,windet等),发现都未能成功编译出来自动化学报的latex模板,反正开始头很大!!!最后终于没忍住打开了: 自动化学报官网下载模板链接,因为我就要用latex模板(不能服输!)找到的解决方案是:使用

QIANFANGshiwo的博客 7709

控制台输出重定向到文件

D:\hxh1\C#>Cn usage:Cn n D:\hxh1\C#>Cn 5 >C5.txt D:\hxh1\C#>Cn 4 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 using System; namespace gap { class Cn { static void CnGroup(int n) { for(int i=0;i<n;i++) { for(int j=i;j<i+n;...

u010401391的专栏 901

行业变革下的功能安全落地痛点3:高阶智驾安全责任转移 —— 从 “人为中心” 到 “机器主责” 的产业阵痛

文章围绕高阶智驾(L3 级)落地挑战,探讨安全责任从 “人控” 向 “机控” 转移的本质、技术短板导致的责任模糊、全球法规实践及技术 - 法规 - 保险的破局路径。

my9111526 126

如何让控制台程序的打印输出实时写入到文件和显示在屏幕显示器上

如何让控制台程序的打印输出实时写入到文件和显示在屏幕显示器上

tides0726的博客 1611

22、云数据中心网络(DCN)部署最佳实践

本文详细介绍了云数据中心网络(DCN)部署的最佳实践,涵盖SDN设计、服务网络规划、管理网络规划等方面。通过合理的架构设计、路由规划和组件协同,提升数据中心的自动化水平、可靠性及安全性,以满足不断增长的业务需求。

d6e7f8的博客 186

基于 Qt C++ 的 船舶导航系统 UI

你想实现一个基于 **Qt C++** 的 **船舶导航系统 UI**,核心功能包括 **Qt Quick** 电子海图显示和 **NMEA 0183** 协议解析。"断开" : "连接"创建一个 Qt Quick 项目,选择 **Qt 6** 版本,确保勾选 **Qt Quick**、**Qt Network** 和 **Qt SQL** 模块。Label { text: "纬度:" }3. **连接设备**:点击 "连接" 按钮连接到 GPS 设备或模拟数据源。title: "连接设置"

寒寒豆豆软件公司的博客 127

Windows管道与StdIn、StdOut重定向

在Windows编程中,重定向需要用到管道(Pipe)的概念。管道是一种用于在进程间共享数据的机制。一个管道类似于一个管子的两端,一端是写入的,一端是读出的。由一个进程从写入端写入、另一个进程从读出端读出,从而实现通信,就向一个“管道”一样。 重定向的原理是: 如果要重定向stdout的话,先生成一个管道, 管道的写入端交给子进程去写,主程序从管道的读出端读数据,然后可以把数据写成文件、显示等等。重定向stderr和stdout是相同的。 如果要重定向stdin的话,生成一个管道, 管道的写入端由主程序写,

聪明的狐狸 7186

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

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

Python标准输出重定向

目录 Python标准输出重定向 声明 一. 背景知识 二. 重定向方式 2.1 控制台重定向 2.2 print &gt;&gt;重定向 2.3 sys.stdout重定向 2.4 上下文管理器(Context Manager) 2.5 logging模块重定向 三. 参考资料 Python标准输出重定向 标签: Python stdout 重定向 声明 本文基于Python2.7版本,...

weixin_34255055的博客 440

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

cmd命令重定向

cmd命令重定向

ciengwu的专栏 1675

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

启动控制台程序,重定向输入输出流

新建一个win32项目,加入下面这些代码就可以启动控制台程序,并且重定向输出流到控制台程序 AllocConsole(); _hwndConsole = GetConsoleWindow(); if (_hwndConsole != NULL) { ShowWindow(_hwndConsole, SW_SHOW);

keep_moving_cqu的专栏 1579

将程序输出在控制台的内容输出到文档中

老师布置了一个小作业,需要将学校首页内容爬取下来。 我实现了内容爬取后,内容输出到了控制台。 我的目的是实现控制台内容输出成一个文本文档。 在网上搜索后找到了一种直接在Eclipse中设置 的方法。请参考如下博客: http://blog.youkuaiyun.com/yongh701/article/details/51499816 我是用了以后觉得非常好用。刚好这两天在学习java基础的IO

温馨娜的博客 3461

Windows下将git的控制台输出保存到文本文件的几种方法

总结了常用的在Git下(Linux)将控制台输出保存到文本的方法。

weixin_43858032的博客 2463

重新定位windows窗口程序的标准输出

前面转载了两篇关于windows下窗口程序printf函数输出的问题,这里做一个简单的总结。 1.我们可以在开发时修改项目的链接属性,把[链接器]-[系统]-[子系统]修改为/SUBSYSTEM:CONSOLE,并把主函数名换成 main,这样在开发阶段就能看到printf输出

石头 1314

Windows下输出控制台内容到文件

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34327223的博客 3772

操作系统 实验7 控制台重定向

使用管道实现重定向功能。在程序中启动新的进程,在新进程中执行ping.exe 程序,使用管道技术将ping. exe的输出结果重定向到Windows的窗口中。在进程执行结束后,恢复系统默认的输入/输出。1、在 项目的属性页->高级->字符集 中,把字符集改为“未设置”2、在项目的属性页->C/C++->语言->符合模式 中,改为“否”在项目属性页->系统->子系统中,把子系统设置为“窗口”按照这个错误提示把strcat改为 strcat_s。3、接着出现下面问题。

huanyuelanjin的博客 566

将控制台内容重定向至文件

使用os.system(command)等模块执行系统命令时,返回值为命令执行结果,命令执行成功返回Ture,否则返回False; 若要得命令本身返回的内容,需要将命令输出至控制台的内容写到文件中,即将标准输出由控制台重定向至文件。 # 将控制台内容重定向至文件 """ 使用os.system(command)等模块执行系统命令时,返回值为命令执行结果,命令执行成功返回Ture,否则返回...

lzhdlw的博客 2312
上一篇: Win32 API获取ListView控件的行和列
下一篇: 自定义控件(自定义窗口)在对话框中接收不到WM_CHAR消息的解决方法
无忧老猪
博客等级 码龄18年 200粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值