在一些实际项目中,经常会遇到一些稀奇古怪的需求,之前做过这样一个项目:在一个移动的车上有一台运行着win10系统的笔记本,这台笔记本通过网线连接着两个网络摄像头,另外笔记本上还插着一个usb接口的intel神经网络计算棒。程序做的是从摄像头采集图像然后使用神经网络计算棒做智能分析,因为测试环境在一个仓库,而研发和测试人员都在办公室,在测试过程中偶尔会出现摄像头无法连接或者神经网络无法推理的问题,测试人员和研发人员吵的不可开交,测试认为不管是断网还是计算棒被拔出系统都应该能监测到并记录到日志或者给使用者提示,所以这里催生出一个新的需求:
(1)监测某个usb设备是否在插上。
(2)可否通过软件实现usb设备的重新拔插操作。
(3)监控系统是否可以连接某个服务器。
(4)隐藏或者显示某个窗口。(这个要求比较奇葩,因为做开发的那个垃圾用python的,他不会直接把命令行窗口隐藏掉,另外还想着从窗口上查看运行状况。)
(5)程序莫名死了,但是进程并没有退出,他们还找不到原因,所以还需要个程序可以监控另一个程序的工作状态并且控制其开启和关闭。
拿到这么个奇葩的需求,我是崩溃的,尽管这是个很垃圾的项目,但既然领导这么说了,咱们只能照做,工作中别人做不出来的咱能做不出来,效果就达到了,管他呢。我只好仿照着360安全卫士的那种浮动图标形式,祭出了我多年未用的MFC来编写界面。界面的程序就不传了,这里仅把程序控制,usb设备监测、网络状态监测以及窗口显示隐藏的部分展示如下:
#pragma once
#include <Winsock2.h>
#include "iphlpapi.h"
#include<tchar.h>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
#pragma comment(lib,"Iphlpapi.lib")
#pragma comment(lib,"Ws2_32.lib")
typedef HANDLE(WINAPI* ICMPCREATEFILE)(VOID);
typedef INT(WINAPI* ICMPCLOSEHANDLE)(HANDLE);
typedef DWORD(WINAPI* ICMPSENDECHO)(HANDLE, DWORD, LPVOID, WORD, PIP_OPTION_INFORMATION, LPVOID, DWORD, DWORD);
//定义三个指针函数
ICMPCREATEFILE pIcmpCreateFile;
ICMPCLOSEHANDLE pIcmpCloseHandle;
ICMPSENDECHO pIc