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

📄 rcaclient.cpp

📁 远程控制软件源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
							EndDialog( dlg, TRUE );
							return TRUE;
						}
					}
					else
					{
						TranslateMessage( &msg );
						DispatchMessage( &msg );
					}
				}

				if( g_ThreadState == WAIT_REQUEST )
				{
					EndDialog( dlg, TRUE );
				}
			} 
			return TRUE;
			break;

		case IDCANCEL:
			EndDialog( dlg, FALSE );
			return TRUE;

		default:
			break;
		}
	default:
		return FALSE;
	}	
	return FALSE;
}


VOID WINAPI OnCommand( HWND hwnd, WPARAM w, LPARAM l )
{

	// 筛选命令 ID
	switch( w )
	{
	case ID_EXIT:
		if ( g_ThreadState == CONNECTING)
		{
			if( IDOK == MessageBox( hwnd, "正在获取远程计算机屏幕信息, 是否要中断连接 ?"
				, "RCA Client", MB_ICONQUESTION | MB_OKCANCEL ) )
				DestroyWindow( hwnd );
		}
		else
		{
			g_bMustExit = TRUE;
			DestroyWindow( hwnd );
		}

		break;

	case ID_CONNECT:
		//if( false )
		if( FALSE == DialogBox( g_hInstance, MAKEINTRESOURCE(IDD_CONNECTDIALOG), 
			g_hWnd, ConnectDialogProc ) )
		{
			return;
		} else {
			
			// 设置 UI
			
			EnableMenuItem( GetMenu(hwnd), ID_DISCONNECT, MF_ENABLED);
			EnableMenuItem( GetMenu(hwnd), ID_CONNECT, MF_GRAYED | MF_DISABLED);
			EnableMenuItem( GetMenu(hwnd), ID_REFRUSH, MF_ENABLED );
			
		}

		break;
	
	case ID_IMAGE_FORMAT_BMP:
		CheckMenuItem( GetMenu(hwnd), ID_IMAGE_FORMAT_BMP , MF_CHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_IMAGE_FORMAT_JPEG, MF_UNCHECKED );
		g_gm.dwImageFormat = IMAGE_FORMAT_BMP;
		return;
	case ID_IMAGE_FORMAT_JPEG:
		CheckMenuItem( GetMenu(hwnd), ID_IMAGE_FORMAT_JPEG , MF_CHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_IMAGE_FORMAT_BMP, MF_UNCHECKED );
		g_gm.dwImageFormat = IMAGE_FORMAT_JPEG;
		return;

	case ID_BIT_8:
		CheckMenuItem( GetMenu(hwnd), ID_BIT_8, MF_CHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_BIT_16, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_BIT_24, MF_UNCHECKED );
		g_gm.iBitCount	= 8;
		return;

	case ID_BIT_16:
		CheckMenuItem( GetMenu(hwnd), ID_BIT_8, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_BIT_16, MF_CHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_BIT_24, MF_UNCHECKED );
		g_gm.iBitCount	= 16;
		return;

	case ID_BIT_24:
		CheckMenuItem( GetMenu(hwnd), ID_BIT_8, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_BIT_16, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_BIT_24, MF_CHECKED );
		g_gm.iBitCount	= 24;
		return;

	case ID_JPEG_QUALITY_10:
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_10, MF_CHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_30, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_50, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_70, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_90, MF_UNCHECKED );
		g_gm.dwFlagEx1	= 10;
		return;

	case ID_JPEG_QUALITY_30:
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_10, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_30, MF_CHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_50, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_70, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_90, MF_UNCHECKED );
		g_gm.dwFlagEx1	= 30;
		return;

	case ID_JPEG_QUALITY_50:
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_10, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_30, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_50, MF_CHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_70, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_90, MF_UNCHECKED );
		g_gm.dwFlagEx1	= 50;
		return;

	case ID_JPEG_QUALITY_70:
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_10, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_30, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_50, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_70, MF_CHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_90, MF_UNCHECKED );
		g_gm.dwFlagEx1	= 70;
		return;

	case ID_JPEG_QUALITY_90:
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_10, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_30, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_50, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_70, MF_UNCHECKED );
		CheckMenuItem( GetMenu(hwnd), ID_JPEG_QUALITY_90, MF_CHECKED );
		g_gm.dwFlagEx1	= 90;
		return;


	case ID_REFRUSH:
		if( g_ThreadState == WAIT_REQUEST )
			SetEvent( g_tc.hBeginRequest );
		break;

	case ID_DISCONNECT:
		EnableMenuItem( GetMenu(hwnd), ID_CONNECT, MF_ENABLED );
		EnableMenuItem( GetMenu(hwnd), ID_DISCONNECT, MF_DISABLED | MF_GRAYED );
		EnableMenuItem( GetMenu(hwnd), ID_REFRUSH, MF_DISABLED | MF_GRAYED );

		if( g_ThreadState == WAIT_REQUEST )
		{
			SetEvent( g_tc.hBeginConnectEvent );
		}

		if( g_ThreadState == REQUESTING )
		{
			SetEvent( g_tc.hExitEvent );
		}

		closesocket( g_hSocket2 );
		g_hSocket2 = NULL;
		
		break;

	default:
		break;
	}

	return;
}
RCAMOUSEINPUT mi;
RCAKEYBDINPUT ki;

RCAREQUESTHEADER	rreqh;

LRESULT CALLBACK MainWindowProc( HWND hwnd, UINT msg, WPARAM w, LPARAM l )
{

	PAINTSTRUCT		ps;
	HDC				hdc;
	RECT			rect;
	INT				ret;
	GetClientRect( hwnd, &rect );
	
	static UINT_PTR timer;
	
	switch( msg )
	{
	case WM_RBUTTONDOWN:
		if( g_hSocket2 )
		{
			mi.dwExtraInfo =0;
			mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
			//mi.dx = (lParam&0x0000ffff) * (65535 / 1024);
			//mi.dy = (lParam>>16) * (65535 / 768);
			mi.mouseData = 0;
			mi.time	= 0;
			rreqh.dwRequestID = 0x40;
			rreqh.requestBytes = sizeof(RCAREQUESTHEADER) + sizeof(RCAMOUSEINPUT);
			ret = send(g_hSocket2, (char*)&rreqh, sizeof(rreqh), 0 );
			if( ret == SOCKET_ERROR )
				return FALSE;
			ret = send(g_hSocket2, (char*)&mi, sizeof(mi), 0 );
			if( ret == SOCKET_ERROR )
				return FALSE;
		}
		return TRUE;

	case WM_RBUTTONUP:
		if( g_hSocket2 )
		{
			mi.dwExtraInfo =0;
			mi.dwFlags = MOUSEEVENTF_RIGHTUP;
			//mi.dx = (lParam&0x0000ffff) * (65535 / 1024);
			//mi.dy = (lParam>>16) * (65535 / 768);
			mi.mouseData = 0;
			mi.time	= 0;
			rreqh.dwRequestID = 0x40;
			rreqh.requestBytes = sizeof(RCAREQUESTHEADER) + sizeof(RCAMOUSEINPUT);
			ret = send(g_hSocket2, (char*)&rreqh, sizeof(rreqh), 0 );
			if( ret == SOCKET_ERROR )
				return FALSE;
			ret = send(g_hSocket2, (char*)&mi, sizeof(mi), 0 );
			if( ret == SOCKET_ERROR )
				return FALSE;
		}
		return TRUE;

	case WM_LBUTTONUP:
		if( g_hSocket2 )
		{
			mi.dwExtraInfo =0;
			mi.dwFlags = MOUSEEVENTF_LEFTUP;
	//		mi.dx = (lParam&0x0000ffff) * (65535 / 1024);
	//		mi.dy = (lParam>>16) * (65535 / 768);
			mi.mouseData = 0;
			mi.time	= 0;
			rreqh.dwRequestID = 0x40;
			rreqh.requestBytes = sizeof(RCAREQUESTHEADER) + sizeof(RCAMOUSEINPUT);
			ret = send(g_hSocket2, (char*)&rreqh, sizeof(rreqh), 0 );
			if( ret == SOCKET_ERROR )
				return FALSE;
			ret = send(g_hSocket2, (char*)&mi, sizeof(mi), 0 );
			if( ret == SOCKET_ERROR )
				return FALSE;
		}
		return TRUE;
	case WM_LBUTTONDOWN:
		if( g_hSocket2 )
		{
			mi.dwExtraInfo =0;
			mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
	//		mi.dx = (lParam&0x0000ffff) * (65535 / 1024);
	//		mi.dy = (lParam>>16) * (65535 / 768);
			mi.mouseData = 0;
			mi.time	= 0;
			rreqh.dwRequestID = 0x40;
			rreqh.requestBytes = sizeof(RCAREQUESTHEADER) + sizeof(RCAMOUSEINPUT);
			ret = send(g_hSocket2, (char*)&rreqh, sizeof(rreqh), 0 );
			if( ret == SOCKET_ERROR )
				return FALSE;
			ret = send(g_hSocket2, (char*)&mi, sizeof(mi), 0 );
			if( ret == SOCKET_ERROR )
				return FALSE;
		
		}
		return TRUE;

	case WM_MOUSEMOVE:
		if( g_hSocket2 )
		{
			mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
			mi.dx = (LONG)(l & 0x0000ffff) * 65535 / rect.right;
			mi.dy = (LONG)(l >> 16) * 65535 / rect.bottom;
			rreqh.dwRequestID = 0x40;
			rreqh.requestBytes = 64;
			ret = send(g_hSocket2, (char*)&rreqh, sizeof(rreqh), 0 );
			if( ret == SOCKET_ERROR )
			{
				MessageBox( hwnd, "网络连接出现问题或 RCA 服务器已经被关闭", "RCA Client Information", MB_ICONINFORMATION );
				PostMessage( hwnd, WM_COMMAND, ID_DISCONNECT, 0 );
				return FALSE;
			}
			ret = send(g_hSocket2, (char*)&mi, sizeof(mi), 0 );
			if( ret == SOCKET_ERROR )
				return FALSE;
		}
		break;

	case WM_KEYDOWN:
		if( (w==VK_F5) && (g_ThreadState==WAIT_REQUEST) )
			SetEvent( g_tc.hBeginRequest );
				
		if( (w==VK_RWIN) || (w==VK_LWIN) )
			break;
		
		break;

	case WM_THREADWORKSTATE:
		OnThreadWorkState( hwnd, w, l );
		return 0;

	case WM_COMMAND:
		OnCommand( hwnd, w, l );
		return 0;

	case WM_TIMER:
		if( g_ThreadState != WAIT_CONNECT )
			PostMessage(hwnd, WM_COMMAND, ID_DISCONNECT , NULL );
		DestroyWindow( hwnd );
		KillTimer( hwnd, timer );

		return TRUE;

	case WM_CREATE:
		mi.dwExtraInfo =0;
		mi.mouseData = 0;
		mi.time	= 0;
		lstrcpy(rreqh.rcaID, "RCA" );
		rreqh.wMajorVersion =1;
		rreqh.wMinorVersion =0;
		timer = SetTimer(hwnd, 1, 10 * 60 * 1000, NULL );

		return OnCreate( hwnd, (PAINTSTRUCT*)l );
		
		
		g_gm.dwImageFormat	= IMAGE_FORMAT_JPEG;
		g_gm.iBitCount		= 8;
		g_gm.dwFlagEx1		= 50;

		break;

	case WM_SIZE:
		SendMessage( GetDlgItem( hwnd, ID_TOOLBAR ), TB_AUTOSIZE, 0, 0 );
		break;

	case WM_PAINT:
		hdc = BeginPaint( hwnd, &ps );
		OnPaint( hwnd, hdc );
		EndPaint( hwnd, &ps );
		break;

	case WM_DESTROY:
		g_bMustExit = TRUE;
		OnDestroy();

		PostQuitMessage(0);
		break;

	default:
		break;
	}

	return DefWindowProc( hwnd, msg, w, l );
}

INT WINAPI WinMain( HINSTANCE, HINSTANCE, PSTR, INT )
//int main(int argc, char* argv[])
{
	g_hInstance = GetModuleHandle( NULL );


	WNDCLASSEX wcex;
	wcex.cbClsExtra	= 0;
	wcex.cbSize		= sizeof(wcex);
	wcex.cbWndExtra	= 0;
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW +1);
	wcex.hCursor		= LoadCursor( NULL, IDC_ARROW );
	wcex.hIcon			= LoadIcon( g_hInstance, MAKEINTRESOURCE(IDI_CLIENTICON) );
	wcex.hIconSm		= LoadIcon( g_hInstance, MAKEINTRESOURCE(IDI_CLIENTICON) );
	wcex.hInstance		= g_hInstance;
	wcex.lpfnWndProc	= MainWindowProc;
	wcex.lpszMenuName	= NULL;
	wcex.lpszClassName	= "RCAClient_Window";
	wcex.style			= CS_VREDRAW | CS_HREDRAW;

	if( !RegisterClassEx( &wcex ) )
		return FALSE;

	g_hWnd = CreateWindowEx( 0, "RCAClient_Window", "RCA Client", WS_OVERLAPPEDWINDOW,
					CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
					NULL, LoadMenu( g_hInstance, MAKEINTRESOURCE(IDR_MENU1) ), 
					g_hInstance, NULL );

	if( !g_hWnd )
		return 0;

	ShowWindow( g_hWnd, SW_SHOWNORMAL );
	UpdateWindow( g_hWnd );

	MSG  msg;
	while( GetMessage( &msg, NULL, 0, 0 ) )
	{
		TranslateMessage( &msg );
		DispatchMessage( &msg );
	}


	return 0;
}

⌨️ 快捷键说明

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