/// <summary> /// Construcor /// </summary> public Wnd_DemulShooterGui(bool IsVerbose) { InitializeComponent(); Logger.IsEnabled = IsVerbose; _This = this; this.Text = "DemulShooter_GUI " + System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString(); Logger.WriteLog(""); Logger.WriteLog("---------------- Program Start -- DemulShooter_GUI v" + System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString() + " ----------------"); //Finding plugged devices _AvailableControllers = RawInputHelper.GetRawInputDevices(new RawInputDeviceType[] { RawInputDeviceType.RIM_TYPEHID, RawInputDeviceType.RIM_TYPEMOUSE }); Logger.WriteLog("Found " + _AvailableControllers.Length + " available RawInput devices :"); foreach (RawInputController c in _AvailableControllers) { try { Logger.WriteLog(" + [" + c.DeviceType.ToString() + "] " + c.DeviceName); } catch (Exception ex) { Logger.WriteLog("Wnd_DemulShooterGui() ERROR : " + ex.Message.ToString()); } } //Reading config file to get parameters _Configurator = new Configurator(); _Configurator.ReadDsConfig(AppDomain.CurrentDomain.BaseDirectory + CONF_FILENAME); _Configurator.Read_Sha_Conf(); Logger.WriteLog("Initializing GUI [Players] pages..."); int TabPageIndex = 0; _GUI_Players = new List <GUI_Player>(); foreach (PlayerSettings PlayerData in _Configurator.PlayersSettings) { if (PlayerData.Mode == PlayerSettings.PLAYER_MODE_RAWINPUT) { //For each player, create a tab on the GUI GUI_Player gPlayer = new GUI_Player(PlayerData, _AvailableControllers); Logger.WriteLog("Adding PlayerData to the list..."); _GUI_Players.Add(gPlayer); Logger.WriteLog("Adding Player tab to the GUI..."); tabControl1.TabPages[TabPageIndex].Controls.Add(gPlayer); TabPageIndex++; } else { //Logger.WriteLog("P" + Player.ID + " Gamepad ID = " + Player.GamepadID); } } //Fill Analog calibration Tab Logger.WriteLog("Initializing GUI [Analog calibration] page..."); _GUI_AnalogCalibrations = new List <GUI_AnalogCalibration>(); for (int i = 1; i <= 4; i++) { GUI_AnalogCalibration Calib = new GUI_AnalogCalibration(i, _Configurator.GetPlayerSettings(i)); TableLayout_Calib.Controls.Add(Calib); _GUI_AnalogCalibrations.Add(Calib); } //Fill ActLabs tab Logger.WriteLog("Initializing GUI [Act Lab] page..."); Cb_ActLabsOffset.Checked = _Configurator.Act_Labs_Offset_Enable; Chk_DspCorrectedCrosshair.Checked = _Configurator.Act_Labs_Display_Crosshair; Txt_ActLabs_X1.Text = _Configurator.GetPlayerSettings(1).Act_Labs_Offset_X.ToString(); Txt_ActLabs_Y1.Text = _Configurator.GetPlayerSettings(1).Act_Labs_Offset_Y.ToString(); Txt_ActLabs_X2.Text = _Configurator.GetPlayerSettings(2).Act_Labs_Offset_X.ToString(); Txt_ActLabs_Y2.Text = _Configurator.GetPlayerSettings(2).Act_Labs_Offset_Y.ToString(); Txt_ActLabs_X3.Text = _Configurator.GetPlayerSettings(3).Act_Labs_Offset_X.ToString(); Txt_ActLabs_Y3.Text = _Configurator.GetPlayerSettings(3).Act_Labs_Offset_Y.ToString(); Txt_ActLabs_X4.Text = _Configurator.GetPlayerSettings(4).Act_Labs_Offset_X.ToString(); Txt_ActLabs_Y4.Text = _Configurator.GetPlayerSettings(4).Act_Labs_Offset_Y.ToString(); //Fill Model2 Tab TXT_CH_P1.Text = GetKeyStringFromScanCode((int)_Configurator.DIK_M2_Crosshair_P1); TXT_CH_P2.Text = GetKeyStringFromScanCode((int)_Configurator.DIK_M2_Crosshair_P2); TXT_CH_VIS.Text = GetKeyStringFromScanCode((int)_Configurator.DIK_M2_Crosshair_Visibility); //Fill Silent Hill tab Logger.WriteLog("Initializing GUI [Silent Hill] pages..."); TXT_P1_S.Text = GetKeyStringFromScanCode((int)_Configurator.DIK_Sha_P1_Start); TXT_P1_T.Text = GetKeyStringFromScanCode((int)_Configurator.DIK_Sha_P1_Trigger); TXT_P2_S.Text = GetKeyStringFromScanCode((int)_Configurator.DIK_Sha_P2_Start); TXT_P2_T.Text = GetKeyStringFromScanCode((int)_Configurator.DIK_Sha_P2_Trigger); TXT_EXIT.Text = GetKeyStringFromScanCode((int)_Configurator.DIK_Sha_Exit); TXT_SERVICE.Text = GetKeyStringFromScanCode((int)_Configurator.DIK_Sha_Service); TXT_TEST.Text = GetKeyStringFromScanCode((int)_Configurator.DIK_Sha_Test); //Fill Gundam tab Logger.WriteLog("Initializing GUI [Gundam] pages..."); Chk_GundamP1Pedal.Checked = _Configurator.Gsoz_Pedal_P1_Enabled; Chk_GundamP2Pedal.Checked = _Configurator.Gsoz_Pedal_P2_Enabled; TXT_GSOZ_PEDAL_1.Text = GetKeyStringFromScanCode((int)_Configurator.DIK_Gsoz_Pedal_P1); TXT_GSOZ_PEDAL_2.Text = GetKeyStringFromScanCode((int)_Configurator.DIK_Gsoz_Pedal_P2); //Fill Heavy Fire Afghanistan tab Logger.WriteLog("Initializing GUI [Heavy Fire Afghanistan] pages..."); Txt_HF3_Browse.Text = _Configurator.HF3_Path; TrackBar_HF3_Cover.Value = _Configurator.HF3_CoverSensibility; //Fill Heavy Fire Shattered Spear tab Logger.WriteLog("Initializing GUI [Heavy Fire S.S] pages..."); Txt_HF4_Browse.Text = _Configurator.HF4_Path; TrackBar_HF4_Cover.Value = _Configurator.HF4_CoverSensibility; //Fill Output Tab Logger.WriteLog("Initializing GUI [Output] pages..."); Cbox_Outputs.Checked = _Configurator.OutputEnabled; Txt_OutputDelay.Text = _Configurator.OutputPollingDelay.ToString(); Txt_OutputRecoilOn.Text = _Configurator.OutputCustomRecoilOnDelay.ToString(); Txt_OutputRecoilOff.Text = _Configurator.OutputCustomRecoilOffDelay.ToString(); Txt_OutputDamaged.Text = _Configurator.OutputCustomDamagedDelay.ToString(); // Register to rawinput Logger.WriteLog("Registering to RawInput service..."); RawInputDevice[] rid = new RawInputDevice[3]; rid[0].UsagePage = HidUsagePage.GENERIC; rid[0].Usage = HidUsage.Joystick; rid[0].dwFlags = RawInputDeviceFlags.RIDEV_INPUTSINK; rid[0].hwndTarget = this.Handle; rid[1].UsagePage = HidUsagePage.GENERIC; rid[1].Usage = HidUsage.Mouse; rid[1].dwFlags = RawInputDeviceFlags.RIDEV_INPUTSINK; rid[1].hwndTarget = this.Handle; rid[2].UsagePage = HidUsagePage.GENERIC; rid[2].Usage = HidUsage.Gamepad; rid[2].dwFlags = RawInputDeviceFlags.RIDEV_INPUTSINK; rid[2].hwndTarget = this.Handle; if (!Win32API.RegisterRawInputDevices(rid, (uint)rid.Length, (uint)Marshal.SizeOf(rid[0]))) { MessageBox.Show("Failed to register raw input device(s).", "DemulShooter Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } //Install Low Level keyboard hook Logger.WriteLog("Installing Low-Level Keyboard Hook..."); ApplyKeyboardHook(); Cbo_PageSettings.SelectedIndex = 0; }
//private bool _UseSingleMouse = true; public DemulShooterWindow(string[] Args, bool isVerbose) { //Stop program if Demulshooter already running Process[] pDemulShooter = Process.GetProcessesByName("DemulShooter"); if (pDemulShooter.Length > 1) { MessageBox.Show("Another instance of DemulShooter is already running.\nPlease terminate it before launching a new one", "DemulShooter", MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.Exit(0); } //Creating TrayIcon and TrayIcon "Exit" menu Application.ApplicationExit += new EventHandler(OnApplicationExit); InitializeComponent(); Logger.IsEnabled = isVerbose; Logger.InitLogFileName(); Logger.WriteLog(""); Logger.WriteLog("---------------- Program Start -- DemulShooter v" + System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString() + " ----------------"); // Parsing commandline arguments for (int i = 0; i < Args.Length; i++) { Logger.WriteLog("Cmdline arg " + i + " : " + Args[i]); if (Args[i].ToLower().StartsWith("-ddinumber")) { try { //-1 to transform to a 0-based index for later calculation _Ddinumber = UInt32.Parse((Args[i].Split('='))[1].Trim()) - 1; } catch { Logger.WriteLog("-ddinumber parameter not good, it will keep default value"); } } else if (Args[i].ToLower().Equals("-hardffl")) { _HardFfl = true; } else if (Args[i].ToLower().StartsWith("-forcexratio")) { String sX = (Args[i].Split('='))[1].Trim(); try { if (sX.Contains("/") && sX.Split('/').Length > 1) { double d1 = Double.Parse(sX.Split('/')[0]); double d2 = Double.Parse(sX.Split('/')[1]); _ForceXratio = d1 / d2; } else { _ForceXratio = Double.Parse(sX, CultureInfo.InvariantCulture); } } catch { Logger.WriteLog("Can't set -ForcedXratio option : " + sX + " is not a valid value"); } } else if (Args[i].ToLower().Equals("-nocrosshair")) { _HideGameCrosshair = true; } else if (Args[i].ToLower().Equals("-noautoreload")) { _NoAutoReload = true; } else if (Args[i].ToLower().Equals("-noautofire")) { _NoAutoFire = true; } if (Args[i].ToLower().Equals("-noinput")) { _NoInput = true; } else if (Args[i].ToLower().Equals("-noguns")) { _NoGuns = true; } else if (Args[i].ToLower().Equals("-noresize")) { _DisableWindow = true; } if (Args[i].ToLower().StartsWith("-rom")) { _Rom = (Args[i].Split('='))[1].Trim(); } else if (Args[i].ToLower().StartsWith("-target")) { _Target = (Args[i].Split('='))[1].Trim(); if (_Target.StartsWith("demul")) { _DemulVersion = _Target.Substring(5, 3); } } else if (Args[i].ToLower().Equals("-widescreen")) { _WidescreenHack = true; } } if (_TrayIcon != null) { _TrayIcon.Text += "[" + _Target + "] [" + _Rom + "]"; } //Finding plugged devices _AvailableControllers = RawInputHelper.GetRawInputDevices(new RawInputDeviceType[] { RawInputDeviceType.RIM_TYPEHID, RawInputDeviceType.RIM_TYPEMOUSE }); Logger.WriteLog("Found " + _AvailableControllers.Length + " available RawInput devices :"); foreach (RawInputController c in _AvailableControllers) { try { Logger.WriteLog(" + [" + c.DeviceType.ToString() + "] " + c.DeviceName); } catch (Exception ex) { Logger.WriteLog("ERROR : " + ex.Message.ToString()); } } //Reading config file to get parameters _Configurator = new Configurator(); _Configurator.ReadDsConfig(AppDomain.CurrentDomain.BaseDirectory + @"\" + DEMULSHOOTER_CONF_FILENAME); foreach (PlayerSettings Player in _Configurator.PlayersSettings) { Logger.WriteLog("P" + Player.ID + " mode = " + Player.Mode); if (Player.Mode == PlayerSettings.PLAYER_MODE_RAWINPUT) { bool bControllerfound = false; Logger.WriteLog("P" + Player.ID + " device = " + Player.DeviceName); foreach (RawInputController Controller in _AvailableControllers) { //Usually , the device name never change and it's easy to find back a controller if (Controller.DeviceName == Player.DeviceName) { Player.RIController = Controller; Player.RIController.Selected_AxisX = Player.HidAxisX; Player.RIController.Selected_AxisY = Player.HidAxisY; Player.RIController.Selected_OnScreenTriggerButton = Player.HidButton_OnScreenTrigger; Player.RIController.Selected_ActionButton = Player.HidButton_Action; Player.RIController.Selected_OffScreenTriggerButton = Player.HidButton_OffScreenTrigger; Logger.WriteLog("P" + Player.ID + " device plugged and found, Handle = 0x" + Controller.DeviceHandle); Logger.WriteLog("P" + Player.ID + " device : " + Controller.ManufacturerName + " / " + Controller.ProductName); bControllerfound = true; break; } } //Unfortunatelly, on a few cases (SONY DS4 for example), a part of the device name changes so we will check again //with what seems to be a fixed part of the name if (!bControllerfound) { /*foreach (RawInputController Controller in _AvailableControllers) * { * //Usually , the device name never change and it's easy to find back a controller * if (Controller.DeviceName == Player.DeviceName) * { * Player.RIController = Controller; * Player.RIController.Set_AxisX(Player.HidAxisX); * Player.RIController.Set_AxisY(Player.HidAxisY); * Player.RIController.Set_Button_OnScreenTrigger_Index(Player.HidButton_OnScreenTrigger_Index); * Player.RIController.Set_Button_Action_Index(Player.HidButton_Action_Index); * Player.RIController.Set_Button_OffScreenTrigger_Index(Player.HidButton_OffScreenTrigger_Index); * Logger.WriteLog("P" + Player.ID + " device plugged and found, Handle = 0x" + Controller.DeviceHandle); * Logger.WriteLog("P" + Player.ID + " device : " + Controller.ProductName + " / " + Controller.DeviceName); * bControllerfound = true; * break; * } * }*/ } } else { Logger.WriteLog("P" + Player.ID + " Gamepad ID = " + Player.GamepadID); } } //Info on Monitor (max resolution) var scope = new System.Management.ManagementScope(); var q = new System.Management.ObjectQuery("SELECT * FROM CIM_VideoControllerResolution"); String Maxres = String.Empty; using (var searcher = new System.Management.ManagementObjectSearcher(scope, q)) { var results = searcher.Get(); foreach (var item in results) { Maxres = item["Caption"].ToString(); } } Logger.WriteLog("Monitor maximum resolution = " + Maxres); CreateRawMessageWindow(); //Register to RawInput thanks to the previously created window Handle RawInputDevice[] rid = new RawInputDevice[3]; rid[0].UsagePage = HidUsagePage.GENERIC; rid[0].Usage = HidUsage.Joystick; rid[0].dwFlags = RawInputDeviceFlags.RIDEV_INPUTSINK; rid[0].hwndTarget = _RawMessageWnd_hWnd; rid[1].UsagePage = HidUsagePage.GENERIC; rid[1].Usage = HidUsage.Mouse; rid[1].dwFlags = RawInputDeviceFlags.RIDEV_INPUTSINK; rid[1].hwndTarget = _RawMessageWnd_hWnd; rid[2].UsagePage = HidUsagePage.GENERIC; rid[2].Usage = HidUsage.Gamepad; rid[2].dwFlags = RawInputDeviceFlags.RIDEV_INPUTSINK; rid[2].hwndTarget = _RawMessageWnd_hWnd; if (!Win32API.RegisterRawInputDevices(rid, (uint)rid.Length, (uint)Marshal.SizeOf(rid[0]))) { MessageBox.Show("Failed to register raw input device(s).", "DemulShooter Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } //Starting Mame-style output daemon if (_Configurator.OutputEnabled) { Logger.WriteLog("Starting Output daemon..."); _OutputHelper = new MameOutputHelper(_RawMessageWnd_hWnd, _Configurator.OutputCustomRecoilOnDelay, _Configurator.OutputCustomRecoilOffDelay, _Configurator.OutputCustomDamagedDelay); _OutputHelper.Start(); _OutputUpdateLoop = new Thread(new ThreadStart(ReadAndSendOutput_Thread)); _OutputUpdateLoop.Start(); } //Starting the fun... if (_Target.Length > 0 && (_Rom.Length > 0 || _Target.StartsWith("dolphin"))) { //Install Low-Level mouse hook ApplyMouseHook(); //Install Low Level keyboard hook ApplyKeyboardHook(); /* * //Running Xinput daemon if needed * bool EnableXInputProc = false; * foreach (ControllerDevice Device in _ControllerDevices) * { * if (Device.GamepadID != -1) * { * EnableXInputProc = true; * break; * } * } * if (EnableXInputProc) * Bgw_XInput.RunWorkerAsync(); */ if (_Target.Equals("chihiro")) { switch (_Rom.ToLower()) { case "vcop3": { _Game = new Game_CxbxVcop3(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); }; break; } } //Demul games else if (_Target.StartsWith("demul")) { if (_Rom.ToLower().Equals("confmiss") || _Rom.ToLower().Equals("deathcox") || _Rom.ToLower().StartsWith("hotd2") || _Rom.ToLower().Equals("lupinsho") || _Rom.ToLower().Equals("mok")) { _Game = new Game_DemulNaomi(_Rom.ToLower(), _DemulVersion, _ForceXratio, _NoInput, isVerbose, _DisableWindow, _WidescreenHack); } else if (_Rom.ToLower().StartsWith("ninjaslt")) { _Game = new Game_DemulJvs(_Rom.ToLower(), _DemulVersion, _ForceXratio, _NoInput, isVerbose, _DisableWindow, _WidescreenHack); } else if (_Rom.ToLower().Equals("braveff")) { _Game = new Game_DemulHikaru(_Rom.ToLower(), _DemulVersion, _ForceXratio, _NoInput, isVerbose, _DisableWindow, _WidescreenHack); } else if (_Rom.ToLower().Equals("manicpnc") || _Rom.ToLower().Equals("pokasuka")) { _Game = new Game_DemulManicpnc(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose, _DisableWindow, _WidescreenHack); } else { _Game = new Game_DemulAtomiswave(_Rom.ToLower(), _DemulVersion, _ForceXratio, _NoInput, isVerbose, _DisableWindow, _WidescreenHack); } } //Dolphin else if (_Target.Equals("dolphin5")) { _Game = new Game_Dolphin5(_Rom.ToLower(), _Ddinumber, _Configurator.DIK_Dolphin_P2_LClick, _Configurator.DIK_Dolphin_P2_MClick, _Configurator.DIK_Dolphin_P2_RClick, _ForceXratio, _NoInput, isVerbose); } //GlobalVR game else if (_Target.Equals("globalvr")) { switch (_Rom.ToLower()) { case "aliens": { _Game = new Game_GvrAliens(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "farcry": { _Game = new Game_GvrFarCryV2(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "fearland": { _Game = new Game_GvrFearLand(_Rom.ToLower(), _HardFfl, _ForceXratio, _NoInput, isVerbose); } break; default: break; } } //Lindbergh else if (_Target.Equals("lindbergh")) { switch (_Rom.ToLower()) { case "2spicy": { _Game = new Game_Lindbergh2spicy(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "hotd4": { _Game = new Game_LindberghHotd4(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "lgj": { _Game = new Game_LindberghLgj(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "lgjsp": { _Game = new Game_LindberghLgjsp(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "rambo": { _Game = new Game_LindberghRambo(_Rom.ToLower(), _HideGameCrosshair, _ForceXratio, _NoInput, isVerbose); } break; default: break; } } //All model2 roms share same method else if (_Target.Equals("model2")) { switch (_Rom.ToLower()) { case "bel": { _Game = new Game_Model2Bel(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "gunblade": { _Game = new Game_Model2Gunblade(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "hotd": { _Game = new Game_Model2Hotd(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "rchase2": { _Game = new Game_Model2Rchase2(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "vcop": { _Game = new Game_Model2Vcop(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "vcop2": { _Game = new Game_Model2Vcop2(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; default: break; } } //Ring system else if (_Target.Equals("ringwide")) { switch (_Rom.ToLower()) { case "sgg": { _Game = new Game_RwSGG(_Rom.ToLower(), _NoAutoFire, _ForceXratio, _NoInput, isVerbose); } break; case "lgi": { _Game = new Game_RwLGI(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "lgi3d": { _Game = new Game_RwLGI3D(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "og": { _Game = new Game_RwOpGhost(_Rom.ToLower(), _Configurator.OpGhost_EnableFreeplay, _Configurator.OpGhost_CreditsToStart, _Configurator.OpGhost_CreditsToContinue, _Configurator.OpGhost_CoinsByCredits, _ForceXratio, _NoInput, isVerbose); } break; case "sdr": { _Game = new Game_RwSDR(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); }; break; case "tha": { _Game = new Game_RwTransformers(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); }; break; default: break; } } //TTX game else if (_Target.Equals("ttx")) { switch (_Rom.ToLower()) { case "bkbs": { _Game = new Game_TtxBlockKingBallShooter(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "eadp": { _Game = new Game_TtxEadp(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "gattack4": { _Game = new Game_TtxGaiaAttack4(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "gsoz": { _Game = new Game_TtxGundam(_Rom.ToLower(), _Configurator.Gsoz_Pedal_P1_Enabled, _Configurator.DIK_Gsoz_Pedal_P1, _Configurator.Gsoz_Pedal_P2_Enabled, _Configurator.DIK_Gsoz_Pedal_P2, _ForceXratio, _NoInput, isVerbose); } break; case "gsoz2p": { _Game = new Game_TtxGundam(_Rom.ToLower(), _Configurator.Gsoz_Pedal_P1_Enabled, _Configurator.DIK_Gsoz_Pedal_P1, _Configurator.Gsoz_Pedal_P2_Enabled, _Configurator.DIK_Gsoz_Pedal_P2, _ForceXratio, _NoInput, isVerbose); } break; case "hmuseum": { _Game = new Game_TtxHauntedMuseum(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "hmuseum2": { _Game = new Game_TtxHauntedMuseum2(_Rom.ToLower(), _HardFfl, _ForceXratio, _NoInput, isVerbose); } break; case "mgungun2": { _Game = new Game_TtxGungun2(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "sha": { _Game = new Game_TtxSha(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; } } //Windows Games else if (_Target.Equals("windows")) { switch (_Rom.ToLower()) { case "artdead": { _Game = new Game_WndArtIsDead(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "friction": { _Game = new Game_WndFriction(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; case "hfa": { _Game = new Game_WndHeavyFire3Pc("hfa", _Configurator.HF3_Path, _Configurator.HF3_CoverSensibility, _NoInput, false, isVerbose); }; break; case "hfa2p": { _Game = new Game_WndHeavyFire3Pc("hfa", _Configurator.HF3_Path, _Configurator.HF3_CoverSensibility, _NoInput, true, isVerbose); }; break; case "hfss": { _Game = new Game_WndHeavyFire4Pc("hfss", _Configurator.HF4_Path, _Configurator.HF4_CoverSensibility, _NoInput, false, isVerbose); }; break; case "hfss2p": { _Game = new Game_WndHeavyFire4Pc("hfss", _Configurator.HF4_Path, _Configurator.HF4_CoverSensibility, _NoInput, true, isVerbose); }; break; case "hod2pc": { _Game = new Game_WndHod2pc(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); }; break; case "hod3pc": { _Game = new Game_WndHod3pc(_Rom.ToLower(), _NoAutoReload, _NoGuns, _ForceXratio, _NoInput, isVerbose); }; break; case "hodo": { _Game = new Game_WndHotdoPc(_Rom.ToLower(), _NoInput, isVerbose); }; break; case "reload": { _Game = new Game_WndReload(_Rom.ToLower(), _HideGameCrosshair, _NoInput, isVerbose); }; break; } } //W.I.P Games else if (_Target.Equals("wip")) { switch (_Rom.ToLower()) { case "wartran": { _Game = new Game_WndWartran(_Rom.ToLower(), _ForceXratio, _NoInput, isVerbose); } break; } } _Game.OnGameHooked += new Game.GameHookedHandler(OnGameHooked); } }
public DemulShooterWindowX64(string[] Args, bool isVerbose) { _This = this; //Stop program if Demulshooter already running Process[] pDemulShooter = Process.GetProcessesByName("DemulShooterX64"); if (pDemulShooter.Length > 1) { MessageBox.Show("Another instance of DemulShooterX64 is already running.\nPlease terminate it before launching a new one", "DemulShooterX64", MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.Exit(0); } //Creating TrayIcon and TrayIcon "Exit" menu Application.ApplicationExit += new EventHandler(OnApplicationExit); InitializeComponent(); Logger.IsEnabled = isVerbose; Logger.InitLogFileName(); Logger.WriteLog(""); Logger.WriteLog("---------------- Program Start -- DemulShooterX64 v" + System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString() + " ----------------"); // Parsing commandline arguments for (int i = 0; i < Args.Length; i++) { Logger.WriteLog("Cmdline arg " + i + " : " + Args[i]); if (Args[i].ToLower().Equals("-noinput")) { _NoInput = true; } else if (Args[i].ToLower().StartsWith("-rom")) { _Rom = (Args[i].Split('='))[1].Trim(); } else if (Args[i].ToLower().StartsWith("-target")) { _Target = (Args[i].Split('='))[1].Trim(); } } if (_TrayIcon != null) { _TrayIcon.Text += "[" + _Target + "] [" + _Rom + "]"; } //Finding plugged devices _AvailableControllers = RawInputHelper.GetRawInputDevices(new RawInputDeviceType[] { RawInputDeviceType.RIM_TYPEHID, RawInputDeviceType.RIM_TYPEMOUSE }); Logger.WriteLog("Found " + _AvailableControllers.Length + " available RawInput devices :"); foreach (RawInputController c in _AvailableControllers) { try { Logger.WriteLog(" + [" + c.DeviceType.ToString() + "] " + c.DeviceName); } catch (Exception ex) { Logger.WriteLog("ERROR : " + ex.Message.ToString()); } } //Reading config file to get parameters _Configurator = new Configurator(); _Configurator.ReadDsConfig(AppDomain.CurrentDomain.BaseDirectory + @"\" + CONF_FILENAME); foreach (PlayerSettings Player in _Configurator.PlayersSettings) { Logger.WriteLog("P" + Player.ID + " mode = " + Player.Mode); if (Player.Mode == PlayerSettings.PLAYER_MODE_RAWINPUT) { Logger.WriteLog("P" + Player.ID + " device = " + Player.DeviceName); foreach (RawInputController Controller in _AvailableControllers) { if (Controller.DeviceName == Player.DeviceName) { Player.RIController = Controller; Player.RIController.Selected_AxisX = Player.HidAxisX; Player.RIController.Selected_AxisY = Player.HidAxisY; Player.RIController.Selected_OnScreenTriggerButton = Player.HidButton_OnScreenTrigger; Player.RIController.Selected_ActionButton = Player.HidButton_Action; Player.RIController.Selected_OffScreenTriggerButton = Player.HidButton_OffScreenTrigger; Logger.WriteLog("P" + Player.ID + " device plugged and found, Handle = 0x" + Controller.DeviceHandle); break; } } } else { Logger.WriteLog("P" + Player.ID + " Gamepad ID = " + Player.GamepadID); } } CreateRawMessageWindow(); //Register to RawInput thanks to the previously created window Handle RawInputDevice[] rid = new RawInputDevice[3]; rid[0].UsagePage = HidUsagePage.GENERIC; rid[0].Usage = HidUsage.Joystick; rid[0].dwFlags = RawInputDeviceFlags.RIDEV_INPUTSINK; rid[0].hwndTarget = _RawMessageWnd_hWnd; rid[1].UsagePage = HidUsagePage.GENERIC; rid[1].Usage = HidUsage.Mouse; rid[1].dwFlags = RawInputDeviceFlags.RIDEV_INPUTSINK; rid[1].hwndTarget = _RawMessageWnd_hWnd; rid[2].UsagePage = HidUsagePage.GENERIC; rid[2].Usage = HidUsage.Gamepad; rid[2].dwFlags = RawInputDeviceFlags.RIDEV_INPUTSINK; rid[2].hwndTarget = _RawMessageWnd_hWnd; if (!Win32API.RegisterRawInputDevices(rid, (uint)rid.Length, (uint)Marshal.SizeOf(rid[0]))) { MessageBox.Show("Failed to register raw input device(s).", "DemulShooter Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } //Starting Mame-style output daemon if (_Configurator.OutputEnabled) { Logger.WriteLog("Starting Output daemon..."); _OutputHelper = new MameOutputHelper(_RawMessageWnd_hWnd, _Configurator.OutputCustomRecoilOnDelay, _Configurator.OutputCustomRecoilOffDelay, _Configurator.OutputCustomDamagedDelay); _OutputHelper.Start(); _OutputUpdateLoop = new Thread(new ThreadStart(ReadAndSendOutput_Thread)); _OutputUpdateLoop.Start(); } //Starting the fun... if (_Target.Length > 0 && (_Rom.Length > 0)) { //Install Low-Level mouse hook ApplyMouseHook(); //Install Low Level keyboard hook ApplyKeyboardHook(); /* * //Running Xinput daemon if needed * bool EnableXInputProc = false; * foreach (ControllerDevice Device in _ControllerDevices) * { * if (Device.GamepadID != -1) * { * EnableXInputProc = true; * break; * } * } * if (EnableXInputProc) * Bgw_XInput.RunWorkerAsync(); */ if (_Target.Equals("alls")) { switch (_Rom.ToLower()) { case "hodsd": { _Game = new Game_AllsHodSd(_Rom.ToLower(), _NoInput, isVerbose); }; break; } } else if (_Target.Equals("es3")) { switch (_Rom.ToLower()) { case "tc5": { _Game = new Game_Es3Tc5(_Rom.ToLower(), _NoInput, isVerbose); }; break; } } else if (_Target.Equals("seganu")) { switch (_Rom.ToLower()) { case "lma": { _Game = new Game_NuLuigiMansion_v2(_Rom.ToLower(), _NoInput, isVerbose); }; break; } } //W.I.P Games else if (_Target.Equals("windows")) { switch (_Rom.ToLower()) { case "bhapc": { _Game = new Game_Bhapc(_Rom.ToLower(), _NoInput, isVerbose); } break; } } _Game.OnGameHooked += new Game.GameHookedHandler(OnGameHooked); } }