?? peeperwnd.cpp
字號:
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 + -