private void BgwMouse_DoWork(object sender, DoWorkEventArgs e) { while (true) { Debug_MouseScreen = string.Empty; Debug_ClientSize = string.Empty; Debug_MouseClient = string.Empty; Debug_MouseJoystick = string.Empty; //Getting On-screen Position Debug_MouseScreen = "X=" + _MouseScreenPosition.X.ToString() + ", Y=" + _MouseScreenPosition.Y.ToString(); Bgw_Mouse.ReportProgress(0); if (_TargetProcess_Hooked) { //Getting game's client size try { Rect TotalRes = new Rect(); GetClientRect(_TargetProcess.MainWindowHandle, ref TotalRes); _ClientWidth = TotalRes.Right - TotalRes.Left; _ClientHeight = TotalRes.Bottom - TotalRes.Top; } catch (Exception Ex) { _BgwErrorMsg = Ex.Message.ToString(); _BgwErrorSrc = Ex.Source.ToString(); _BgwErrorStk = Ex.StackTrace.ToString(); } Debug_ClientSize = _ClientWidth + "x" + _ClientHeight; Bgw_Mouse.ReportProgress(1); //Getting On-client cursor position _BgwErrorMsg = string.Empty; try { _MouseClientPosition.X = _MouseScreenPosition.X; _MouseClientPosition.Y = _MouseScreenPosition.Y; ScreenToClient(_TargetProcess.MainWindowHandle, ref _MouseClientPosition); Debug_MouseClient = "X=" + _MouseClientPosition.X.ToString() + ", Y=" + _MouseClientPosition.Y.ToString(); } catch (Exception Ex) { _BgwErrorMsg = Ex.Message.ToString(); _BgwErrorSrc = Ex.Source.ToString(); _BgwErrorStk = Ex.StackTrace.ToString(); } Bgw_Mouse.ReportProgress(2); //Convert to game compatible Axis value _BgwErrorMsg = string.Empty; try { //X,Y => [-32768 ; 32767] => 0xFFFF range double dMaxX = 65535.0; double dMaxY = 65535.0; _MouseJoystickPosition.X = Convert.ToInt32(Math.Round(dMaxX * _MouseClientPosition.X / _ClientWidth) - 32768); _MouseJoystickPosition.Y = Convert.ToInt32(Math.Round(dMaxY * _MouseClientPosition.Y / _ClientHeight) - 32768) * -1; if (_MouseJoystickPosition.X < -32768) { _MouseJoystickPosition.X = -32768; } if (_MouseJoystickPosition.Y < -32768) { _MouseJoystickPosition.Y = -32768; } if (_MouseJoystickPosition.X > 32767) { _MouseJoystickPosition.X = 32767; } if (_MouseJoystickPosition.Y > 32767) { _MouseJoystickPosition.Y = 32767; } if (Chk_x.Checked) { _MouseJoystickPosition.X = -_MouseJoystickPosition.X - 1; } if (Chk_y.Checked) { _MouseJoystickPosition.Y = -_MouseJoystickPosition.Y - 1; } Debug_MouseJoystick = "X=" + _MouseJoystickPosition.X.ToString() + ", Y=" + _MouseJoystickPosition.X.ToString(); _XOutputManager.SetLAxis_X(1, (short)_MouseJoystickPosition.X); _XOutputManager.SetLAxis_Y(1, (short)_MouseJoystickPosition.Y); } catch (Exception Ex) { _BgwErrorMsg = Ex.Message.ToString(); _BgwErrorSrc = Ex.Source.ToString(); _BgwErrorStk = Ex.StackTrace.ToString(); } Bgw_Mouse.ReportProgress(3); } System.Threading.Thread.Sleep(10); } }
private void BgwMouse_DoWork(object sender, DoWorkEventArgs e) { while (true) { _BgwErrorMsg = string.Empty; Debug_MouseScreen = string.Empty; Debug_MouseClient = string.Empty; Debug_MouseJoystick = string.Empty; Debug_ClientSize = string.Empty; //Getting On-screen Position Debug_MouseScreen = "X=" + _MouseScreenPosition.X.ToString() + ", Y=" + _MouseScreenPosition.Y.ToString(); Bgw_Mouse.ReportProgress(0); if (_TargetProcess_Hooked) { //Getting game's client size if (_AutoClientSize) { try { Rect TotalRes = new Rect(); GetClientRect(_TargetProcess.MainWindowHandle, ref TotalRes); _ClientWidth = TotalRes.Right - TotalRes.Left; _ClientHeight = TotalRes.Bottom - TotalRes.Top; } catch (Exception Ex) { _BgwErrorMsg = Ex.Message.ToString(); _BgwErrorSrc = Ex.Source.ToString(); _BgwErrorStk = Ex.StackTrace.ToString(); } Debug_ClientSize = _ClientWidth + "x" + _ClientHeight + " [Automatic Mode]"; } else { Debug_ClientSize = _ClientWidth + "x" + _ClientHeight + " [Manual Mode]"; } Bgw_Mouse.ReportProgress(1); //Getting On-client cursor position _BgwErrorMsg = string.Empty; try { _MouseClientPosition.X = _MouseScreenPosition.X; _MouseClientPosition.Y = _MouseScreenPosition.Y; ScreenToClient(_TargetProcess.MainWindowHandle, ref _MouseClientPosition); Debug_MouseClient = "X=" + _MouseClientPosition.X.ToString() + ", Y=" + _MouseClientPosition.Y.ToString(); } catch (Exception Ex) { _BgwErrorMsg = Ex.Message.ToString(); _BgwErrorSrc = Ex.Source.ToString(); _BgwErrorStk = Ex.StackTrace.ToString(); } Bgw_Mouse.ReportProgress(2); //Convert to game compatible Axis value _BgwErrorMsg = string.Empty; try { //X => [0-FFFF] = 65535 //Y => [0-FFFF] = 65535 double dMaxX = 65535.0; double dMaxY = 65535.0; _MouseInGamePosition.X = Convert.ToInt32(Math.Round(dMaxX * _MouseClientPosition.X / _ClientWidth)); _MouseInGamePosition.Y = Convert.ToInt32(Math.Round(dMaxY * _MouseClientPosition.Y / _ClientHeight)); if (_MouseInGamePosition.X < 0) { _MouseInGamePosition.X = 0; } if (_MouseInGamePosition.Y < 0) { _MouseInGamePosition.Y = 0; } if (_MouseInGamePosition.X > (int)dMaxX) { _MouseInGamePosition.X = (int)dMaxX; } if (_MouseInGamePosition.Y > (int)dMaxY) { _MouseInGamePosition.Y = (int)dMaxY; } Debug_MouseJoystick = "X=" + _MouseInGamePosition.X.ToString() + ", Y=" + _MouseInGamePosition.Y.ToString(); byte[] bufferX = { (byte)(_MouseInGamePosition.X & 0xFF), (byte)(_MouseInGamePosition.X >> 8) }; byte[] bufferY = { (byte)(_MouseInGamePosition.Y & 0xFF), (byte)(_MouseInGamePosition.Y >> 8) }; //Write Axis value to memory WriteBytes((int)_TargetProcess_MemoryBaseAddress + _P1_X_Offset, bufferX); WriteBytes((int)_TargetProcess_MemoryBaseAddress + _P1_Y_Offset, bufferY); } catch (Exception Ex) { _BgwErrorMsg = Ex.Message.ToString(); _BgwErrorSrc = Ex.Source.ToString(); _BgwErrorStk = Ex.StackTrace.ToString(); } Bgw_Mouse.ReportProgress(3); } System.Threading.Thread.Sleep(10); } }