新process的启动,可以通过system(const char*)函数启动另外一个程序,但是有一个小问题,就是每次执行system函数的时候,都会弹出dos窗口(命令行嘛~~~),有没有什么方法能够让我调用的程序在后台执行呢?

好像无法隐藏system函数的窗口,只能最小化等参数,不过有另外一种选择开启另外一个进程。

其方法主要有以下几种:

1. WinExec(LPCSTR, UInt)函数
        其第一个参数相当于system函数的参数,第二个参数可以设置窗口是否显示,SW_HIDE这个宏表示隐藏窗口,例如:
      WinExec(cmd.c_str(),SW_HIDE);//cmd(string类型)中为我们要调用的程序名及其参数, 如 “dir *.exe ”
    但是这个有一个问题,这个函数创建完这个进程后就返回了,也就是说它返回后,该进程不一定已经结束,这个就有点和system不一样了,在这里我无法使用这个函数了~~~

2.ShellExecuteEx(SHELLEXECUTEINFO*)函数
       其参数是一个结构体,具体作用还是类似于system的参数,使用例子:
    SHELLEXECUTEINFO ShExecInfo = {0};
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = NULL;
    ShExecInfo.lpFile = cmd.c_str();//调用的程序名
    ShExecInfo.lpParameters = par.c_str();//调用程序的命令行参数
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_HIDE;//窗口状态为隐藏
    ShExecInfo.hInstApp = NULL;
    ShellExecuteEx(&ShExecInfo);
    但是这个还是有问题,同1中一样,无法确定该进程是否结束~~~

3.CreateProcess函数,这个的用法可以去百度一下~~~

然后,有没有办法使得主程序在其启动的子程序结束之前一直保持暂停状态,可以使用
    WaitForSingleObject(HANDLE,DWORD)函数
    例子:
    在2的代码下加一行:WaitForSingleObject(ShExecInfo.hProcess,INFINITE);////等到该进程结束

完全可以把上述代码片段封装成一个小的函数,来代替system函数
    void mySystem(const string& cmd, const string& par, int nShow)
    {
       SHELLEXECUTEINFO ShExecInfo = {0};
        ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
        ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
        ShExecInfo.hwnd = NULL;
        ShExecInfo.lpVerb = NULL;
        ShExecInfo.lpFile = cmd.c_str();//调用的程序名
        ShExecInfo.lpParameters = par.c_str();//调用程序的命令行参数
        ShExecInfo.lpDirectory = NULL;
        ShExecInfo.nShow = SW_HIDE;//窗口状态为隐藏
        ShExecInfo.hInstApp = NULL;
        ShellExecuteEx(&ShExecInfo); //启动新的程序
        WaitForSingleObject(ShExecInfo.hProcess,INFINITE);////等到该进程结束

}

那么bat脚本怎么办呢?? 以下是百度的方法,可以参考。

 bat文件运行时会有一个黑黑的cmd.exe窗口,很吓人,就算用start/min命令去运行bat文件,电脑的任务栏下仍然会有相关的图标,怎么让bat文件在后台无声无息无影无形地运行呢?以下的办法可以达到你的目的。

方法一
  bat里有隐藏窗口的命令,很简单,只需要在代码头部加一段代码就可以了。
  @echo off
  if "%1" == "h" goto begin
  mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
  :begin
  ::下面是你自己的代码。 方法二
  在你批处理的相同目录下新建一个记事本,里面输入:
  DIM objShell set objShell=wscript.createObject("wscript.shell")
  iReturn=objShell.Run("cmd.exe /C c:\1.bat", 0, TRUE)   
  (其中win.bat为你自己的批处理名字,自己改)
  然后把这个记事本保存为后缀名为.vbe的文件,到时候你只要运行这个vbe文件就达到目的了!
  可以写的简单点:
  Set ws = CreateObject("Wscript.Shell")
  ws.run "cmd /c c:\1.bat",0
  或者
  CreateObject("WScript.Shell").Run "cmd /c c:\1.bat",0
  (这种写法很多杀软报毒, 需要替换参数0)
  最后那个0是指窗口参数,用法为:
  0 隐藏窗口并激活另一窗口。
  1 激活并显示一个窗口。若窗口是最小化或最大化,则恢复到其原来的大小和位置。
  2 激活窗口并以最小化显示该窗口。
  3 激活窗口并以最大化显示该窗口。
  4 按窗口最近的大小和位置显示。活动窗口保持活动。
  5 以当前大小和位置激活并显示窗口。
  6 最小化指定窗口并激活按 Z 序排序的下一个顶层窗口。
  7 最小化显示窗口。活动窗口保持活动。
  8 以当前状态显示窗口。活动窗口保持活动。
  9 激活并显示窗口。若窗口是最小化或最大化,则恢复到原来的大小和位置。在还原应用程序的最小化窗口时,应指定该标志。 http://blog.csdn.net/flyingleo1981/article/details/72621168

隐藏system窗口你也行(就是那个cmd窗口,好多方法)的更多相关文章

  1. bat批处理文件运行时隐藏cmd窗口

    想让bat运行时隐藏cmd窗口,最好的方法是使用vbs文件实现, 1.新建一个文本文档,改名为123.vbs,编辑内容: set ws=WScript.CreateObject("WScri ...

  2. java在CMD窗口执行程序的时候输入密码(隐藏一些敏感信息)

    有时候我们需要从CMD窗口执行一些命令,有时候会输入一些敏感的信息,比如密码之类的东西,所以我们可以从控制台读取但是不希望别人看见我们的密码: import java.io.Console; /** ...

  3. 运行bat时隐藏cmd窗口

    运行bat时隐藏cmd窗口 新建一个shrjj.vbs文件,文件内容为: Set ws = CreateObject("Wscript.Shell") ws.run "c ...

  4. system调用命令行命令而不显示命令行窗口

    system调用命令行命令而不显示命令行窗口 通常用system调用命令行命令时都会弹出黑底白字的命令行窗口,下面的代码可以不显示弹出的命令行窗口. 代码如下 #pragma comment( lin ...

  5. C# Selenium操作指南,关闭黑色CMD窗口/禁用图片/隐藏浏览器等

    引用部分:1. 2. 配置部分: ChromeDriverService driverService = ChromeDriverService.CreateDefaultService(); dri ...

  6. python 使用多进程打开多个cmd窗口,并在子进程结束之后关闭cmd窗口

    额,我想表达的是使用os.system()打开另一个可执行文件,然后等待其结束,关闭cmd窗口 主要是我突发奇想想装逼; 如果只是用multiprocessing库的多进程,然后输出信息的话,根本没法 ...

  7. CMD窗口如何调整大小 / 颜色

    Windows默认的命令行工具CMD暴丑无比..很多人都会因为这个原因去寻找漂亮的命令行工具.. 但是很多所谓的命令行工具并不能完美的支持到CMD.. 譬如 PowerCMD 或 Cmder 之流.. ...

  8. VC++6.0一些常见问题解决方法(打开多个窗口、行号、添加文件无响应、更改.exe图标及名称等等)

    背景: 最近使用VC++6.0做一个界面,供测试CAN通信使用.由于客户希望我们提供简单方便的函数接口让其最快速使用CAN,DLL(动态链接库)是不二之选.做DLL需要两个VC窗口进行测试才方便.可是 ...

  9. 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

    一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 pack ...

随机推荐

  1. 【codeforces 758A】Holiday Of Equality

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. 自旋锁解决StackOverflowError案例

    本节笔者分享一个在实际工作中遇到的栈内存溢出(StackOverflowError)问题,以及其解决方案. 问题介绍:笔者负责的一个Java Web项目在启动的时候,需要有一些初始化操作,而接下来的代 ...

  3. IDEA多模块父子依赖maven项目war包部署

    IDEA多模块父子依赖maven项目war包部署 Posted on 2018-04-25 | In IDEA | | Visitors 286 IDEA全称为IntrlliJ IDEA,它是一款非常 ...

  4. Elasticsearch v5.4

    在Windows上安装Elasticsearch v5.4.2   前言 最近项目里为了加快后台系统的搜索速度,决定接入开源的搜索引擎,于是大家都在对比较常用的几个开源做技术调研,比如Lucene+盘 ...

  5. Erlang学习笔记2

    http://wgcode.iteye.com/blog/1007623 第二章 入门 1.所有的变量都必须以大写字母开头,如果要查看某个变量,只要输入变量的名字即可,如果一个变量被赋予值,就称为绑定 ...

  6. Leetcode--easy系列1

    近期開始刷Leetcode题目.花了一个星期先完毕了easy难度级别的题目,easy级别的题目思路比較简单,但不一定就直接AC了,主要是问题要考虑全然.特别是对特殊情况的处理. #6 ZigZag C ...

  7. 10 个免费的 C/C++ 集成开发环境

    集成开发环境(IDE)可以给程序员提供很大的帮助.大多数的IDE包含编译器和解释器.例如微软的 Visual Studio 本身内置的编译器和解释就是很好的例子,Eclipse 是另一个很好的例子.鼓 ...

  8. android仿新浪引导界面

    最近在研究如何做出仿微信,仿新浪等应用,第一次安装使用的使用展示应用程序的新特性和用法. 实现功能:左右手势滑屏 底部小圆点随当前显示页跳动 浮动按钮显示.当触屏事件发生显示,否则就渐渐消失 先转个文 ...

  9. 利用WPF建立自己的3d gis软件(非axhost方式)(三)矢量数据显示控制

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(三)矢量数据显示控制 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew 密 ...

  10. Internet protocol optimizer

    A method for optimizing the throughput of TCP/IP applications by aggregating user application data a ...