LRESULT CALLBACK MainWndProc (HWND hwnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { static HWND hwndButton = 0; HDC hdc; /* A device context used for drawing */ PAINTSTRUCT ps; /* Also used during window drawing */ RECT rc; /* A rectangle used during drawing */ char cBuf[256] = ""; int i; switch (nMsg) { case WM_DESTROY: PostQuitMessage (0); return 0; break; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rc); for (i = 0; i < raw_mouse_count(); i++) { wsprintf(cBuf, "Mouse %i X: %ld\nMouse %i Y: %ld\nMouse %i Buttons: %i%i%i\nRelative Mode (lightgun): %i\nVirtual Desktop (Multimonitor): %i", i, get_raw_mouse_x_delta(i), i, get_raw_mouse_y_delta(i), i, is_raw_mouse_button_pressed(i, 0), is_raw_mouse_button_pressed(i, 1), is_raw_mouse_button_pressed(i, 2), is_raw_mouse_absolute(i), is_raw_mouse_virtual_desktop(i)); DrawText(hdc, cBuf, strlen(cBuf), &rc, DT_CENTER); OffsetRect(&rc,0,100); // move the draw position down a bit } EndPaint(hwnd, &ps); return 0; break; case WM_INPUT: { add_to_raw_mouse_x_and_y((HRAWINPUT)lParam); InvalidateRect(hwnd,0,TRUE); SendMessage(hwnd,WM_PAINT,0,0); return 0; } } return DefWindowProc (hwnd, nMsg, wParam, lParam); }
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { static char buff[80+1]; buff[0]=0; mxGetString(prhs[0],buff,80); if (strcmp(buff,"Init") == 0) { //DWORD threadId; if (threadId > 0) { mexPrintf("Init called twice before a Release was called. Trying to release first......\n"); PostThreadMessage(threadId, WM_QUIT, 0, 0); Sleep(1000); } CloseHandle(CreateThread(NULL, 0, Thread, NULL, 0, &threadId)); //const unsigned int dim_array[2] = {1,1}; //plhs[0] = mxCreateNumericArray(2,(const mwSize*)dim_array, mxDOUBLE_CLASS, mxREAL); for (int k=0;k< iMAXMICE;k++) HookMiceArray[k] = false; //double *buffer = (double*)mxGetPr(plhs[0]); //*buffer = threadId; return; } if (strcmp(buff,"Hook") == 0) { int iNumHooks = mxGetNumberOfElements(prhs[1]); double *aiHookArray = mxGetPr(prhs[1]); for (int k=0; k < iNumHooks ;k++) HookMiceArray[int(aiHookArray[k])] = true; } if (strcmp(buff,"Unhook") == 0) { int iNumHooks = mxGetNumberOfElements(prhs[1]); double *aiHookArray = mxGetPr(prhs[1]); for (int k=0; k < iNumHooks ;k++) HookMiceArray[int(aiHookArray[k])] = false; } if (strcmp(buff,"Release") == 0) { //DWORD threadId = (DWORD) (*(double*)mxGetPr(prhs[1])); if (threadId > 0) { PostThreadMessage(threadId, WM_QUIT, 0, 0); threadId = 0; } else { mexPrintf("Nothing To Release. Init was not called...\n"); } return; } if (strcmp(buff,"GetMiceName") == 0) { int NumMice = raw_mouse_count(); mwSize Dim[2] = {1,NumMice }; mxArray *mxNames = mxCreateCellArray(2,Dim); for (int k=0;k<NumMice;k++) { char name[5000]; int nSize = get_raw_mouse_name(k, name); mxSetCell(mxNames,k, mxCreateString(name)); } plhs[0] = mxNames; } if (strcmp(buff,"GetNumMice") == 0) { const unsigned int dim_array[2] = {1,1}; plhs[0] = mxCreateNumericArray(2,(const mwSize*)dim_array, mxDOUBLE_CLASS, mxREAL); double *buffer = (double*)mxGetPr(plhs[0]); if (threadId == 0) { mexPrintf("Call The Init Function First!\n"); *buffer = -1; } else { *buffer = raw_mouse_count(); } return; } if (strcmp(buff,"GetMouseData") == 0) { int MouseIndex= int(*(double*)mxGetPr(prhs[1])); const unsigned int dim_array[2] = {1,3}; plhs[0] = mxCreateNumericArray(2,(const mwSize*)dim_array, mxDOUBLE_CLASS, mxREAL); double *buffer = (double*)mxGetPr(plhs[0]); if (threadId == 0) { mexPrintf("Call The Init Function First!\n"); buffer[0] = 0; buffer[1] = 0; buffer[2] = 0; } else { buffer[0] = get_raw_mouse_x_delta(MouseIndex); buffer[1] = get_raw_mouse_y_delta(MouseIndex); buffer[2] = get_raw_mouse_z_delta(MouseIndex); } return; } if (strcmp(buff,"GetButtons") == 0) { double *MouseIndex= (double*)mxGetPr(prhs[1]); const unsigned int dim_array[2] = {1,3}; plhs[0] = mxCreateNumericArray(2,(const mwSize*)dim_array, mxDOUBLE_CLASS, mxREAL); double *buffer = (double*)mxGetPr(plhs[0]); if (threadId == 0) { mexPrintf("Call The Init Function First!\n"); for (int k=0;k<3;k++) { buffer[k] = 0; } } else { for (int k=0;k<3;k++) { buffer[k] = is_raw_mouse_button_pressed(int(MouseIndex[k]),k); } } return; } if (strcmp(buff,"GetWheels") == 0) { double *MouseIndex= (double*)mxGetPr(prhs[1]); if (MouseIndex == NULL) { mwSize dim[2] = {0,0}; plhs[0] = mxCreateNumericArray(2,(const mwSize*)dim, mxDOUBLE_CLASS, mxREAL); return; } int NumEl = mxGetNumberOfElements(prhs[1]); mwSize dim[2] = {1,NumEl}; plhs[0] = mxCreateNumericArray(2,(const mwSize*)dim, mxDOUBLE_CLASS, mxREAL); double *buffer = (double*)mxGetPr(plhs[0]); if (threadId == 0) { mexPrintf("Call The Init Function First!\n"); for (int k=0;k<MAX(dim[0],dim[1]);k++) { buffer[k] = 0; } } else { for (int k=0;k<NumEl;k++) { ULONG Z = get_raw_mouse_z_delta(int(MouseIndex[k])); buffer[k] = double((Z > 4294967295/2) ? double(Z)-4294967295 : Z); } } return; } }
DWORD WINAPI get_mouse_hid_device() { int lcv; if( pad_active == 1 ) { LoadConfig_Mouse( GetIniPath( "nuvee_ps2_usb_mouse1.ini" ) ); MessageBox( NULL, "Please connect the mouse you wish to use\r\r1- Close this box\r2- Press a button on the desired device\r3- Wait for immediate confirmation\r4- If no detection, click mouse on game window and try again\r5- Plugin will auto-remember HID name for next session", "Mouse 1 - Acquire", MB_OK ); } else { LoadConfig_Mouse( GetIniPath( "nuvee_ps2_usb_mouse2.ini" ) ); MessageBox( NULL, "Please connect the mouse you wish to use\r\r1- Close this box\r2- Press a button on the desired device\r3- Wait for immediate confirmation\r4- If no detection, click mouse on game window and try again\r5- Plugin will auto-remember HID name for next session", "Mouse 2 - Acquire", MB_OK ); } device_hid[ THIS_PAD ] = 0; // Joystick usage if( di_joystick_count > 0 && IDYES == MessageBox( NULL, "Will you be using a gamepad as your mouse?", "Joystick attached", MB_YESNO ) ) { int done; // wait for button de-click while(1) { bool stop; Poll_Joystick_DInput(); stop = 1; for( int lcv = 0; lcv < di_joystick_count; lcv++ ) { if( device_buttons[ lcv+20 ][0] || device_buttons[ lcv+20 ][1] || device_buttons[ lcv+20 ][2] || device_buttons[ lcv+20 ][3] || device_buttons[ lcv+20 ][4] ) { stop = 0; Sleep(1); break; } } if( stop ) break; } done = 0; while( done == 0 ) { Poll_Joystick_DInput(); // check joysticks FIRST! (PPJoy + GlovePIE) for( lcv = 0; lcv < di_joystick_count; lcv++ ) { // check for active device if( device_buttons[ lcv+20 ][0] || device_buttons[ lcv+20 ][1] || device_buttons[ lcv+20 ][2] || device_buttons[ lcv+20 ][3] || device_buttons[ lcv+20 ][4] ) { done = 1; device_hid[ THIS_PAD ] = lcv + 20; strcpy( mouse_name[ THIS_PAD ], di_joystick_guid[ lcv ] ); break; } } Sleep(1); } } // RawInput usage else if( rawinput_active && hidmouse_api == HIDMOUSE_API_RAWINPUT ) { int done; for( lcv = 0; lcv < raw_mouse_count(); lcv++ ) reset_raw_mouse_data(lcv); done = 0; while( done == 0 ) { // include SysMouse (non-raw devices) for( lcv = raw_mouse_count()-1; lcv >= 0; lcv-- ) { // check for active device if( is_raw_mouse_button_pressed(lcv,0) || is_raw_mouse_button_pressed(lcv,1) || is_raw_mouse_button_pressed(lcv,2) ) { done = 1; device_hid[ THIS_PAD ] = lcv; if( lcv > 0 ) strcpy( mouse_name[ THIS_PAD ], get_raw_mouse_name(lcv) ); else strcpy( mouse_name[ THIS_PAD ], "RawInput SysMouse" ); break; } } Sleep(1); } } // DirectInput else if( di_mouse_count > 0 && hidmouse_api == HIDMOUSE_API_DIRECTINPUT ) { int done; // wait for button de-click while(1) { Poll_Mouse_DInput(); if( device_buttons[0][0] || device_buttons[0][1] || device_buttons[0][2] ) { Sleep(1); continue; } break; } done = 0; while( done == 0 ) { // include SysMouse (non-raw devices) for( lcv = di_mouse_count-1; lcv >= 0; lcv-- ) { Poll_Mouse_DInput(); // check for active device if( device_buttons[ lcv ][0] || device_buttons[ lcv ][1] || device_buttons[ lcv ][2] ) { done = 1; device_hid[ THIS_PAD ] = lcv; if( lcv > 0 ) strcpy( mouse_name[ THIS_PAD ], di_mouse_guid[ lcv ] ); else strcpy( mouse_name[ THIS_PAD ], "DInput SysMouse" ); break; } Sleep(1); } } // end wait device } if( pad_active == 1 ) { MessageBox( NULL, "Device found - ready to use", "Mouse 1 - Acquire", MB_OK ); SaveConfig_Mouse( GetIniPath( "nuvee_ps2_usb_mouse1.ini" ) ); } else { MessageBox( NULL, "Device found - ready to use", "Mouse 2 - Acquire", MB_OK ); SaveConfig_Mouse( GetIniPath( "nuvee_ps2_usb_mouse2.ini" ) ); } return 0; }