diff --git a/BizHawk.MultiClient/BizHawk.MultiClient.csproj b/BizHawk.MultiClient/BizHawk.MultiClient.csproj index e1caa1be66..47e83e39ea 100644 --- a/BizHawk.MultiClient/BizHawk.MultiClient.csproj +++ b/BizHawk.MultiClient/BizHawk.MultiClient.csproj @@ -57,6 +57,7 @@ False .\LuaInterface.dll + False ..\Newtonsoft.Json.dll diff --git a/BizHawk.MultiClient/Config.cs b/BizHawk.MultiClient/Config.cs index f5ceb08bf4..227f2558d1 100644 --- a/BizHawk.MultiClient/Config.cs +++ b/BizHawk.MultiClient/Config.cs @@ -97,6 +97,7 @@ public int MainWndy = -1; public bool RunInBackground = true; public bool AcceptBackgroundInput = false; + public bool SingleInstanceMode = false; // Run-Control settings public int FrameProgressDelayMs = 500; //how long until a frame advance hold turns into a frame progress? diff --git a/BizHawk.MultiClient/MainForm.Designer.cs b/BizHawk.MultiClient/MainForm.Designer.cs index a99ecd958e..16f1288f96 100644 --- a/BizHawk.MultiClient/MainForm.Designer.cs +++ b/BizHawk.MultiClient/MainForm.Designer.cs @@ -172,6 +172,7 @@ this.rAMSearchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.rAMPokeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.hexEditorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tAStudioToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); this.luaConsoleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.cheatsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -190,7 +191,7 @@ this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.statusStrip1 = new System.Windows.Forms.StatusStrip(); this.EmuStatus = new System.Windows.Forms.ToolStripStatusLabel(); - this.tAStudioToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.singleInstanceModeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip1.SuspendLayout(); this.statusStrip1.SuspendLayout(); this.SuspendLayout(); @@ -238,7 +239,7 @@ // openROMToolStripMenuItem // this.openROMToolStripMenuItem.Name = "openROMToolStripMenuItem"; - this.openROMToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.openROMToolStripMenuItem.Size = new System.Drawing.Size(145, 22); this.openROMToolStripMenuItem.Text = "Open ROM"; this.openROMToolStripMenuItem.Click += new System.EventHandler(this.openROMToolStripMenuItem_Click); // @@ -250,7 +251,7 @@ this.clearToolStripMenuItem, this.autoloadMostRecentToolStripMenuItem}); this.recentROMToolStripMenuItem.Name = "recentROMToolStripMenuItem"; - this.recentROMToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.recentROMToolStripMenuItem.Size = new System.Drawing.Size(145, 22); this.recentROMToolStripMenuItem.Text = "Recent ROM"; this.recentROMToolStripMenuItem.DropDownOpened += new System.EventHandler(this.recentROMToolStripMenuItem_DropDownOpened); // @@ -282,14 +283,14 @@ // closeROMToolStripMenuItem // this.closeROMToolStripMenuItem.Name = "closeROMToolStripMenuItem"; - this.closeROMToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.closeROMToolStripMenuItem.Size = new System.Drawing.Size(145, 22); this.closeROMToolStripMenuItem.Text = "&Close ROM"; this.closeROMToolStripMenuItem.Click += new System.EventHandler(this.closeROMToolStripMenuItem_Click); // // toolStripMenuItem1 // this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(149, 6); + this.toolStripMenuItem1.Size = new System.Drawing.Size(142, 6); // // saveStateToolStripMenuItem // @@ -307,7 +308,7 @@ this.toolStripSeparator6, this.saveNamedStateToolStripMenuItem}); this.saveStateToolStripMenuItem.Name = "saveStateToolStripMenuItem"; - this.saveStateToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.saveStateToolStripMenuItem.Size = new System.Drawing.Size(145, 22); this.saveStateToolStripMenuItem.Text = "Save State"; this.saveStateToolStripMenuItem.DropDownOpened += new System.EventHandler(this.saveStateToolStripMenuItem_DropDownOpened); // @@ -409,7 +410,7 @@ this.toolStripSeparator7, this.loadNamedStateToolStripMenuItem}); this.loadStateToolStripMenuItem.Name = "loadStateToolStripMenuItem"; - this.loadStateToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.loadStateToolStripMenuItem.Size = new System.Drawing.Size(145, 22); this.loadStateToolStripMenuItem.Text = "Load State"; this.loadStateToolStripMenuItem.DropDownOpened += new System.EventHandler(this.loadStateToolStripMenuItem_DropDownOpened); // @@ -514,7 +515,7 @@ this.saveToCurrentSlotToolStripMenuItem, this.loadCurrentSlotToolStripMenuItem}); this.saveSlotToolStripMenuItem.Name = "saveSlotToolStripMenuItem"; - this.saveSlotToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.saveSlotToolStripMenuItem.Size = new System.Drawing.Size(145, 22); this.saveSlotToolStripMenuItem.Text = "SaveSlot"; this.saveSlotToolStripMenuItem.DropDownOpened += new System.EventHandler(this.saveSlotToolStripMenuItem_DropDownOpened); // @@ -624,7 +625,7 @@ // toolStripMenuItem2 // this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - this.toolStripMenuItem2.Size = new System.Drawing.Size(149, 6); + this.toolStripMenuItem2.Size = new System.Drawing.Size(142, 6); // // movieToolStripMenuItem // @@ -639,7 +640,7 @@ this.toolStripSeparator14, this.bindSavestatesToMoviesToolStripMenuItem}); this.movieToolStripMenuItem.Name = "movieToolStripMenuItem"; - this.movieToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.movieToolStripMenuItem.Size = new System.Drawing.Size(145, 22); this.movieToolStripMenuItem.Text = "Movie"; this.movieToolStripMenuItem.DropDownOpened += new System.EventHandler(this.movieToolStripMenuItem_DropDownOpened); // @@ -736,7 +737,7 @@ this.screenshotF12ToolStripMenuItem, this.screenshotAsToolStripMenuItem}); this.screenshotToolStripMenuItem.Name = "screenshotToolStripMenuItem"; - this.screenshotToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.screenshotToolStripMenuItem.Size = new System.Drawing.Size(145, 22); this.screenshotToolStripMenuItem.Text = "Screenshot"; // // screenshotF12ToolStripMenuItem @@ -756,13 +757,13 @@ // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(149, 6); + this.toolStripSeparator4.Size = new System.Drawing.Size(142, 6); // // exitToolStripMenuItem // this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4))); - this.exitToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.exitToolStripMenuItem.Size = new System.Drawing.Size(145, 22); this.exitToolStripMenuItem.Text = "Exit"; this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); // @@ -783,33 +784,33 @@ // pauseToolStripMenuItem // this.pauseToolStripMenuItem.Name = "pauseToolStripMenuItem"; - this.pauseToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.pauseToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.pauseToolStripMenuItem.Text = "&Pause"; this.pauseToolStripMenuItem.Click += new System.EventHandler(this.pauseToolStripMenuItem_Click); // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(141, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(149, 6); // // powerToolStripMenuItem // this.powerToolStripMenuItem.Name = "powerToolStripMenuItem"; - this.powerToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.powerToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.powerToolStripMenuItem.Text = "Power Cycle"; this.powerToolStripMenuItem.Click += new System.EventHandler(this.powerToolStripMenuItem_Click); // // resetToolStripMenuItem // this.resetToolStripMenuItem.Name = "resetToolStripMenuItem"; - this.resetToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.resetToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.resetToolStripMenuItem.Text = "&Reset"; this.resetToolStripMenuItem.Click += new System.EventHandler(this.resetToolStripMenuItem_Click); // // toolStripSeparator8 // this.toolStripSeparator8.Name = "toolStripSeparator8"; - this.toolStripSeparator8.Size = new System.Drawing.Size(141, 6); + this.toolStripSeparator8.Size = new System.Drawing.Size(149, 6); // // sega8bitToolStripMenuItem // @@ -818,7 +819,7 @@ this.overclockWhenKnownSafeToolStripMenuItem, this.forceStereoSeparationToolStripMenuItem}); this.sega8bitToolStripMenuItem.Name = "sega8bitToolStripMenuItem"; - this.sega8bitToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.sega8bitToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.sega8bitToolStripMenuItem.Text = "Sega 8-bit"; // // enableFMChipToolStripMenuItem @@ -981,40 +982,40 @@ // controllersToolStripMenuItem // this.controllersToolStripMenuItem.Name = "controllersToolStripMenuItem"; - this.controllersToolStripMenuItem.Size = new System.Drawing.Size(149, 22); + this.controllersToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.controllersToolStripMenuItem.Text = "&Controllers..."; this.controllersToolStripMenuItem.Click += new System.EventHandler(this.controllersToolStripMenuItem_Click); // // hotkeysToolStripMenuItem // this.hotkeysToolStripMenuItem.Name = "hotkeysToolStripMenuItem"; - this.hotkeysToolStripMenuItem.Size = new System.Drawing.Size(149, 22); + this.hotkeysToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.hotkeysToolStripMenuItem.Text = "&Hotkeys..."; this.hotkeysToolStripMenuItem.Click += new System.EventHandler(this.hotkeysToolStripMenuItem_Click); // // messagesToolStripMenuItem // this.messagesToolStripMenuItem.Name = "messagesToolStripMenuItem"; - this.messagesToolStripMenuItem.Size = new System.Drawing.Size(149, 22); + this.messagesToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.messagesToolStripMenuItem.Text = "&Messages..."; this.messagesToolStripMenuItem.Click += new System.EventHandler(this.messagesToolStripMenuItem_Click); // // pathsToolStripMenuItem // this.pathsToolStripMenuItem.Name = "pathsToolStripMenuItem"; - this.pathsToolStripMenuItem.Size = new System.Drawing.Size(149, 22); + this.pathsToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.pathsToolStripMenuItem.Text = "Paths..."; this.pathsToolStripMenuItem.Click += new System.EventHandler(this.pathsToolStripMenuItem_Click); // // toolStripSeparator9 // this.toolStripSeparator9.Name = "toolStripSeparator9"; - this.toolStripSeparator9.Size = new System.Drawing.Size(146, 6); + this.toolStripSeparator9.Size = new System.Drawing.Size(149, 6); // // soundToolStripMenuItem // this.soundToolStripMenuItem.Name = "soundToolStripMenuItem"; - this.soundToolStripMenuItem.Size = new System.Drawing.Size(149, 22); + this.soundToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.soundToolStripMenuItem.Text = "&Sound"; this.soundToolStripMenuItem.Click += new System.EventHandler(this.soundToolStripMenuItem_Click); // @@ -1027,9 +1028,10 @@ this.enableRewindToolStripMenuItem, this.forceGDIPPresentationToolStripMenuItem, this.runInBackgroundToolStripMenuItem, - this.acceptBackgroundInputToolStripMenuItem}); + this.acceptBackgroundInputToolStripMenuItem, + this.singleInstanceModeToolStripMenuItem}); this.gUIToolStripMenuItem.Name = "gUIToolStripMenuItem"; - this.gUIToolStripMenuItem.Size = new System.Drawing.Size(149, 22); + this.gUIToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.gUIToolStripMenuItem.Text = "GUI"; this.gUIToolStripMenuItem.DropDownOpened += new System.EventHandler(this.gUIToolStripMenuItem_DropDownOpened); // @@ -1106,7 +1108,7 @@ this.miSpeed150, this.miSpeed200}); this.frameSkipToolStripMenuItem.Name = "frameSkipToolStripMenuItem"; - this.frameSkipToolStripMenuItem.Size = new System.Drawing.Size(149, 22); + this.frameSkipToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.frameSkipToolStripMenuItem.Text = "Speed/Skip"; this.frameSkipToolStripMenuItem.DropDownOpened += new System.EventHandler(this.frameSkipToolStripMenuItem_DropDownOpened); // @@ -1249,19 +1251,19 @@ // toolStripSeparator10 // this.toolStripSeparator10.Name = "toolStripSeparator10"; - this.toolStripSeparator10.Size = new System.Drawing.Size(146, 6); + this.toolStripSeparator10.Size = new System.Drawing.Size(149, 6); // // saveConfigToolStripMenuItem // this.saveConfigToolStripMenuItem.Name = "saveConfigToolStripMenuItem"; - this.saveConfigToolStripMenuItem.Size = new System.Drawing.Size(149, 22); + this.saveConfigToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.saveConfigToolStripMenuItem.Text = "Save Config"; this.saveConfigToolStripMenuItem.Click += new System.EventHandler(this.saveConfigToolStripMenuItem_Click); // // loadConfigToolStripMenuItem // this.loadConfigToolStripMenuItem.Name = "loadConfigToolStripMenuItem"; - this.loadConfigToolStripMenuItem.Size = new System.Drawing.Size(149, 22); + this.loadConfigToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.loadConfigToolStripMenuItem.Text = "Load Config"; // // toolsToolStripMenuItem @@ -1322,6 +1324,13 @@ this.hexEditorToolStripMenuItem.Text = "&Hex Editor"; this.hexEditorToolStripMenuItem.Click += new System.EventHandler(this.hexEditorToolStripMenuItem_Click); // + // tAStudioToolStripMenuItem + // + this.tAStudioToolStripMenuItem.Name = "tAStudioToolStripMenuItem"; + this.tAStudioToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.tAStudioToolStripMenuItem.Text = "&TAStudio"; + this.tAStudioToolStripMenuItem.Click += new System.EventHandler(this.tAStudioToolStripMenuItem_Click); + // // toolStripSeparator11 // this.toolStripSeparator11.Name = "toolStripSeparator11"; @@ -1463,12 +1472,12 @@ this.EmuStatus.Size = new System.Drawing.Size(143, 17); this.EmuStatus.Text = "Currently emulating: ur mom"; // - // tAStudioToolStripMenuItem + // singleInstanceModeToolStripMenuItem // - this.tAStudioToolStripMenuItem.Name = "tAStudioToolStripMenuItem"; - this.tAStudioToolStripMenuItem.Size = new System.Drawing.Size(152, 22); - this.tAStudioToolStripMenuItem.Text = "&TAStudio"; - this.tAStudioToolStripMenuItem.Click += new System.EventHandler(this.tAStudioToolStripMenuItem_Click); + this.singleInstanceModeToolStripMenuItem.Name = "singleInstanceModeToolStripMenuItem"; + this.singleInstanceModeToolStripMenuItem.Size = new System.Drawing.Size(220, 22); + this.singleInstanceModeToolStripMenuItem.Text = "Single Instance Mode"; + this.singleInstanceModeToolStripMenuItem.Click += new System.EventHandler(this.singleInstanceModeToolStripMenuItem_Click); // // MainForm // @@ -1661,6 +1670,7 @@ private System.Windows.Forms.ToolStripMenuItem bindSavestatesToMoviesToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem acceptBackgroundInputToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem tAStudioToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem singleInstanceModeToolStripMenuItem; } } diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs index d5af363922..f7704c04aa 100644 --- a/BizHawk.MultiClient/MainForm.cs +++ b/BizHawk.MultiClient/MainForm.cs @@ -1740,6 +1740,7 @@ namespace BizHawk.MultiClient enableRewindToolStripMenuItem.Checked = Global.Config.RewindEnabled; forceGDIPPresentationToolStripMenuItem.Checked = Global.Config.ForceGDI; acceptBackgroundInputToolStripMenuItem.Checked = Global.Config.AcceptBackgroundInput; + singleInstanceModeToolStripMenuItem.Checked = Global.Config.SingleInstanceMode; } private void MainForm_Load(object sender, EventArgs e) @@ -2012,5 +2013,10 @@ namespace BizHawk.MultiClient { LoadTAStudio(); } + + private void singleInstanceModeToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.SingleInstanceMode ^= true; + } } } \ No newline at end of file diff --git a/BizHawk.MultiClient/Program.cs b/BizHawk.MultiClient/Program.cs index a5dd7fde17..b33b05dbb8 100644 --- a/BizHawk.MultiClient/Program.cs +++ b/BizHawk.MultiClient/Program.cs @@ -2,6 +2,7 @@ using System.Windows.Forms; using SlimDX.Direct3D9; using SlimDX.DirectSound; +using Microsoft.VisualBasic.ApplicationServices; namespace BizHawk.MultiClient { @@ -29,9 +30,17 @@ namespace BizHawk.MultiClient } try { - var mf = new MainForm(args); - mf.Show(); - mf.ProgramRunLoop(); + if (Global.Config.SingleInstanceMode) + { + SingleInstanceController controller = new SingleInstanceController(args); + controller.Run(args); + } + else + { + var mf = new MainForm(args); + mf.Show(); + mf.ProgramRunLoop(); + } } catch (Exception e) { MessageBox.Show(e.ToString(), "Oh, no, a terrible thing happened!\n\n" + e.ToString()); } finally { @@ -40,6 +49,35 @@ namespace BizHawk.MultiClient if (Global.Direct3D != null && Global.Direct3D.Disposed == false) Global.Direct3D.Dispose(); } + + } + + public class SingleInstanceController : WindowsFormsApplicationBase + { + MainForm mf; + string[] cmdArgs; + public SingleInstanceController(string[] args) + { + cmdArgs = args; + IsSingleInstance = true; + StartupNextInstance += this_StartupNextInstance; + + } + + void this_StartupNextInstance(object sender, StartupNextInstanceEventArgs e) + { + mf.LoadRom(e.CommandLine[0]); + } + + protected override void OnCreateMainForm() + { + MainForm = new RamWatch(); + + mf = new MainForm(cmdArgs); + MainForm = mf; + mf.Show(); + mf.ProgramRunLoop(); + } } } }