只有源码,不给分。我有一份源码,但对远程控制的设计过程不太了解。急,我先谢谢各位了。

解决方案 »

  1.   

    kingzai()说的和我的意思相近,不知那位高人,做过这方面的软件啊。
      

  2.   

    其实原理还是socket通信,服务器端根据收到客户端发来的字符执行相应的代码就OK了:)
      

  3.   

    基本就是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;
    }
      

  4.   

    服务端在收到的数据中检测标志字符串,有就执行相对应的命令,over.