コード例 #1
0
 /// <summary>
 /// Timer event when looking for Game's Process (auto-Hook)
 /// As opposed to Aliens: Extermination program, it will not close itself when the game's process has finished as
 /// the "patch" to bypass dongle request makes the game to quit and reload itself.....
 /// </summary>
 private void tProcess_Tick(Object Sender, EventArgs e)
 {
     try
     {
         Process[] processes = Process.GetProcessesByName(_TargetProcess_Name);
         if (processes.Length > 0)
         {
             _TargetProcess = processes[0];
             WriteLog("Attached to Process " + _TargetProcess_Name + ".exe");
             Bgw_Mouse.RunWorkerAsync();
         }
     }
     catch
     { }
 }
コード例 #2
0
        /// <summary>
        /// Timer event when looking for Game's Process (auto-Hook and auto-close)
        /// </summary>
        private void tProcess_Tick(Object Sender, EventArgs e)
        {
            if (!_TargetProcess_Hooked)
            {
                try
                {
                    Process[] processes = Process.GetProcessesByName(_TargetProcess_Name);
                    if (processes.Length > 0)
                    {
                        _TargetProcess                   = processes[0];
                        _TargetProcess_Handle            = _TargetProcess.Handle;
                        _TargetProcess_MemoryBaseAddress = _TargetProcess.MainModule.BaseAddress;

                        //Waiting for the game's MainWidowHandle to be created too
                        //If not, we can't get client size automatically
                        if (_TargetProcess_MemoryBaseAddress != IntPtr.Zero && _TargetProcess.MainWindowHandle != IntPtr.Zero)
                        {
                            _TargetProcess_Hooked = true;
                            WriteLog("Attached to Process " + _TargetProcess_Name + ".exe, ProcessHandle = " + _TargetProcess_Handle);
                            SetHack();
                            Bgw_Mouse.RunWorkerAsync();
                        }
                    }
                }
                catch
                {
                    //WriteLog("Error trying to hook " + _Target_Process_Name + ".exe");
                }
            }
            else
            {
                Process[] processes = Process.GetProcessesByName(_TargetProcess_Name);
                if (processes.Length <= 0)
                {
                    _TargetProcess_Hooked            = false;
                    _TargetProcess                   = null;
                    _TargetProcess_Handle            = IntPtr.Zero;
                    _TargetProcess_MemoryBaseAddress = IntPtr.Zero;
                    WriteLog(_TargetProcess_Name + ".exe closed");
                }
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }