高分求远程控制的详细算法。 只有源码,不给分。我有一份源码,但对远程控制的设计过程不太了解。急,我先谢谢各位了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 kingzai()说的和我的意思相近,不知那位高人,做过这方面的软件啊。 其实原理还是socket通信,服务器端根据收到客户端发来的字符执行相应的代码就OK了:) 基本就是kingzai的思想首先定义一个结构(作为发送包的包头)typedef struct _tagHeaderInfo{ DWORD dwFlag; // 标志(区别这是个远程控制命令包还是其他作用的包) DWORD dwSize; // 结构大小 DWORD dwType; // 控制命令的类型(被控端由这个值判断执行什么样的远程操作)}HEADER_INFO, *PHEADER_INFO, *LPHEADER_INFO;有可能你的远程控制命令还需要额外信息,比如你想远程打开一个IE且网址为www.csdn.net,则网址就是附加信息.这就需要再定义一个结构typedef struct _tagOperationA{ HEADER_INFO header; // 包头 char szURL[MAX_PATH];// 附加URL信息}OPERATION_A, *POPERATION_A, *LPOPERATION_A;再比如你想5分钟后强制远程关机,5分钟是额外信息typedef struct _tagOperationB{ HEADER_INFO header; // 包头 int nDelayTime; // 附加的关机之前等待时间 BOOL bForceShutDown; // 是否强制关机}OPERATION_B, *POPERATION_B, *LPOPERATION_B;这时远程控制打开IE可这样操作//控制端BOOL SendIERequest(){ OPERATION_A OpA; ZeroMemory(&OpA, sizeof(OPERATION_A); OpA.header.dwFlag = REMOTECTRL_FLAG; // 远程控制标志 OpA.header.dwsize = sizeof(OPERATION_A); OpA.header.dwType = REMOTECTRL_IE; // 远程控制打开IE strcpy(OpA.szURL, "www.csdn.net"); // 假设pSocket是你的通信Socket pSocket->Send(&OpA, sizeof(OPERATION_A)); return TRUE;}远程控制关机可这样操作//控制端BOOL SendShutDownRequest(){ OPERATION_B OpB; ZeroMemory(&OpB, sizeof(OPERATION_B); OpB.header.dwFlag = REMOTECTRL_FLAG; // 远程控制标志 OpB.header.dwsize = sizeof(OPERATION_B); OpB.header.dwType = REMOTECTRL_SHUTDOWN; // 远程控制关机 OpB.nDelayTime = 3; // 3分钟后关机 OpB.bForceShutDown = TRUE; // 假设pSocket是你的通信Socket pSocket->Send(&OpB, sizeof(OPERATION_B));}被控端的操作//处理所有发过来的控制请求,做相应处理BOOL DealWithAllRequest(LPVOID lpBuf) // lpBuf是Socket读过来的信息{ LPHEADER_INFO pHeader = (LPHEADER_INFO)lpBuf; if (REMOTECTRL_FLAG == pHeader.dwFlag) // 这是远程控制包 { switch(pHeader.dwType) { case REMOTECTRL_IE: return RemoteCtrlIE(lpBuf); case REMOTECTRL_SHUTDOWN: return RemoteCtrlShutDown(lpBuf); default: return FALSE; } } //其他通讯包}//打开IE//被控端BOOL RemoteCtrlIE(LPVOID lpBuf){ LPOPERATION_A pOpA = (LPOPERATION_A)lpBuf; CString strURL = pOpA->szURL; //执行打开strURL的操作 ::ShellExecute(...., strURL, ...); return TRUE;}//被控端BOOL RemoteCtrlShutDown(LPVOID lpBuf){ LPOPERATION_B pOpB = (LPOPERATION_B)lpBuf; int nDelayTime = pOpB->nDelayTime; BOOL bForceShutDown = pOpb->bForceShutDown; //执行nDelayTime后关机的操作 // ... // ::ExitWindowsEx(...); return TRUE;} 服务端在收到的数据中检测标志字符串,有就执行相对应的命令,over. odbccp32.lib(dllload.obj) : error LNK2019: 无法解析的外部符号 __imp___vsnprintf VC对话框边框 工程急着出货了,软件里检测内存泄露? 关于绘制文本相关的函数 用VS制作安装程序如何自动化 EVC 下串口发送数据出现乱码 如何获得一个文件夹存在 windows程序设计这本书上的一本例程。 unexpected 'class CServerSocket ( 关于组态 极度郁闷:装了vc助手之后,vc的自动提示功能没有了 如果编译mozilla?刚从官网把源代码D下来,却不知从何入手?
首先定义一个结构(作为发送包的包头)
typedef struct _tagHeaderInfo
{
DWORD dwFlag; // 标志(区别这是个远程控制命令包还是其他作用的包)
DWORD dwSize; // 结构大小
DWORD dwType; // 控制命令的类型(被控端由这个值判断执行什么样的远程操作)
}HEADER_INFO, *PHEADER_INFO, *LPHEADER_INFO;有可能你的远程控制命令还需要额外信息,比如你想远程打开一个IE且网址为www.csdn.net,则网址就是附加信息.这就需要再定义一个结构
typedef struct _tagOperationA
{
HEADER_INFO header; // 包头
char szURL[MAX_PATH];// 附加URL信息
}OPERATION_A, *POPERATION_A, *LPOPERATION_A;再比如你想5分钟后强制远程关机,5分钟是额外信息
typedef struct _tagOperationB
{
HEADER_INFO header; // 包头
int nDelayTime; // 附加的关机之前等待时间
BOOL bForceShutDown; // 是否强制关机
}OPERATION_B, *POPERATION_B, *LPOPERATION_B;这时远程控制打开IE可这样操作
//控制端
BOOL SendIERequest()
{
OPERATION_A OpA;
ZeroMemory(&OpA, sizeof(OPERATION_A);
OpA.header.dwFlag = REMOTECTRL_FLAG; // 远程控制标志
OpA.header.dwsize = sizeof(OPERATION_A);
OpA.header.dwType = REMOTECTRL_IE; // 远程控制打开IE
strcpy(OpA.szURL, "www.csdn.net");
// 假设pSocket是你的通信Socket
pSocket->Send(&OpA, sizeof(OPERATION_A));
return TRUE;
}
远程控制关机可这样操作
//控制端
BOOL SendShutDownRequest()
{
OPERATION_B OpB;
ZeroMemory(&OpB, sizeof(OPERATION_B);
OpB.header.dwFlag = REMOTECTRL_FLAG; // 远程控制标志
OpB.header.dwsize = sizeof(OPERATION_B);
OpB.header.dwType = REMOTECTRL_SHUTDOWN; // 远程控制关机
OpB.nDelayTime = 3; // 3分钟后关机
OpB.bForceShutDown = TRUE;
// 假设pSocket是你的通信Socket
pSocket->Send(&OpB, sizeof(OPERATION_B));
}被控端的操作
//处理所有发过来的控制请求,做相应处理
BOOL DealWithAllRequest(LPVOID lpBuf) // lpBuf是Socket读过来的信息
{
LPHEADER_INFO pHeader = (LPHEADER_INFO)lpBuf;
if (REMOTECTRL_FLAG == pHeader.dwFlag) // 这是远程控制包
{
switch(pHeader.dwType)
{
case REMOTECTRL_IE:
return RemoteCtrlIE(lpBuf);
case REMOTECTRL_SHUTDOWN:
return RemoteCtrlShutDown(lpBuf);
default:
return FALSE;
}
}
//其他通讯包
}//打开IE
//被控端
BOOL RemoteCtrlIE(LPVOID lpBuf)
{
LPOPERATION_A pOpA = (LPOPERATION_A)lpBuf;
CString strURL = pOpA->szURL;
//执行打开strURL的操作
::ShellExecute(...., strURL, ...);
return TRUE;
}//被控端
BOOL RemoteCtrlShutDown(LPVOID lpBuf)
{
LPOPERATION_B pOpB = (LPOPERATION_B)lpBuf;
int nDelayTime = pOpB->nDelayTime;
BOOL bForceShutDown = pOpb->bForceShutDown;
//执行nDelayTime后关机的操作
// ...
// ::ExitWindowsEx(...);
return TRUE;
}