コード例 #1
0
ファイル: keys.c プロジェクト: Ordinaryperson2/3DSController
void simulateKeyRelease(unsigned int key) {
	if(!key) return;
	
	INPUT ip = { 0 };
	
	if(key == VK_LBUTTON || key == VK_RBUTTON) {
		ip.type = INPUT_MOUSE;
		ip.mi.dwFlags = key == VK_LBUTTON ? MOUSEEVENTF_LEFTUP : MOUSEEVENTF_RIGHTUP;
	}
	else {
		ip.type = INPUT_KEYBOARD;
		ip.ki.wScan = mapVirtualKey(key);
		ip.ki.time = 0;
		ip.ki.dwExtraInfo = 0;
		ip.ki.wVk = 0;
		ip.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
	}
	
	SendInput(1, &ip, sizeof(INPUT));
}
コード例 #2
0
ファイル: keys.c プロジェクト: Ordinaryperson2/3DSController
void simulateKeyNewpress(unsigned int key) {
	if(!key) return;
	
	unsigned char unshift = 0;
	
	INPUT ip = { 0 };
	
	if(key == VK_LBUTTON || key == VK_RBUTTON) {
		ip.type = INPUT_MOUSE;
		ip.mi.dwFlags = key == VK_LBUTTON ? MOUSEEVENTF_LEFTDOWN : MOUSEEVENTF_RIGHTDOWN;
	}
	else {
		if(key == '!') {
			key = '1';
			simulateKeyNewpress(VK_SHIFT);
			unshift = 1;
		}
		else if(key == '?') {
			key = VK_DIVIDE;
			simulateKeyNewpress(VK_SHIFT);
			unshift = 1;
		}
		
		else if(key == '-') key = VK_OEM_MINUS;
		else if(key == ',') key = VK_OEM_COMMA;
		else if(key == '\13') key = VK_RETURN;
		
		ip.type = INPUT_KEYBOARD;
		ip.ki.wScan = mapVirtualKey(key);
		ip.ki.time = 0;
		ip.ki.dwExtraInfo = 0;
		ip.ki.wVk = 0;
		ip.ki.dwFlags = KEYEVENTF_SCANCODE;
	}
	
	SendInput(1, &ip, sizeof(INPUT));
	
	if(unshift) simulateKeyRelease(VK_SHIFT);
}
コード例 #3
0
ファイル: main.cpp プロジェクト: Potion/pocode
LONG WINAPI WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	poWindow *win = (poWindow*)GetWindowLongPtr(hwnd, GWL_USERDATA);

	switch(uMsg) {
		case WM_DESTROY:
			PostQuitMessage(0);
			break;

		case WM_SIZE:
			window_width = LOWORD(lParam);
			window_height = HIWORD(lParam);
			if(win) win->resized(0,0,window_width,window_height);
			break;

		case WM_RBUTTONDOWN:
			::SetCapture(hwnd);
			isDragging = true;
			if(win) win->mouseDown(LOSHORT(lParam), HISHORT(lParam), 0);
			break;
		case WM_RBUTTONUP:
			::ReleaseCapture();
			isDragging = false;	
			if(win) win->mouseUp(LOSHORT(lParam), HISHORT(lParam), 0);
			break;

		case WM_LBUTTONDOWN:
			::SetCapture(hwnd);
			isDragging = true;
			if(win) win->mouseDown(LOSHORT(lParam), HISHORT(lParam), 0);
			break;
		case WM_LBUTTONUP:
			::ReleaseCapture();
			isDragging = false;
			if(win) win->mouseUp(LOSHORT(lParam), HISHORT(lParam), 0);
			break;

		case WM_MBUTTONDOWN:
			::SetCapture(hwnd);
			isDragging = true;
			if(win) win->mouseDown(LOSHORT(lParam), HISHORT(lParam), 0);
			break;
		case WM_MBUTTONUP:
			::ReleaseCapture();
			isDragging = false;	
			if(win) win->mouseUp(LOSHORT(lParam), HISHORT(lParam), 0);
			break;

		case WM_MOUSEMOVE:
			if( isDragging )
				if(win) win->mouseDrag(LOSHORT(lParam), HISHORT(lParam), 0);
			else
				if(win) win->mouseMove(LOSHORT(lParam), HISHORT(lParam), 0);
			break;

		case WM_MOUSEWHEEL:
			break;

		case WM_SYSKEYDOWN: 
			{
				// alt-f4 ... pass to close the window
				bool alt_down = (GetKeyState(VK_LMENU) & 0x80) || (GetKeyState(VK_RMENU) & 0x80) || (GetKeyState(VK_MENU) & 0x80);
				if(VK_F4 == wParam && alt_down) {
					PostMessage(hwnd, WM_CLOSE, 0, 0);
					break;
				}
			}
		case WM_KEYDOWN:
			if(VK_F1 == wParam)
				doFullscreen(hwnd, !is_fullscreen);
			else
				if(win) win->keyDown(mapVirtualKey(wParam), wParam, getKeyModifiers());
			break;

		case WM_SYSKEYUP:
		case WM_KEYUP:
				if(win) win->keyUp(mapVirtualKey(wParam), wParam, getKeyModifiers());
			break;

		case WM_KILLFOCUS:
			// if we lose capture during a drag, post a mouse up event as a notifier
			if( isDragging ) {
				if(win) win->mouseDrag(LOSHORT(lParam), HISHORT(lParam), 0);
			}
			isDragging = false;
			break;

		case WM_ACTIVATE:
			// make sure our fullscreen window plays nice with the task switcher
			if(is_fullscreen) {
				// if we're loosing focus, minimize to system tray
				bool is_deactivated = WA_INACTIVE == LOWORD(wParam);
				if(is_deactivated)
					ShowWindow(hwnd,SW_SHOWMINIMIZED);
				else
					// sw_showmaximized flashes the title bar
					// sw_show flashes the system tray, go figure
					ShowWindow(hwnd,SW_SHOWMAXIMIZED);
			}
			break;

		default:
			return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}

	return 0;
}