⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendmsg_bak.txt

📁 简单的远程控制工具,分为服务器与客户斋,让你了解socket编程的知识.
💻 TXT
字号:
BOOL CCtrl_Clnt9Doc::SendMsg(WORD wCmd)
{
/*CMD_KEY_HOOK 和CMD_KEY_MOUSE已经被取消
  在m_bBusy=TRUE状态下,所有KEY&MOUSE将被保存
  直到m_bBusy=FALSE时再发送
*/
//  	HGLOBAL	hFileData;
  	LPVOID  lpFileData;
	DWORD   dwFileSize;
	CFile	fp;
	int		nRet;
	CString strtmp;
    SENDMSG SendMsg;
    LPCTSTR   lpParam;
    LPSTR   lpText;
	int     nSize;
    if (!m_bConnecting) return false;
    if (!m_bUsing) return true;
	m_bUsing = true;

    memset(&SendMsg, 0, sizeof(SENDMSG));
	memcpy(SendMsg.szPassword, m_strPassword, m_strPassword.GetLength());
/*	if (m_strParam.GetLength() > 50)
	{
	  SendMsg.wCmd = CMD_STATE_INFO;
	  SendMsg.dwFileSize = m_strParam.GetLength();
      if (m_wskClient.SendData((char *)&SendMsg, sizeof(SENDMSG), 60) < 0 )
	    goto ErrorSend001;
	  if (ReadSafe(&m_wskClient, (char *)&SendMsg, sizeof(SENDMSG)) < 0)
        goto ErrorSend001;
	  if (SendMsg.iErrorCode < 0) 
	  return ;
	  lpParam = m_strParam;
      if (m_wskClient.SendData((char *)lpParam,m_strParam.GetLength() , 60) < 0 )
	    goto ErrorSend001;
	  SendMsg.dwFileSize = 0;
	  if (ReadSafe(&m_wskClient, (char *)&SendMsg, sizeof(SENDMSG)) < 0)
        goto ErrorSend001;
	  if (SendMsg.iErrorCode < 0) 
	  return ;
	}
	else
	{
	  memcpy(SendMsg.szText, m_strParam, m_strParam.GetLength());
	  SendMsg.dwFileSize = m_strParam.GetLength();
	}
*/
	SendMsg.wCmd = wCmd;
	switch (wCmd)
		{
/*		case CMD_FILE_SEND:
//Step 1: Get File
			nRet = fp.Open (m_strSaveFile,CFile::modeRead);
			if (nRet == 0) 	return;
			dwFileSize = fp.GetLength();
			lpFileData = GlobalAlloc (GMEM_FIXED,dwFileSize);
			if (lpFileData == NULL)
			{GlobalFree(lpFileData);fp.Close(); return;}
			fp.ReadHuge (lpFileData,dwFileSize);
			fp.Close ();
//Step 2: Send struct
			SendMsg.dwBmpSize = m_strParam.GetLength();
            if (m_wskClient.SendData((char *)&SendMsg, sizeof(SENDMSG), 60) < 0 )
	        goto ErrorSend001;
//Step 3: Confirm
	        if (ReadSafe(&m_wskClient, (char *)&SendMsg, sizeof(SENDMSG)) < 0)
			{GlobalFree(lpFileData);goto ErrorSend001;}
			if (SendMsg.iErrorCode < 0) 
			{GlobalFree(lpFileData);return ;}
//Step 4: Send file
            if (m_wskClient.SendData((char *)lpFileData,dwFileSize, 60) < 0 )
			{GlobalFree(lpFileData);goto ErrorSend001;}
	        GlobalFree(lpFileData);
            goto SendWait001;
//DEL		case CMD_KEY_HOOK:
*/
		case CMD_KEY_HOOK:
			SendMsg.dwHookFlags = m_dwHookFlags;
			SendMsg.dwHookParam1 = m_dwHookParam1;
			SendMsg.dwHookParam2 = m_dwHookParam2;
            if (m_wskClient.SendData((char *)&SendMsg, sizeof(SENDMSG), 60) < 0 )
               goto Err01;
			return true;
/*		case CMD_MOUSE_HOOK:
			SendMsg.dwHookFlags = m_dwHookFlags;
			SendMsg.dwHookParam1 = m_dwHookParam1 * 65535 / m_nRmtWidth;
			SendMsg.dwHookParam2 = m_dwHookParam2 * 65535 / m_nRmtHeight;
            if (m_wskClient.SendData((char *)&SendMsg, sizeof(SENDMSG), 60) < 0 )
               goto Err01;
			return;
*/
		case CMD_MOUSE_RDBCLICK:
		case CMD_MOUSE_LDBCLICK:
		case CMD_MOUSE_RCLICK:
		case CMD_MOUSE_LCLICK:
			SendMsg.dwHookFlags = m_dwHookFlags;
			SendMsg.dwHookParam1 = m_dwHookParam1 * 65535 / m_nRmtWidth;
			SendMsg.dwHookParam2 = m_dwHookParam2 * 65535 / m_nRmtHeight;
            if (m_wskClient.SendData((char *)&SendMsg, sizeof(SENDMSG), 60) < 0 )
               goto Err01;
			return true;

		}//end switch
//发送命令
   if (m_wskClient.SendData((char *)&SendMsg, sizeof(SENDMSG), 60) < 0 )
     goto Err01;

Wait01:		
//等待返回
	memset(&SendMsg, 0, sizeof(SENDMSG));
	if (ReadSafe(&m_wskClient, (char *)&SendMsg, sizeof(SENDMSG)) < 0)
        goto Err01;
	switch(SendMsg.wCmd)
	{
	case CMD_FILE_RECEIVE:
		  dwFileSize = SendMsg.dwBmpSize;
		  lpFileData = GlobalAlloc (GMEM_FIXED,dwFileSize);
		  if (lpFileData == NULL)
			{SendMsg.iErrorCode = -12;
		     strcpy(SendMsg.szText,"MSG: File Send Failed");
		     break;
		  }
		  else
			SendMsg.iErrorCode = 0;
	      nRet = m_wskClient.SendData((char *)&SendMsg, sizeof(SENDMSG), 60);		
          if (nRet <= 0 ){ GlobalFree(lpFileData); goto ErrorSend001;}
	      if (ReadSafe(&m_wskClient, (char *)lpFileData, dwFileSize) < 0)
		  {GlobalFree(lpFileData); goto ErrorSend001; }
		  lpParam = m_strSaveFile;
		  CmdProc_RecFile((char *)lpParam, lpFileData);
		  DisplayMsg (SendMsg.szText);
		break;
	case CMD_GET_SCREEN_INFO:
			m_nRmtBits = SendMsg.nBits;
			m_nRmtWidth = SendMsg.rcArea.right;
			m_nRmtHeight = SendMsg.rcArea.bottom;
			m_nBits = SendMsg.nBits;
			m_strVersion = SendMsg.szText;
	        m_rcArea = CRect (0, 0, SendMsg.rcArea.right, SendMsg.rcArea.bottom);
			break;
	 case CMD_STATE_INFO:
		     while(SendMsg.wCmd==CMD_STATE_INFO)
			 {
//Step 1: get struct
		        nSize = (int)SendMsg.dwFileSize;
			    lpText = (char *)calloc(nSize+1, sizeof(char));
			    if (lpText == NULL)
				{
				  SendMsg.iErrorCode = -1;
                  if (m_wskClient.SendData((char *)&SendMsg, sizeof(SENDMSG), 60) < 0 )
	              goto ErrorSend001;
				}
//Step 2: confirm
			     SendMsg.iErrorCode = 0;
                 if (m_wskClient.SendData((char *)&SendMsg, sizeof(SENDMSG), 60) < 0 )
	             goto ErrorSend001;
//Step 3: Get Msg
	             if (ReadSafe(&m_wskClient, (char *)lpText, nSize) < 0)
                 goto ErrorSend001;
		         DisplayMsg (lpText);
			     free(lpText);
			     lpText = NULL;
//Step 4: confirm
                 if (m_wskClient.SendData((char *)&SendMsg, sizeof(SENDMSG), 60) < 0 )
                 goto ErrorSend001;
//Step 5: wait next
	             if (ReadSafe(&m_wskClient, (char *)&SendMsg,sizeof(SENDMSG)) < 0)
                 goto ErrorSend001;
			 }//end while
		     DisplayMsg (SendMsg.szText);
			 break;
       case CMD_SOCKET_CLOSE:
		     DisplayMsg (SendMsg.szText);
			 break;
	}//end switch

	m_bUsing = false;
    return true;		
Err01:		
	DisconnectSocket();
	strtmp.Format("MSG: s%X error for socket  %d", m_wskClient, m_wskClient.GetError());
    DisplayMsg(strtmp);
    if (!m_bConnectAuto) 
	{   m_bUsing = false;
		return false;
	}
	while(AfxMessageBox("注意: 你确定要重新连接吗?", MB_YESNO) == IDYES)
		{
             if (ConnectSocket()) 
			 {
				 m_bUsing = false;
				 return false;
			 }
		}
  m_bUsing = false;
  return false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -