bool WinRawInput::Initialize(void* app_handle, EmitEvent ee) { _emit_event = ee; memset(&m_mouseState, 0, sizeof(m_mouseState)); memset(&m_keyState, 0, sizeof(m_keyState)); m_pMouseStateEvent = alloc_object<Event_MouseState>(); m_pKeyStateEvent = alloc_object<Event_KeyboardState>(); m_pCharEvent = alloc_object<Event_Char>(0); m_inputBufferBytes = 0; m_inputBuffer = nullptr; RegisterDevices(); POINT p; p.x = 0; p.y = 0; RECT rc; GetClientRect((HWND)app_handle, &rc); p.x = (rc.right - rc.left) / 2; p.y = (rc.bottom - rc.top) / 2; ClientToScreen((HWND)app_handle, &p); SetCursorPos(p.x, p.y); return true; }
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { DWORD dwMscs; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: RegisterDevices(); COMPortOpen(); InitializeCriticalSection(&objCriticalSection); bThreadWorking = true; _beginthread(ThreadFunction, 0, NULL); break; case DLL_PROCESS_DETACH: bThreadWorking = false; dwMscs = 0; while (!bThreadEnded && (dwMscs < 2000)) { dwMscs += 20; Sleep(20); } DeleteCriticalSection(&objCriticalSection); COMPortClose(); // очистка Calibration ClearRegistrations(); break; } return TRUE; }
status_t VBoxMouse::InitCheck() { int rc = VbglR3Init(); if (!RT_SUCCESS(rc)) return ENXIO; input_device_ref device = { (char *)"VBoxMouse", B_POINTING_DEVICE, (void *)this }; input_device_ref *deviceList[2] = { &device, NULL }; RegisterDevices(deviceList); return B_OK; }
//============================================================================== TAsstPasteSender::TAsstPasteSender() : SUPER() { input_device_ref aKeyboard = { DEVICE_NAME_ASST_SENDER, B_KEYBOARD_DEVICE, NULL }; input_device_ref* aDevRef[2]; // DBEXP("TAsstPasteSender::TAsstPasteSender()", ""); // 初期化 mThread = NULL; // 登録 aDevRef[0] = &aKeyboard; aDevRef[1] = NULL; RegisterDevices(aDevRef); }
int _main( int argc, char *argv[] ) { int fres=0; s32 ret=0; struct IPCMessage *CMessage=NULL; thread_set_priority( 0, 0x58 ); #ifdef DEBUG dbgprintf("$IOSVersion: FFS-SD: %s %s 64M DEBUG$\n", __DATE__, __TIME__ ); #else dbgprintf("$IOSVersion: FFS-SD: %s %s 64M Release$\n", __DATE__, __TIME__ ); #endif //dbgprintf("FFS:Heap Init..."); HeapID = heap_create(Heap, sizeof Heap); QueueSpace = heap_alloc(HeapID, 0x20); //dbgprintf("ok\n"); QueueID = RegisterDevices(); if( QueueID < 0 ) { ThreadCancel( 0, 0x77 ); } sdhc_init(); //dbgprintf("FFS:Mounting SD...\n"); fres = f_mount(0, &fatfs); //dbgprintf("FFS:f_mount():%d\n", fres); if(fres != FR_OK) { //dbgprintf("FFS:Error %d while trying to mount SD\n", fres); ThreadCancel( 0, 0x77 ); } //dbgprintf("FFS:Clean up..."); //clean up folders FS_Delete("/tmp"); FS_Delete("/import"); f_mkdir("/tmp"); f_mkdir("/import"); thread_set_priority( 0, 0x0B ); //dbgprintf("ok\n"); while (1) { ret = mqueue_recv(QueueID, (void *)&CMessage, 0); if( ret != 0 ) { //dbgprintf("FFS:mqueue_recv(%d) FAILED:%d\n", QueueID, ret); continue; } //dbgprintf("FFS:Cmd:%d\n", CMessage->command ); switch( CMessage->command ) { case IOS_OPEN: { ret = FS_Open( CMessage->open.device, CMessage->open.mode ); #ifdef DEBUG if( ret != FS_NO_DEVICE ) dbgprintf("FFS:IOS_Open(\"%s\", %d):%d\n", CMessage->open.device, CMessage->open.mode, ret ); #endif mqueue_ack( (void *)CMessage, ret); } break; case IOS_CLOSE: { #ifdef DEBUG dbgprintf("FFS:IOS_Close(%d):", CMessage->fd); #endif ret = FS_Close( CMessage->fd ); #ifdef DEBUG dbgprintf("%d\n", ret ); #endif mqueue_ack( (void *)CMessage, ret); } break; case IOS_READ: { #ifdef DEBUG dbgprintf("FFS:IOS_Read(%d, 0x%p, %u):", CMessage->fd, CMessage->read.data, CMessage->read.length ); #endif ret = FS_Read( CMessage->fd, CMessage->read.data, CMessage->read.length ); #ifdef DEBUG dbgprintf("%d\n", ret ); #endif mqueue_ack( (void *)CMessage, ret ); } break; case IOS_WRITE: { #ifdef DEBUG dbgprintf("FFS:IOS_Write(%d, 0x%p, %u)", CMessage->fd, CMessage->write.data, CMessage->write.length ); #endif ret = FS_Write( CMessage->fd, CMessage->write.data, CMessage->write.length ); #ifdef DEBUG dbgprintf(":%d\n", ret ); #endif mqueue_ack( (void *)CMessage, ret ); } break; case IOS_SEEK: { #ifdef DEBUG dbgprintf("FFS:IOS_Seek(%d, %x, %d):", CMessage->fd, CMessage->seek.offset, CMessage->seek.origin ); #endif ret = FS_Seek( CMessage->fd, CMessage->seek.offset, CMessage->seek.origin ); #ifdef DEBUG dbgprintf("%d\n", ret ); #endif mqueue_ack( (void *)CMessage, ret ); } break; case IOS_IOCTL: FFS_Ioctl(CMessage); break; case IOS_IOCTLV: FFS_Ioctlv(CMessage); break; #ifdef EDEBUG default: dbgprintf("FFS:unimplemented/invalid msg: %08x\n", CMessage->command); mqueue_ack( (void *)CMessage, -1017); #endif } } return 0; }