static bool TryOpenByOtherInstance(string[] args) { var files = args.Where(arg => !arg.StartsWith("-")).ToArray(); if (files.IsEmpty()) { return(false); } var name = Process.GetCurrentProcess().ProcessName; var otherInstances = Process.GetProcessesByName(name) .Where(inst => inst != Process.GetCurrentProcess() && inst.MainWindowHandle != IntPtr.Zero) .ToArray(); if (!otherInstances.IsNullOrEmpty()) { var inst = otherInstances.First(); var data = Encoding.UTF8.GetBytes(files.JoinString(";")); var buffer = OSHelper.IntPtrAlloc(data); var cds = new COPYDATASTRUCT(); cds.dwData = new IntPtr(OPEN_FILES_MESSAGE); cds.cbData = data.Length; cds.lpData = buffer; var cbs_buffer = OSHelper.IntPtrAlloc(cds); IntPtr result = User32.SendMessage(inst.MainWindowHandle, WinMessages.WM_COPYDATA, IntPtr.Zero, cbs_buffer); OSHelper.IntPtrFree(cbs_buffer); OSHelper.IntPtrFree(buffer); return(result != IntPtr.Zero); } return(false); }