资源简介
通过向通过状态下的目标计算机网卡发送魔术包,远程控制目标计算机开机; 以及远程控制计算机关机。
代码片段和文件信息
/******
* WakeOnLAN
* 注意:需要设置广播地址,例如:192.168.1.255
******/
#include
#include
#include
#include “TRemoteCtrlPC.h“
TRemoteCtrlPC::TRemoteCtrlPC(Qobject *parent)
{
Q_UNUSED(parent)
}
/* Note:
* 被控计算机需要支持网络唤醒功能(Wake on LAN)
* 1.组织魔法包(MgicPacket) 由6字节0xFF和重复16次的MAC地址 102字节
* 2.通过UDP的方式广播 IP地址为路由的广播地址 如:网段为192.168.1.xIP设为192.168.1.255
* @strMac: 格式示例 “20:af:0a:47:aa:bb“
*/
void TRemoteCtrlPC::wakeOnLAN(QString strMac)
{
/*将字符串MAC转换成十六进制 存入数组*/
char cstrMacAddr[6];
bool isOK;
for(int j = 0;j < 6; j++){
if(j < 5){
cstrMacAddr[j] = strMac.mid(strMac.indexOf(“:“j*3) - 22).toInt(&isOK16);
if(false == isOK)
return ;
}else if(j == 5){
cstrMacAddr[j] = strMac.mid(strMac.indexOf(“:“j*3 - 1) + 12).toInt(&isOK16);
if(false == isOK)
return ;
}
}
/*构建一个魔术唤醒包 6字节0xFF 和 16次的 Mac地址*/
QByteArray magicPacket;
/*6个 0xFF*/
for(int i = 0;i < 6; i++){
magicPacket[i] = 0xFF;
}
/*16个 MAC*/
for(int k = 0; k < 16; k++)
{
for(int l = 0; l < 6; l++)
magicPacket[(k+1)*6 + l] = cstrMacAddr[l];
}
QHostAddress FakeAddress;
FakeAddress.setAddress (“255.255.255.255“);
QUdpSocket udpSocket;
udpSocket.writeDatagram(magicPacket 102 FakeAddress 9);
}
/* https://blog.csdn.net/smstong/article/details/16879347 */
/* https://www.cnblogs.com/shenjieblog/p/5455691.html
* Note:实现远程关机原理
* 1.用户管理:被控计算机启用来宾账户(Guest)
* 2.运行gpedit.msc 允许Guest强制关机 拒绝从网络访问计算机里删除 Guest
*/
void TRemoteCtrlPC::remoteShutDown(QString strIp)
{
m_strIp = strIp;
/*命令的执行过程会阻塞 放入线程执行*/
this->start();
}
void TRemoteCtrlPC::run()
{
QProcess cmd;
QString strResult;
QByteArray arrayOut;
QString strCmd = “shutdown -s -t 5 -m \\\\“; //四个斜杠 转义
strCmd += m_strIp;
// qDebug()<<“关闭电脑:“<
cmd.start(strCmd);
cmd.waitForFinished(); // !!!阻塞操作 放在主线程会导致窗口卡死 直至执行完成
arrayOut = cmd.readAllStandardOutput();
strResult = QString::fromLocal8Bit(arrayOut);
emit signalCmdFinished(strResult); //命令执行完成 返回命令执行结果
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 452 2020-06-14 10:06 tremotectrlpc.h
文件 1621 2020-06-14 10:24 ttestforremotectrlpc.cpp
文件 570 2020-06-14 10:06 ttestforremotectrlpc.h
文件 2724 2020-06-22 07:30 tremotectrlpc.cpp
- 上一篇:使用wxWidgets进行跨平台程序开发
- 下一篇:Qt5串口通信-windows
评论
共有 条评论