栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ Windows 制作远程控制程序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ Windows 制作远程控制程序

以下内容仅供学习!!!

C++ Windows 实现远程控制最好的办法我个人觉得是 winsock,

原理就是Server端发送一个信息,然后Client端接收到信息后就去做对应的操作。

我用的是 VS 2022,要安装好VS MFC先,然后我用的是多字节。

完整代码下载链接在本文底部!

以下是部分代码(此部分代码dev c++也能运行,具体方法见后面):

Server:

#include 
#include 
#include 
#pragma comment(lib, "ws2_32.lib")
using namespace std;

int main() {
	WSADATA wsdata;
	WSAStartup(MAKEWORd(2, 2), &wsdata);

	SOCKET hServSock = socket(PF_INET, SOCK_STREAM, 0);

	SOCKADDR_IN servAddr;
	servAddr.sin_family = AF_INET;
	servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
	servAddr.sin_port = htons(4096);
	bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr));

	listen(hServSock, 5);

	SOCKADDR_IN clntAddr;
	int clntAddrSz = sizeof(clntAddr);
	SOCKET hSock;
	int x;
	string s;
	while (true) {
		cout << "正在等待连接!" << endl;
		hSock = accept(hServSock, (SOCKADDR*)&clntAddr, &clntAddrSz);
		char IP[1024] = {};
		char Check[1024] = {};
		recv(hSock, IP, 1024, 0);
		system("cls");
		while (recv(hSock, Check, 1024, 0) != -1) {
			cout << "已连接 " << IP << endl;
			cout << "1. 对话框提示" << endl;
			cout << "2. 控制鼠标" << endl;
			cout << "3. 退出控制" << endl << endl;

			cin >> x;
			if (x < 1 || x > 3) continue;
			s = "";
			s[0] = x + '0';

			send(hSock, s.c_str(), 1024, 0);
			if (x == 1) {
				cout << "请输入对话框标题:" << endl;
				getline(cin, s);
				getline(cin, s);
				send(hSock, s.c_str(), 1024, 0);
				cout << "请输入对话框内容:" << endl;
				getline(cin, s);
				send(hSock, s.c_str(), 1024, 0);
			}
			else if (x == 3) break;

			system("cls");
		}
		closesocket(hSock);
		cout << "对方已下线!" << endl;
		Sleep(3000);
		system("cls");
	}

	return 0;
}

功能:
    1. 对话框提示
        按照程序提示输入后,客户端会弹出一个对应的对话框。
    
    2.  控制鼠标
        其实就是将对方鼠标固定住,再运行一次解锁。
    
    3. 退出控制
        和Client断开连接。

Client:

#include 
#include 
#include 
#pragma comment(lib, "ws2_32.lib")
#pragma comment(linker, "/subsystem:"windows" /entry:"mainCRTStartup"" )
using namespace std;

string CheckIP() {
	WSADATA wsaData;
	char name[255];
	char* ip;
	PHOSTENT hostinfo;
	string ipStr;

	if (!WSAStartup(MAKEWORd(2, 0), &wsaData)) {
		if (!gethostname(name, sizeof(name))) {
			if ((hostinfo = gethostbyname(name)) != NULL) {
				ip = inet_ntoa(*(struct in_addr*)*hostinfo->h_addr_list);
				ipStr = ip;
			}
		}
		WSACleanup();
	}
	return ipStr;
}

int clip(bool lockb = false) {
	RECT rect = {};
	rect.bottom = 1;
	rect.right = 1;
	if (lockb) return ClipCursor(&rect);
	else return ClipCursor(NULL);
}

int main() {
	WSADATA wsdata;
	WSAStartup(MAKEWORd(2, 2), &wsdata);

	SOCKET hSock = socket(PF_INET, SOCK_STREAM, 0);

	SOCKADDR_IN servAddr;
	servAddr.sin_family = AF_INET;
	servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");    // 这里要改成运行Server的电脑的IP,推荐把运行Server的电脑的IP固定住,方法请自行查询!
	servAddr.sin_port = htons(4096);

	connect(hSock, (SOCKADDR*)&servAddr, sizeof(servAddr));
	send(hSock, CheckIP().c_str(), 1024, 0);
	send(hSock, CheckIP().c_str(), 1024, 0);

	int x;
	bool b = true;
	string str;
	char s[1024] = {};
	while (true) {
		recv(hSock, s, 1024, 0);
		x = atoi(s);
		if (x == 1) {
			char title[1024];
			char message[1024];
			recv(hSock, title, 1024, 0);
			recv(hSock, message, 1024, 0);
			MessageBox(NULL, message, title, MB_OK);
		}
        else if (x == 2)  {
			clip(b);
			b = !b;
		}
		else if (x == 3) break;
		send(hSock, CheckIP().c_str(), 1024, 0);
	}

	WSACleanup();
	return 0;
}

这串代码就是完成上面所说的功能的代码,但Server发送一条信息,Client就接收它并执行对应代码,十分简单!有些地方有两个getline的原因是有时候一个getline会被直接跳过!但是这里的代码没有任何实际的伤害性!

用dev c++也能运行这段代码的方法:首先,在dev c++中点击工具,然后点击编译选项,把编译时加入以下命令选上,然后把里面的内容改成-std=c++11,然后再勾选在连接器命令行加入以下命令,然后把里面的内容改成-static-libgcc -l wsock32就可以了。

以下是完整代码下载链接(完全免费,只求一颗小星星):

github下载

如果Github拒绝访问,那么可以参照我在掘金写的Github拒绝访问解决方法

gitee下载

完整代码记得用VS运行!

如有问题,请和我联系,我的邮箱:534086753@qq.com

都看到这了,点个赞再走吧~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/949705.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号