C++ 调用windows系统DOS命令的函数 system(char* command)

简介: C++ 调用windows系统DOS命令的函数 system(char* command)

除了我们经常用的system("pause");暂停命令外,还有以下这些功能也很不错:

system("title C++颜色设置程序"); //设置控制台窗口的标题,即cmd.exe的标题
system("mode con cols=48 lines=25"); //设置窗口宽度高度
system("date /t");  //显示日期
system("time /t");  //显示时间
system("shutdown -s -t 3600");  //延时关机  3600秒即一小时后关机
system("shutdown -a");  //取消延时关机
system("color 0B");  //设置文本和背景颜色


当然基本上所有的DOS命令当能被system()调用,下面主要说一下color命令的颜色设置,一共有16种颜色,编号0~15,由十六进制的0~F来指定。

E:\>color /?
设置默认的控制台前景和背景颜色。
COLOR [attr]
  attr        指定控制台输出的颜色属性
颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为
前景。每个数字可以为以下任何值之一:
    0 = 黑色       8 = 灰色
    1 = 蓝色       9 = 淡蓝色
    2 = 绿色       A = 淡绿色
    3 = 浅绿色     B = 淡浅绿色
    4 = 红色       C = 淡红色
    5 = 紫色       D = 淡紫色
    6 = 黄色       E = 淡黄色
    7 = 白色       F = 亮白色
如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时
的颜色。这个值来自当前控制台窗口、/T 命令行开关或
DefaultColor 注册表值。
如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令
会将 ERRORLEVEL 设置为 1。
例如: "COLOR fc" 在亮白色上产生亮红色
E:\>


写一个遍历所有颜色的程序:

#include <iostream>
#include <ctime>
#include <iomanip>
#include <windows.h> 
using namespace std;
int main(void)
{
  char Color[9]="color ";
  for (int i=0;i<16;i++){
    for(int j=0;j<16;j++){
      Color[6]=(i>9?i-10:i)+(i>9?'A':'0');
      Color[7]=(j>9?j-10:j)+(j>9?'A':'0');
      system(Color);
      cout<<setw(4)<<(j|(i*16));
    }
    cout<<endl; 
  }
  system("color 0F");
  return 0;
}

运行中间过程:


20210130231030370.png


自定义函数systemColor(),color参数用两个10进制数代替:

#include <iostream>
#include <ctime>
#include <iomanip>
#include <windows.h> 
using namespace std;
void systemColor(unsigned short forecolor=15, unsigned short bgcolor=0)
{
  char Color[9]="color ";
  int i=bgcolor%16;
  int j=forecolor%16;
  Color[6]=(i>9?i-10:i)+(i>9?'A':'0');
  Color[7]=(j>9?j-10:j)+(j>9?'A':'0');
  system(Color);
}
int main(void)
{
  systemColor(14,1);  
  cout<<"title C++颜色设置程序"<<endl;
  return 0;
}

缺点:颜色设置范围是整个控制台窗口并非是指定输出文本,而且如果循环中多次调用运行速度偏慢。



设置文本颜色属性的优化


使用<windows.h>库函数SetConsoleTextAttribute()优化一下,定义函数用以设置控制台文本颜色属性,顺带引进一个设置光标位置的函数SetConsoleCursorPosition()。


SetConsoleTextAttribute()的颜色参数只用BLUE GREEN RED三原色,还有是否高亮INTENSITY,相当于三原色通过或运算来合成16种颜色的编号。这种配色方案记忆起来比较繁琐,还是用systemcolor的方法,用两个10进制数代替编号比较方便。


#include <iostream>
#include <ctime>
#include <iomanip>
#include <windows.h> 
using namespace std;
void setColor(unsigned short foreColor=15,unsigned short bgColor=0) 
{ //设置输出文本的前景色和背景色 
  HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute(hConsole, (foreColor%16)|((bgColor%16)*16));
}
void gotoXY(unsigned short x, unsigned short y)
{ //设置光标位置,坐标从左上角(0,0)起始 
    COORD position;
    position.X = x;
    position.Y = y;
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hConsole, position);
}
int main(void)
{
  SetConsoleTitle("程序执行时控制台的标题");  //相当于system("程序执行时控制台的标题"); 
  for (int i=0;i<16;i++){
    for(int j=0;j<16;j++){
      gotoXY(j*4,i);
      setColor(i,j);
      cout<<setw(4)<<(j|(i*16));
    }
  cout<<endl; 
  }
  setColor();
  return 0;
}


运行结果如下:

20210131000207686.png




颜色编号的或运算


前景色背景色各16种,相互叠加一共256种颜色搭配方案。前、背景颜色是通过按位或 “|” 运算求得的,背景色前景色编号都是0~15,对应4位的二进制数0000~1111,所以背景色编号需要乘以16,成为8位的二进制数。比如 setColor(14,1),14=1110,14*16=1110 0000,相当于背景色移到高四位而低四位全为0,前景色不变它的高四位全为0。这样处理后变成2个8位二进制数按位求或:1110 0000 | 0000 0001 = 1110 0001,结果为225。与上面的颜色表截图对比,225代表蓝色背景淡黄色前景。



位运算符

位运算除了或运算 |,还有:与运算 &、异或 ^ 、求反 ~、右位移 >>、左位移 <<


异或 ^ ,两数对应位上相反为真,相同为假。 总有:a^0=a, a^b^b=a  ==>对调两数: int x=1,y=2; y=x^y; x=x^y; y=x^y; 注意大数的溢出

右位移 >> 一个数每右移一位相当于被整除2; 左位移 >> 每左移一位相当于乘以2,注意有溢出另算。


<<=    左移且赋值运算符    C <<= 2 等同于 C = C << 2

>>=    右移且赋值运算符    C >>= 2 等同于 C = C >> 2

|=       按位或且赋值运算符    C |= 2 等同于 C = C | 2

&=     按位与且赋值运算符    C &= 2 等同于 C = C & 2

^=      按位异或且赋值运算符    C ^= 2 等同于 C = C ^ 2

注意:没有~=




#include <iostream>
using namespace std;
int main(void)
{
  int i=25;  // 0001 1001 
  int j=12;  // 0000 1100 
  cout << (i|j) <<endl;  //或运算:0001 1101 = 29 
  cout << (i&j) <<endl;  //与运算:0000 1000 = 8 
  cout << (i^j) <<endl;  //异或运算: 0001 0101 = 21 
  cout << (i<<3) <<endl; //向左移3位: 1100 1000 = 200
  cout << (i>>2) <<endl; //向右移2位: 0000 0110 = 6
  cout << (~i) <<endl;   //求反运算: 整数共32位,后8位:1110 0110
  //计算机中整型数是以32位二进制补码形式存储的,补码等于反码+1。
  //求反把最高的符号位也反了,所以不论正负都有整数n求反:~n=-(n+1)
  return 0;
}
/*
运算结果:
29
8
21
200
6
-26
--------------------------------
Process exited after 1.833 seconds with return value 0
请按任意键继续. . .
*/




目录
相关文章
|
安全 数据安全/隐私保护 Windows
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡
1108 16
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡
|
关系型数据库 虚拟化 UED
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
489 7
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
|
7月前
|
运维 安全 Linux
【清爽加速】Windows 11 Pro 24H2-Emmy精简系统
“清爽加速”Windows 11 Pro 24H2 针对老旧或低配设备,通过精简系统、优化服务与简化装机流程,降低资源占用,提升运行流畅度,兼顾安全性与稳定性,让老设备也能轻松应对日常办公与轻度娱乐需求。
479 1
【清爽加速】Windows 11 Pro 24H2-Emmy精简系统
|
7月前
|
安全 搜索推荐 开发者
【适度精简】Windows 7 旗舰版-emmy精简系统
Windows 7旗舰版因硬件占用高、冗余组件多、兼容性差及缺乏安全更新等问题,逐渐难以满足用户需求。适度精简版通过去除无用组件、优化性能与安全性,提升老旧设备运行效率,增强兼容性与稳定性,同时保留用户熟悉的操作界面,降低学习成本,满足个性化需求,延续Windows 7的实用价值。
368 2
|
7月前
|
安全 数据安全/隐私保护 Windows
ZyperWin++使用教程!让Windows更丝滑!c盘飘红一键搞定!ZyperWin++解决系统优化、Office安装和系统激活
ZyperWin++是一款仅5MB的开源免费Windows优化工具,支持快速优化、自定义设置与垃圾清理,兼具系统加速、隐私保护、Office安装等功能,轻便无广告,小白也能轻松上手,是提升电脑性能的全能管家。
2193 0
|
10月前
|
Ubuntu Linux 数据安全/隐私保护
Windows中安装WSL 2和Ubuntu系统的教程
回看这一路,有趣吧?你已经跨界成为了一个Windows和Linux的桥梁。期待在代码的世界里,把一切玩得风生水起!
542 13
|
8月前
|
Ubuntu Linux Windows
windows11系统安装ubuntu系统详细步骤
安装后,您可以直接从商店启动应用程序来源
1577 0
|
9月前
|
持续交付 Windows
如何使用Sysprep准备Windows系统并使用自动应答
通过Sysprep准备Windows系统,可实现SID重置与系统定制。进入Sysprep后,可安装软件、设置默认桌面文件,并使用Windows SIM创建应答文件以实现自动化部署。适用于系统克隆与批量部署场景。
|
10月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
254 0
|
11月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
5748 0

热门文章

最新文章

下一篇
开通oss服务