QQ登录

只需一步,快速开始

332上位机VC MFC远程控制局域网计算机

[ 复制链接 ]

332上位机VC MFC远程控制局域网计算机

332上位机VC MFC远程控制局域网计算机

远程控制局域网计算机
功能展示
QQ是我们日常常用软件,可以方便实现远程计算机控制,远程控制在我们工业控制领域也常用,如在办公室远程控件车间生产现场电脑等,我们当前例程实现了远程计算机的简单操作,如 注销,关闭 重启等,效果如图,例程启动点击任一按钮都会连接事先已打开的服务器程序,然后通过远程操作服务器程序间接执行我们想要的任务;

要点提示
我们例程是通过 WINDOWS SOCKET API函数开发的基于TCP协议的程序,采用客户端,服务器端模式设计;
服务器端程序首先设置了本机的地址及端口号,随后用套接字绑定地址,并开始监听客户端程序,一发现有客服端连接就接受其请求且发送信息到客户端;
客户端应用程序 得设置连接的服务器信息,包括服务器的地址及端口号,然后连接服务器,在服务器接收请求后,向服务器发送数据,控制服务器软件所在的电脑;

实现功能
1.先新建基于对话框的应用程序,作为服务器端服务软件;
2.添加套接字函数支持代码#include “winsock2.h”; #pragma comment(lib,“ws2_32.lib”)及两成员变量,一自定义函数public: SOCKET m_server,m_client; void TreatFun();
void CGkbc8Dlg::TreatFun()
{
sockaddr_in serveraddr;
char buffer[1];
int len =sizeof(serveraddr);
if (m_client==0) //客户端连接服务器
m_client = accept(m_server,(struct sockaddr*)&serveraddr,&len);
else
{
int num = recv(m_client,buffer,1,0);//接收客户端的数据
CWnd* cwnd;
static HANDLE hToken;
static TOKEN_PRIVILEGES tp;
static LUID luid;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
tp.PrivilegeCount =1;
tp.Privileges [0].Luid =luid;
tp.Privileges [0].Attributes =SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL, NULL);
switch(buffer[0])
{
case '1':
cwnd = FindWindow("rogMan",NULL);
::ShowWindow(cwnd->GetSafeHwnd(),SW_HIDE);
break;
case '2':
cwnd = FindWindow("rogMan",NULL);
::ShowWindow(cwnd->GetSafeHwnd(),SW_SHOW);
break;
case '3':
::ExitWindowsEx(EWX_LOGOFF,0);
break;
case '4':
::ExitWindowsEx(EWX_SHUTDOWN,0);
break;
case '5':
::ExitWindowsEx(EWX_REBOOT,0);
break;
}
}
}
3.主对话框的OnInitDialog()函数中初始化变量
WSADATA wsd;
WSAStartup(MAKEWORD(2,2),&wsd);//初始化
CString serverIP;
m_server = socket(AF_INET,SOCK_STREAM,0);//创建套接字
//将网络有事件就向此窗口发送20000消息;
WSAAsyncSelect(m_server,m_hWnd,20000,FD_WRITE|FD_READ|FD_ACCEPT);
m_client = 0;
serverIP = "";

DWORD nSize = MAX_COMPUTERNAME_LENGTH + 1;
char Buffer[MAX_COMPUTERNAME_LENGTH + 1];
GetComputerName(Buffer,&nSize);
CString str="",name;
struct hostent *pHost;
pHost = gethostbyname(Buffer);
if(pHost ==NULL)
{
int nError = WSAENETDOWN;
nError = WSAGetLastError();//查询MSDN看具体错误
}
for(int i=0;i<4;i++)
{
CString addr;
if(i > 0)
{
str += ".";
}
addr.Format("%u",(unsigned int)((unsigned char*)pHost->h_addr_list[0]));
str += addr;
}

//服务器端地址
sockaddr_in serveraddr;
serveraddr.sin_family = AF_INET;
serverIP = str;
serveraddr.sin_addr.S_un.S_addr = inet_addr(serverIP);//设置本机地址
UpdateData(TRUE);
serveraddr.sin_port = htons(70);//设置端口号
if (bind(m_server,(sockaddr*)&serveraddr,sizeof(serveraddr)))//绑定地址
{
MessageBox("绑定地址失败.");
return;
}
listen(m_server,5);//开始监听
4.添加虚函数PreTranslateMessage()在其中调用我们的自定义函数
BOOL CGkbc8Dlg:reTranslateMessage(MSG* pMsg)
{
if (pMsg->message==20000)//网络事件触发调用
TreatFun();
return CDialog:reTranslateMessage(pMsg);
}
5.再新建一对话框应用程序,作为操控远程电脑的客户端程序,在主对话框中添加套接字函数的支持代码
#include "winsock2.h"; #pragma comment(lib,"ws2_32.lib")
6、添加变量及自定义函数public: SOCKET m_client; void ConnectToServer();函数体在工程中查阅学习,再初始化变量 WSADATA wsd; WSAStartup(MAKEWORD(2,2),&wsd);//初始化
m_client = socket(AF_INET,SOCK_STREAM,0);
7.依照例程界面添加编辑框IDC_EDIT1,按钮<注销><关闭><重启><隐藏桌面><显示桌面>关联按钮的点击响应函数,实现远程计算机的操作
void CGkbc8Dlg::OnButhide()
{
ConnectToServer();
CString info;
info="1";
int i = send(m_client,info.GetBuffer(0),info.GetLength(),0);
}

void CGkbc8Dlg::OnButshow()
{
ConnectToServer();
CString info;
info="2";
int i = send(m_client,info.GetBuffer(0),info.GetLength(),0);
}

我们来演示下功能实现的整个过程

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:332.上位机VC MFC远程控制局域网计算机.zip 
文件大小:275.28 KB  售价:11金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索