C++能制作的程序种类繁多。前段时间一直有一个困扰,就是如何制作诸如shutdown.exe之类的命令行交互程序?
为了防止之后忘记,记录一下。这只是制作程序需要用到的引用程序下载链接:https://codeload.github.com/denniswcai/SmpCommandLine/zip/refs/heads/main
下面是代码(waittodo.cpp):
#include<iostream>
#include<windows.h>
using namespace std;
#include "../cmd-line.hpp"
int main(int argc,char *argv[]){
SmpCommandLine commands( argc, argv );
int time = commands.getInteger( "t",NULL);
string command = commands.getString( "c", NULL);
bool show = commands.getBoolean( "s", NULL );
if(show){
HWND window=GetForegroundWindow();
ShowWindow(window,false);
}
Sleep(1000*time);
system(command.data());
return 0;
}
因为是直供我自己使用的,所以做的比较简陋。
其中引用到的cmd-line.hpp是上述链接下载下来解压后的hpp文件,为了方便使用我自己改了名。
该段代码编译后在命令行(cmd)里输入如下命令:
waittodo -w 10 -c "shutdown -s -f -t 0" -s
运行效果是按下enter后窗口自动隐藏,等待10秒后执行cmd命令shutdown -s -f -t 0 (关机)
-s 代表让窗口自动隐藏。
int main(int argc,char *argv[]){
SmpCommandLine commands( argc, argv );
......
代码中这两行是必要的,相当于是一个框架。
至于剩下的内容:
int time = commands.getInteger( "t",NULL);//获取-t后面的参数,获取的值的类型为int
string command = commands.getString( "c", NULL );//获取-c后面的参数,获取的值类型为string
bool show = commands.getBoolean( "s", NULL );//获取-s参数,如果有出现-s则返回true,否则返回缺省值false
需要注意的是,获取bool参数时,如果有出现-s标志则会返回true,没有的话则是返回缺省值false
同时该程序运行后是没有效果的,需要在cmd命令行下使用。
由于-c获取的是字符串,所以如果字符串中间有空格则需要用引号包括。如果字符串之间没有分割可以省略引号。
代码中的t/s/c这几个都是可以替换成任意字符串的,在命令行输入参数时也需要根据这几个字符串来输入参数.
在获取参数后便可以执行程序中需要的操作了。