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

📄 peeperwnd.cpp

📁 这是个soket的代码不是太实用但是对出学者还是有些帮助的 有需要的可以
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		BOOL bMouseMove = GetEnableFlag(PL_ENABLE_MOUSE_MOVE);
		bMouseMove = !bMouseMove;
		memcpy(chData+sizeof(int)*2, &bMouseMove, sizeof(BOOL));
		int nRet = ::PL_SendSocketData(m_sckClient[0], chData, 
			sizeof(int)*2+sizeof(BOOL), PL_MOUSE_RDBLCLK);
		if(nRet <= 0)
		{
			ExitConnect();
			return ;
		}
		nRet = ::PL_ReadSocketData(m_sckClient[0], chData, 2, NULL);
		return ;
	}
	CScrollView::OnRButtonDblClk(nFlags, point);
}

void CPeeperWnd::OnRButtonDown(UINT nFlags, CPoint point) 
{
	if(CanSend() && GetEnableFlag(PL_ENABLE_MOUSE_RBUTTON))
	{
		BYTE chData[20];
		GetMousePoint(chData);
		BOOL bMouseMove = GetEnableFlag(PL_ENABLE_MOUSE_MOVE);
		bMouseMove = !bMouseMove;
		memcpy(chData+sizeof(int)*2, &bMouseMove, sizeof(BOOL));
		int nRet = ::PL_SendSocketData(m_sckClient[0], chData, 
			sizeof(int)*2+sizeof(BOOL), PL_MOUSE_RBUTTONDOWN);
		if(nRet <= 0)
		{
			ExitConnect();
			return ;
		}
		nRet = ::PL_ReadSocketData(m_sckClient[0], chData, 2, NULL);
		return ;
	}
	CScrollView::OnRButtonDown(nFlags, point);
}

void CPeeperWnd::OnRButtonUp(UINT nFlags, CPoint point) 
{
	if(CanSend() && GetEnableFlag(PL_ENABLE_MOUSE_RBUTTON))
	{
		BYTE chData[20];
		GetMousePoint(chData);
		BOOL bMouseMove = GetEnableFlag(PL_ENABLE_MOUSE_MOVE);
		bMouseMove = !bMouseMove;
		memcpy(chData+sizeof(int)*2, &bMouseMove, sizeof(BOOL));
		int nRet = ::PL_SendSocketData(m_sckClient[0], chData, 
			sizeof(int)*2+sizeof(BOOL), PL_MOUSE_RBUTTONUP);
		if(nRet <= 0)
		{
			ExitConnect();
			return ;
		}
		nRet = ::PL_ReadSocketData(m_sckClient[0], chData, 2, NULL);
		return ;
	}
	CScrollView::OnRButtonUp(nFlags, point);
}

void CPeeperWnd::OnMouseMove(UINT nFlags, CPoint point) 
{
	if(CanSend() && GetEnableFlag(PL_ENABLE_MOUSE_MOVE))
	{
		BYTE chData[20];
		GetMousePoint(chData);
		int nRet = ::PL_SendSocketData(m_sckClient[0], chData, 
			sizeof(int)*2, PL_MOUSE_MOVE);
		if(nRet <= 0)
		{
			ExitConnect();
			return ;
		}
		nRet = ::PL_ReadSocketData(m_sckClient[0], chData, 2, NULL);
		return ;
	}
	CScrollView::OnMouseMove(nFlags, point);
}

void CPeeperWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	if(CanSend() && (((BYTE)nChar != VK_LWIN && (BYTE)nChar != VK_RWIN)) &&
		GetEnableFlag(PL_ENABLE_KEY))
	{
		BYTE chTemp[15];
		ZeroMemory(chTemp, 15);
		memcpy(chTemp, &nChar, sizeof(UINT));
		memcpy(chTemp+sizeof(UINT), &nFlags, sizeof(UINT));
		int nRet = ::PL_SendSocketData(m_sckClient[0], chTemp, sizeof(int)*2, PL_KEY_DOWN);
		if(nRet <= 0)
		{
			ExitConnect();
			return ;
		}
		nRet = ::PL_ReadSocketData(m_sckClient[0], chTemp, 2, NULL);
		return ;
	}								  
	CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CPeeperWnd::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	if(CanSend() && (((BYTE)nChar != VK_LWIN && (BYTE)nChar != VK_RWIN)) &&
		GetEnableFlag(PL_ENABLE_KEY))
	{
		BYTE chTemp[15];
		ZeroMemory(chTemp, 15);
		memcpy(chTemp, &nChar, sizeof(UINT));
		memcpy(chTemp+sizeof(UINT), &nFlags, sizeof(UINT));
		int nRet = ::PL_SendSocketData(m_sckClient[0], chTemp, sizeof(int)*2, PL_KEY_UP);
		if(nRet <= 0)
		{
			ExitConnect();
			return ;
		}
		nRet = ::PL_ReadSocketData(m_sckClient[0], chTemp, 2, NULL);
		return ;
	}
	CScrollView::OnKeyUp(nChar, nRepCnt, nFlags);
}

void CPeeperWnd::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	if(CanSend() && (((BYTE)nChar != VK_LWIN && (BYTE)nChar != VK_RWIN)) &&
		GetEnableFlag(PL_ENABLE_KEY))
	{
		BYTE chTemp[15];
		ZeroMemory(chTemp, 15);
		memcpy(chTemp, &nChar, sizeof(UINT));
		memcpy(chTemp+sizeof(UINT), &nFlags, sizeof(UINT));
		int nRet = ::PL_SendSocketData(m_sckClient[0], chTemp, sizeof(int)*2, PL_KEY_DOWN);
		if(nRet <= 0)
		{
			ExitConnect();
			return ;
		}
		nRet = ::PL_ReadSocketData(m_sckClient[0], chTemp, 2, NULL);
		return ;
	}
	CScrollView::OnSysKeyDown(nChar, nRepCnt, nFlags);
}

void CPeeperWnd::OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	if(CanSend() && (((BYTE)nChar != VK_LWIN && (BYTE)nChar != VK_RWIN)) &&
		GetEnableFlag(PL_ENABLE_KEY))
	{
		BYTE chTemp[15];
		ZeroMemory(chTemp, 15);
		memcpy(chTemp, &nChar, sizeof(UINT));
		memcpy(chTemp+sizeof(UINT), &nFlags, sizeof(UINT));
		int nRet = ::PL_SendSocketData(m_sckClient[0], chTemp, sizeof(int)*2, PL_KEY_UP);
		if(nRet <= 0)
		{
			ExitConnect();
			return ;
		}
		nRet = ::PL_ReadSocketData(m_sckClient[0], chTemp, 2, NULL);
		return ;
	}
	CScrollView::OnSysKeyUp(nChar, nRepCnt, nFlags);
}

void CPeeperWnd::OnTimer(UINT nIDEvent) 
{
	if(nIDEvent == m_nTimerID)
	{
		if(m_sckClient[0] == INVALID_SOCKET ||
		   m_sckClient[1] == INVALID_SOCKET)
		{
			if((::GetTickCount() - m_nRetryTime) > (int)(PL_SOCKET_RETRYTIME))
			{
				ConnectServer();
				m_nRetryTime = ::GetTickCount();
			}
		}
		if(!m_bIsDoing && CanSend() && GetEnableFlag(PL_ENABLE_DIB))
		{
			m_bIsDoing = TRUE;
			::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_DIB);
			m_hPeeperThread.PostThreadMessage(PL_GET_DIB_MESSAGE, 0, 0);
		}
	}
	CScrollView::OnTimer(nIDEvent);
}

char *CPeeperWnd::GetConnectInfo()
{
	return m_chConnectInfo;
}

void CPeeperWnd::SetConnectInfo(char *chInfo)
{
	strncpy(m_chConnectInfo, chInfo, 510);
}

BOOL CPeeperWnd::CloseServer()
{
	BOOL bRet = FALSE;
	if(GetState())
	{
		int nRet = SendData(NULL, 0, PL_CLOSE_PEEPER);
		bRet = nRet > 0;
		ExitConnect();
	}
	return FALSE;
}

BOOL CPeeperWnd::ConnectServer()
{
	BOOL bRet = FALSE;
	if(m_hPeeperThread.m_hThread != NULL)
	{
		m_hPeeperThread.PostThreadMessage(PL_CONNECT_MESSAGE, 0, 0);
		bRet = TRUE;
	}
	return bRet;
}

BOOL CPeeperWnd::GetState()
{
	if((!m_bIsConnect) || 
		(m_sckClient[0] == INVALID_SOCKET || 
		m_sckClient[1] == INVALID_SOCKET))
	{
		return FALSE;
	}
	return TRUE;
}

CString CPeeperWnd::GetClientInfo()
{
	return m_strState;
}

UINT CPeeperWnd::GetConnectTime()
{
	return GetState()?((GetTickCount() - m_nConnectTime)/1000) : 0;
}

BOOL CPeeperWnd::ExitConnect()
{
	if(m_sckClient[0] != INVALID_SOCKET)
	{
		::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_CLIENT_CLOSE);
		::closesocket(m_sckClient[0]);
	}
	if(m_sckClient[1] != INVALID_SOCKET)
	{
		::closesocket(m_sckClient[1]);
	}
	m_sckClient[0] = INVALID_SOCKET;
	m_sckClient[1] = INVALID_SOCKET;

	if(m_pNotifyWnd)
	{
		::PostMessage(m_pNotifyWnd->GetSafeHwnd(), PL_PEEPER_NOTIFY, 
			(WPARAM)PL_PEEPER_NOTIFY_DISCONNECT, (LPARAM)this);
	}

	return TRUE;
}

int CPeeperWnd::GetScreenSize()
{
	int nRet = ::PL_SendSocketData(m_sckClient[0], NULL, 0, PL_SCREEN_SIZE);
	if(nRet > 0)
	{
		BYTE chTemp[20];
		ZeroMemory(chTemp, 20);
		nRet = ::PL_ReadSocketData(m_sckClient[0], chTemp, 20, 0);
		if(nRet > 0)
		{
			m_szScreen.cx = *((int*)(chTemp));
			m_szScreen.cy = *((int*)(chTemp+sizeof(int)));
		}
	}
	if(nRet <= 0)
	{
		ExitConnect();
	}

	return nRet;
}

int CPeeperWnd::SendDIBBits()
{
	int nRet = INVALID_SOCKET;
	if(CanSend())
	{
		nRet = ::PL_SendSocketData(m_sckClient[0], (BYTE *)&m_nBits, sizeof(int), PL_DIB_BITS);
		if(nRet <= 0)
		{
			ExitConnect();
		}
	}
	return nRet;
}

HRESULT CPeeperWnd::OnMsgPeeperThread(WPARAM wParam, LPARAM lParam)
{
	DWORD dwMessage = (DWORD)wParam;
	BYTE chFlag = (BYTE)lParam;
	DWORD dwFlag = (DWORD)lParam;
	switch(dwMessage)
	{
	case PL_GET_DIB_MESSAGE:
		{
			switch((PL_ZipType)dwFlag)
			{
			case zip_none:
				{
					;//not to do
				}
				break ;
			case zip_lz77:
				{
					HDIB hDib = (HDIB)::PL_LZ77_UnZip(m_hDib);
					::GlobalFree(m_hDib);
					m_hDib = hDib;
				}
				break ;
			case zip_lzw:
				{
					HDIB hDib = (HDIB)::PL_LZW_UnZip(m_hDib);
					::GlobalFree(m_hDib);
					m_hDib = hDib;
				}
				break ;
			case zip_jpeg:
				{
				}
				break; 
			case zip_lzss:
				{
					HDIB hDib = (HDIB)::PL_LZSS_UnZip(m_hDib);
					::GlobalFree(m_hDib);
					m_hDib = hDib;
				}
				break ;
			case zip_ari:
				{
					HDIB hDib = (HDIB)::PL_ARI_UnZip(m_hDib);
					::GlobalFree(m_hDib);
					m_hDib = hDib;
				}
				break ;
			default :
				{
					return S_OK;
				}
			}
			DrawDIB();

			return S_OK;
		}
		break ;
	case PL_CONNECT_MESSAGE:
		{
			switch(dwFlag)
			{
			case PL_PEEPER_NOTIFY_CONNECT:
				{
					m_nConnectTime = ::GetTickCount();
					m_strState = _T("成功连接,开始接收桌面图像...");
					Invalidate();
					UpdateWindow();
					TRACE(m_chConnectInfo);
					TRACE(_T("\n"));
					m_bIsDoing = FALSE;
					KillTimer(m_nTimerID);
					SetTimer(m_nTimerID, m_nSpeed, NULL);
					if(m_pNotifyWnd)
					{
						::PostMessage(m_pNotifyWnd->GetSafeHwnd(), PL_PEEPER_NOTIFY, 
							(WPARAM)PL_PEEPER_NOTIFY_CONNECT, (LPARAM)this);
					}
					m_bIsConnect = TRUE;
				}
				break ;
			case PL_PEEPER_NOTIFY_DISCONNECT:
				{
					m_bIsConnect = FALSE;
					m_strState = _T("连接失败,开始重试...");
					if(m_memDC.m_hDC == NULL)
					{
						Invalidate();
						UpdateWindow();
					}
					ExitConnect();
					m_nConnectTime = ::GetTickCount();
					KillTimer(m_nTimerID);
					SetTimer(m_nTimerID, m_nSpeed, NULL);
				}
				break ;
			default :
				{
					ExitConnect();
				}
				break ;
			}
			return S_OK;
		}
		break ;
	}
	return S_OK;
}

void CPeeperWnd::OnDestroy() 
{
	ExitConnect();
	if(::IsWindow(m_hWnd))
	{
		KillTimer(m_nTimerID);
	}
	if(m_hPeeperThread.m_hThread != NULL)
	{
		::TerminateThread(m_hPeeperThread.m_hThread, 0xDB);
		::WaitForSingleObject(m_hPeeperThread.m_hThread, INFINITE);
		m_hPeeperThread.m_hThread = NULL;
		TRACE(_T("Peeper Thread Exit.\n"));
	}
	if(m_pNotifyWnd)
	{
		::PostMessage(m_pNotifyWnd->GetSafeHwnd(), PL_PEEPER_NOTIFY, 
			(WPARAM)PL_PEEPER_NOTIFY_CLOSE, (LPARAM)this);
	}
	CScrollView::OnDestroy();
}

// tools function
BOOL CPeeperWnd::T_RunCommand(char *chCommand)
{
	BOOL bRet = FALSE;
	BOOL bPause = IsPause();
	
	if(!bPause)  Pause();

	if(m_sckClient[0] != INVALID_SOCKET)
	{
		int nRet = SendData((BYTE*)chCommand, strlen(chCommand), PL_FUNC_EXEC);
		if(nRet > 0)
		{
			bRet = TRUE;
		}
	}
	if(!bPause) Resume();

	return bRet;
}

BOOL CPeeperWnd::T_SendMsg(char *chMsg, UINT uType)
{
	BOOL bRet = FALSE;
	if(m_sckClient[0] != INVALID_SOCKET)
	{
		BOOL bPause = IsPause();
		if(!bPause)  Pause();
		
		int nRet = SendData((BYTE*)chMsg, strlen(chMsg), PL_MSG);
		if(nRet > 0)
		{
			bRet = TRUE;
		}
		if(!bPause) Resume();
	}
	
	return bRet;
}

BOOL CPeeperWnd::T_ExitWindow(UINT uType)
{
	BOOL bRet = FALSE;
	if(m_sckClient[0] != INVALID_SOCKET)
	{
		BOOL bPause = IsPause();
		if(!bPause)  Pause();
		
		BYTE chTemp[10];
		ZeroMemory(chTemp, 10);
		memcpy(chTemp, &uType, sizeof(UINT));
		int nRet = SendData((BYTE*)chTemp, sizeof(UINT), PL_FUNC_EXITWIN);
		if(nRet > 0)
		{
			bRet = TRUE;
		}
		if(!bPause) Resume();
	}
	return bRet;
}

BOOL CPeeperWnd::T_LockDesktop(BOOL bLock)
{
	BOOL bRet = FALSE;
	if(m_sckClient[0] != INVALID_SOCKET)
	{
		BOOL bPause = IsPause();
		if(!bPause)  Pause();
		
		BYTE chTemp[10];
		ZeroMemory(chTemp, 10);
		memcpy(chTemp, &(bLock), sizeof(BOOL));
		int nRet = SendData((BYTE*)chTemp, sizeof(BOOL), PL_FUNC_LOCK);
		if(nRet > 0)
		{
			bRet = TRUE;
		}
		if(!bPause) Resume();
	}
	return bRet;
}

BOOL CPeeperWnd::T_CopyFileToRemote(char *chFileSrc, char *chFileDes, HWND hNotifyWnd)
{
	BOOL bRet = FALSE;
	if(m_sckClient[0] != INVALID_SOCKET)
	{
		BOOL bPause = IsPause();
		if(!bPause)  Pause();
		int nRet = ::PL_SendSocketData(m_sckClient[0], (BYTE*)chFileDes, 
			strlen(chFileDes), PL_FUNC_FILE_COPY_S);
		if(nRet > 0)
		{
			BYTE chTemp[10];
			ZeroMemory(chTemp, 10);
			int nPort = m_uPort+2; //可以自己设置接收的发送文件的端口
			memcpy(chTemp, &nPort, sizeof(int));
			nRet = ::PL_SendSocketData(m_sckClient[0], chTemp, sizeof(int));
			if(nRet > 0)
			{
				nRet = ::PL_ReadSocketData(m_sckClient[0], chTemp, 10, NULL);
				::Sleep(500);
				bRet = ::PL_CopyFileClient(m_strIP, nPort, chFileSrc, TRUE, hNotifyWnd);
			}
		}
		if(!bPause) Resume();
	}
	return bRet;
}

BOOL CPeeperWnd::T_CopyFileFromRemote(char *chFileSrc, char *chFileDes, HWND hNotifyWnd)
{
	BOOL bRet = FALSE;
	if(m_sckClient[0] != INVALID_SOCKET)
	{
		BOOL bPause = IsPause();
		if(!bPause)  Pause();
		int nRet = ::PL_SendSocketData(m_sckClient[0], (BYTE*)chFileSrc, 
			strlen(chFileSrc), PL_FUNC_FILE_COPY_C);
		if(nRet > 0)
		{
			BYTE chTemp[10];
			ZeroMemory(chTemp, 10);
			int nPort = m_uPort+2; //可以自己设置接收的发送文件的端口
			memcpy(chTemp, &nPort, sizeof(int));
			nRet = ::PL_SendSocketData(m_sckClient[0], chTemp, sizeof(int));
			if(nRet > 0)
			{
				nRet = ::PL_ReadSocketData(m_sckClient[0], chTemp, 10, NULL);
				::Sleep(500);
				bRet = ::PL_CopyFileClient(m_strIP, nPort, chFileDes, FALSE, hNotifyWnd);
			}
		}
		if(!bPause) Resume();
	}
	return bRet;
}

BOOL CPeeperWnd::T_DeleteFile(char *chFile)
{
	BOOL bRet = FALSE;
	if(m_sckClient[0] != INVALID_SOCKET)
	{
		BOOL bPause = IsPause();
		if(!bPause)  Pause();
		
		int nRet = SendData((BYTE*)chFile, strlen(chFile), PL_FUNC_FILE_DELETE);
		if(nRet > 0)
		{
			BYTE chTemp[10];
			ZeroMemory(chTemp, 10);
			nRet = ReadData(chTemp, 10, NULL);
			if(nRet > 0)
			{
				bRet = *((BOOL*)(chTemp+1));
				bRet = !!bRet;
			}
		}
		if(!bPause) Resume();
	}
	return bRet;
}

BOOL CPeeperWnd::T_MoveFile(char *chFileSrc, char *chFileDes)
{
	BOOL bRet = FALSE;
	if(m_sckClient[0] != INVALID_SOCKET)
	{
		BOOL bPause = IsPause();
		if(!bPause)  Pause();
		
		int nRet = SendData((BYTE*)chFileSrc, strlen(chFileSrc), PL_FUNC_FILE_MOVE);
		if(nRet > 0)
		{
			nRet = SendData((BYTE*)chFileDes, strlen(chFileDes));
			if(nRet > 0)
			{
				BYTE chTemp[10];
				ZeroMemory(chTemp, 10);
				nRet = ReadData(chTemp, 10, NULL);
				if(nRet > 0)
				{
					bRet = *((BOOL*)(chTemp+1));
					bRet = !!bRet;
				}
			}
		}
		if(!bPause) Resume();
	}
	return bRet;
}

⌨️ 快捷键说明

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