这个工具也非常简单,主要原理就是UDP广播的原理。主要就是接收到对应的关机指令以后,执行关机操作。同时自己也可以发送关机指令,并关闭自己所在的电脑。
程序目前还是非常简单的,就一个关机按钮。
下面就是实现方法,新建项目啥的看上一篇
这里直接从代码开始
包含网络模块
在CMakeLists.txt文件中加入网络模块
find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(PowerControl PRIVATE Qt6::Network)
包含相关头文件
在头文件中包含对应的头文件
#include <QUdpSocket> #include <QHostAddress> #include <QProcess> #include <QDir> #include <QtDebug>
初始化UDP Socket绑定端口
m_Scoket = new QUdpSocket(); m_Scoket->bind(8088,QUdpSocket::ShareAddress); connect(m_Scoket,&QUdpSocket::readyRead,this,&MainWindow::getUDPDate);
调用关机指令
其实实现关机的方式有很多,可以在Qt中直接加入关机指令,也可以直接调用关机程序,同样也可以使用脚本来实现关机功能,我这里将实现调用外部脚本来实现功能。
QString strinfo; QProcess p(NULL); QString curPath = QDir::currentPath(); QString toolPath; toolPath = "/BAT"; curPath.append(toolPath); p.setWorkingDirectory(curPath); toolPath = "/poweroff.bat"; curPath.append(toolPath); p.start(curPath); if(p.waitForFinished()) { } else { }
核心功能就基本完成了,在Bat文件里面直接写CMD指令就可以了。
解析就更简单了,看下
while (m_Scoket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(m_Scoket->pendingDatagramSize()); m_Scoket->readDatagram(datagram.data(),datagram.size()); if(datagram.toInt() == 0x01) { powerOffBat(); } }
这里呢,有个问题出现了,就是我把程序Release了以后你,运行的时候会有CMD窗口,好烦人,百度了一对QT相关的设置,都没有搞定,最后还是找CMake关键字找到了
解决连接在这里https://blog.csdn.net/tadashilh/article/details/105861292
防止找不到系列:
只需要在cmakelists.txt中添加set(CMAKE_CXX_FLAGS "-mwindows")
或者在cmake时指定编译参数cmake -DCMAKE_CXX_FLAGS="-mwindows"即可
如果用的是c而不是c++,就只需把CXX改为C