概述

下面的程序是解决windows 下面调用 system() 函数的时候,会有窗口弹出的问题

头文件

#include <windows.h>

源码

/**
* @brief 普通字符转宽字符
*
* @param lpcszStr 普通字符
* @param lpwszStr 转换后的宽字符
* @param dwSize 存储宽字符的缓冲区大小
*
* @return
*/
BOOL MByteToWChar(LPCSTR lpcszStr, LPWSTR lpwszStr, DWORD dwSize)
{
// Get the required size of the buffer that receives the Unicode
// string.
DWORD dwMinSize;
dwMinSize = MultiByteToWideChar (CP_ACP, , lpcszStr, -, NULL, ); if(dwSize < dwMinSize)
{
return FALSE;
} // Convert headers from ASCII to Unicode.
MultiByteToWideChar (CP_ACP, , lpcszStr, -, lpwszStr, dwMinSize);
return TRUE;
}
/**
* @brief 宽字符转普通字符
*
* @param lpcwszStr 宽字符
* @param lpszStr 转换后的普通字符
* @param dwSize 存储普通字符的缓冲区大小
*
* @return
*/
BOOL WCharToMByte(LPCWSTR lpcwszStr, LPSTR lpszStr, DWORD dwSize)
{
DWORD dwMinSize;
dwMinSize = WideCharToMultiByte(CP_OEMCP,,lpcwszStr,-,NULL,,NULL,FALSE);
if(dwSize < dwMinSize)
{
return FALSE;
}
WideCharToMultiByte(CP_OEMCP,,lpcwszStr,-,lpszStr,dwSize,NULL,FALSE);
return TRUE;
}
/**
* @brief
* WinExec 和 ShellExecute 两个函数在执行的时候不会等待命令执行完成,
* 会造成文件没有解压完就执行完了,不符合我们的需求
* ret=WinExec(cmd,SW_HIDE);
* ShellExecute((HWND)"open", LPCWSTR(cmd), NULL, NULL,NULL,SW_HIDE);
*
* system 函数调用可以,但是会有窗口弹出
* ret = system(cmd);
*
* 采用下面的方式
*
* @param cmd 这里面不能出现 > 符号
*
* @return
*
*/
int nb_system (char *cmd)
{
wchar_t cmd_w[] = {};
MByteToWChar(cmd, cmd_w, sizeof(cmd_w)/sizeof(cmd_w[]));
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof STARTUPINFO; PROCESS_INFORMATION pi={};
if(CreateProcess(NULL,cmd_w,NULL,NULL,TRUE,NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW,NULL,NULL,&si,&pi))
{
//等待进程执行完毕
WaitForSingleObject(pi.hProcess ,INFINITE); //释放资源
CloseHandle(pi.hProcess );
CloseHandle(pi.hThread );
}
else
{
//运行失败
return -;
} return ;
}

测试

int main()

{
nb_system("dir");
}

注意

本示例中使用的是 CreateProcess 函数,该函数对 > 符号不支持,所以命令中的 > 符号相关的处理会不执行

windows 下隐藏 system 函数弹窗的更多相关文章

  1. 【C/C++】Linux下使用system()函数一定要谨慎

    [C/C++]Linux下使用system()函数一定要谨慎 http://my.oschina.net/renhc/blog/53580 曾经的曾经,被system()函数折磨过,之所以这样,是因为 ...

  2. windows下隐藏磁盘分区

    在一定情况下有的人会想隐藏掉部分分区,比如双系统的情况 有两种方式 方法1: 删除盘符,适合在双系统的情况下隐藏掉另外一个系统相关的分区 请注意是删除盘符 不是删除分区 此电脑右键管理 点击磁盘管理 ...

  3. windows下隐藏磁盘分区(转)

    在一定情况下有的人会想隐藏掉部分分区,比如双系统的情况 有两种方式 方法1: 删除盘符,适合在双系统的情况下隐藏掉另外一个系统相关的分区 请注意是删除盘符 不是删除分区 此电脑右键管理 点击磁盘管理 ...

  4. Linux下使用system()函数一定要谨慎

    转载自:http://my.oschina.net/renhc/blog/53580   linux尽量避免使用system. 曾经的曾经,被system()函数折磨过,之所以这样,是因为对syste ...

  5. [转]【C/C++】Linux下使用system()函数一定要谨慎

    曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入.只是简单的知道用这个函数执行一个系统命令,这远远不够,它的返回值.它所执行命令的返回值以及命令执行失败原 ...

  6. (转)Linux下使用system()函数一定要谨慎

    转:http://my.oschina.net/renhc/blog/53580 曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入.只是简单的知道用这个函 ...

  7. Windows下绘制数学函数图像的方法

    一.安装相关软件 在Windows中安装VirtualBox: 在VirtualBox中安装Ubuntu Server: 在Ubuntu Server中安装cifs-utils:sudo apt-ge ...

  8. windows下使用gethostbyname函数报错无法解析的外部符号

    #include <winsock.h> 使用gethostbyname的函数的时候,会显示无法解析的外部符号. 主要问题是因为没有引用WS2_32的lib库 在include上面引用就行 ...

  9. c/c++中system函数在Linux和windows下区别

    windows 在windows下的system函数中命令可以不区别大小写! 功 能: 发出一个DOS命令 #include <stdlib.h> int system(char *com ...

随机推荐

  1. UNIGUI:How to redirect and close session?

    Hello, i would have 2 unigui app. the first app is a simple authentification app and second will be ...

  2. 算法(Algorithms)第4版 练习 1.4.1

    =N(N-1)(N-2)/6

  3. php数据结构课程---1、数据结构基础介绍(程序是什么)

    php数据结构课程---1.数据结构基础介绍(程序是什么) 一.总结 一句话总结: 程序=数据结构+算法 设计好数据结构,程序就等于成功了一半. 数据结构是程序设计的基石. 1.数据的逻辑结构和物理结 ...

  4. 分享知识-快乐自己:揭秘HDFS

    揭秘HDFS: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘HBas ...

  5. Python with MYSQL - sytax problem

    Con= MySQLdb.connect(host=',db='test') cur=Con.cursor() cur.execute('insert into staff_daily(Date,Na ...

  6. Selenium-使用firepath识别元素

    利用firepath进行元素识别提前已经安装好firebug和firepath 比如,打开http://www.baidu.com 1.按下F12 2.点击如图的位置 3.选择元素,可以定位出元素的属 ...

  7. leetcode 268 Missing Number(异或运算的应用)

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...

  8. SPOJ Query on a tree III (树剖(dfs序)+主席树 || Splay等平衡树)(询问点)

    You are given a node-labeled rooted tree with n nodes. Define the query (x, k): Find the node whose ...

  9. bzoj 2733 永无乡 线段树

    题目: 支持两种操作: 合并两点所在的联通块 查询某点所在联通块内权值第k小. 题解 平衡树启发式合并随便搞一搞就好了. 我写了一个线段树合并 #include <cstdio> #inc ...

  10. [转]CSS遮罩——如何在CSS中使用遮罩

    特别声明:此篇文章由D姐根据Christian Schaefer的英文文章原名<CSS Masks – How To Use Masking In CSS Now>进行翻译,整个译文带有我 ...