windows下C/C++调用命令行不显示执行窗口的方法

本文介绍了在C/C++中执行DOS命令时隐藏命令行窗口的方法,包括使用WinExec()和CreateProcess()两种主要方式,并提供了具体的实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 问题背景 :  使用dos 命令嵌入在C/C++代码中 ,执行时会显示DOS窗口。

 

2. 嵌入在C/C++代码中的命令行一般有以下几种方式:

SellExcute()

----//调用计算器
----ShellExecute(NULL,"open","calc.exe",NULL,NULL,SW_SHOWNORMAL);
----//调用记事本
----ShellExecute(NULL,"open","NOTEPAD.EXE",NULL,NULL,SW_SHOWNORMAL)

system()

-----system("dir");

WinExec()

使用方法往下看。

CreateProcess()

使用方法往下看。

参数省略....................................................

3. 解决方案:

 

3.1  使用WinExec()

 

此种方式比较简单易用。

格式:

WinExec(cmd,SW_HIDE);


 

 

3.2 使用CreateProcess()

 

#pragma comment( linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" ) // 设置入口地址

#include   <windows.h>   

#include   <stdio.h>   



#define   COMMENDLINE   "ping 127.0.0.1"



//调用命令行命令而不显示命令行窗口

BOOL system_hide(char* CommandLine)   

{   

	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, CommandLine, NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))     

	{   

		return   FALSE;   

	}   

	CloseHandle(hWrite);   



	char   buffer[4096]   =   {0};   

	DWORD   bytesRead;     

	while(true)     

	{   

		memset(buffer,0,strlen(buffer));

		if(ReadFile(hRead,buffer,4095,&bytesRead,NULL)==NULL)   

			break;   

		//buffer中就是执行的结果,可以保存到文本,也可以直接输出   

		//printf(buffer);//这行注释掉就可以了  

		Sleep(100);     

	}     

	return   TRUE;   

}   



int main(int argc, char* argv[])   

{   

	system_hide(COMMENDLINE);//不显示命令窗口

	//system(COMMENDLINE);//显示命令行窗口

	return 0;   

}


 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值