1、让程序执行DOS命令
新建项目并命名为CMD
新建源文件CMD.cpp代码如下:
#include<stdio.h>
void main() {
printf("你好,世界");
getchar();
}
项目生成,这时候在文件管理中的CMD项目中会有一个debug文件夹,打开后会看到CMD.exe,调试时访问此文件即可。
win+R打开cmd窗口,如果CMD.exe在C盘中,将CMD.exe的命令行复制下来直接粘贴到cmd窗口中就可以运行,如果在其它盘符,就需要先跳转到其它盘符,例如我的在E盘,先输入
cd\

再输入
E:

再将其目录粘贴在后面就可以了。

如何写一个程序进行上述过程呢?
这里我们学习一个新的函数,system("")
, 在头文件stdio.h
里括号里填写的字符串在程序运行时将会在CMD窗口里执行,system("")
函数只有一个参数。
例如我们写代码如下:
#include<stdlib.h>
void main() {
system("ipconfig");
//暂停
system("pause");
}
调试效果如下:

可以看出这和在CMD窗口里输入DOS命令ipconfig的效果是一样的。
同样的道理,我们打印字符串时并不是只能用printf()函数,也可以用system(“echo ...”)
.
我们保留上面的CMD项目,并新建另一个项目CDM-test,将其设置为启动项目(调试时只执行解决方案中那个已经设置了启动项目的项目):

#include<stdlib.h>
void main() {
system("echo 开始执行test");
system("pause");
system("E:\\CPPprojects\\CMD\\x64\\Debug\\CMD.exe");
//为什么斜杠总有两个?因为其中一个是转义字符,现在记住就行了,以后会讲。
system("echo test执行结束");
}
调试效果如下:

通过以上方法,任何DOS命令都可以通过黑窗口C程序执行,任何CMD黑窗口C程序都可以在CMD窗口中通过命令行执行,所有C程序也都可以通过此方法调用其他黑窗口C程序。
2、调用系统功能
通过C程序调用系统的功能,这里我们学习一个函数MessageBox(0,“”,“”,0)
,此函数在头文件Windows.h
中,有4个参数。我们编写以下代码:
#include<stdio.h>
#include<Windows.h>
void main() {
printf("hello world");
MessageBox(0, "你好,世界", "hello world", 0);
//第一个参数是依赖的窗口编号,代表着由谁来弹出窗口,设置为0就是系统弹出。
//第二个参数是对话框的内容
//第三个参数是对话框的标题
//第四个参数是对话框的类型,设置成0即可。
system("pause");
}
调试效果如下:

通过C程序打开文件:
#include<stdio.h>
#include<Windows.h>
void main() {
printf("hello world");
// MessageBox(0, "你好,世界", "hello world", 0);
//打开文件
ShellExecute(0,"open", "E:\\01.txt", 0, 0, 1);
//暂停
system("pause");
//打开网站
ShellExecute(0, "open", "https://www.baidu.com", 0, 0, 1);
//暂停
system("pause");
}
调试效果如下:

还可以打开软件:
#include<stdio.h>
#include<Windows.h>
void main() {
ShellExecute(0, "open", "E:\\QQ\\Bin\\QQScLauncher.exe", 0, 0, 1);
//暂停
system("pause");
}
效果如下:

除了文件,也可以打开文件夹,打印文档等(把参数open换成print就可以了)
打开系统程序不需要加路径:
#include<stdio.h>
#include<Windows.h>
void main() {
//打开记事本
ShellExecute(0, "open", "notepad", 0, 0, 1);
//暂停
system("pause");
}
效果如下:

第一个参数也是依赖窗口编号,0代表系统。第二个参数是执行什么操作,一般只有print/open。第三个参数是文件路径/名称/网址,第四个第五个是系统保留参数,设置为0即可。最后一个参数是控制打开窗口的大小(最大化,最小化,显示,隐藏等),把上面的代码最后一个参数改成6,就会以最小化的方式打开。读者自行演示。
关注微信公众号axxd_lz回复【C语言】获取视频教程和电子书。
网友评论