Exemple #1
0
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);
}
Exemple #2
0
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;
	}


}