public static CommandResult OpenShortcutFile(ICommandTarget target, string filename) { IPoderosaMainWindow window = CommandTargetUtil.AsWindow(target); if (window == null) { window = (IPoderosaMainWindow)CommandTargetUtil.AsViewOrLastActivatedView(target).ParentForm.GetAdapter(typeof(IPoderosaMainWindow)); } if (window == null) { return(CommandResult.Ignored); } if (!File.Exists(filename)) { window.Warning(String.Format("{0} is not a file", filename)); return(CommandResult.Failed); } ShortcutFileContent f = null; try { f = ShortcutFileContent.LoadFromXML(filename); } catch (Exception ex) { //変なファイルをドロップしたなどで例外は簡単に起こりうる window.Warning(String.Format("Failed to read {0}\n{1}", filename, ex.Message)); return(CommandResult.Failed); } try { //独立ウィンドウにポップアップさせるようなことは考えていない IContentReplaceableView rv = (IContentReplaceableView)target.GetAdapter(typeof(IContentReplaceableView)); if (rv == null) { rv = (IContentReplaceableView)window.ViewManager.GetCandidateViewForNewDocument().GetAdapter(typeof(IContentReplaceableView)); } TerminalControl tc = (TerminalControl)rv.GetCurrentContent().GetAdapter(typeof(TerminalControl)); if (tc != null) //ターミナルコントロールがないときは無理に設定しにいかない { RenderProfile rp = f.TerminalSettings.UsingDefaultRenderProfile ? TerminalSessionsPlugin.Instance.TerminalEmulatorService.TerminalEmulatorOptions.CreateRenderProfile() : f.TerminalSettings.RenderProfile; Size sz = tc.CalcTerminalSize(rp); f.TerminalParameter.SetTerminalSize(sz.Width, sz.Height); } ITerminalSession s = TerminalSessionsPlugin.Instance.TerminalSessionStartCommand.StartTerminalSession(target, f.TerminalParameter, f.TerminalSettings); return(s != null ? CommandResult.Succeeded : CommandResult.Failed); } catch (Exception ex) { RuntimeUtil.ReportException(ex); return(CommandResult.Failed); } }
private void ShowAbnormalTerminationMessage() { IPoderosaMainWindow window = _session.OwnerWindow; if (window != null) { Debug.Assert(window.AsForm().InvokeRequired); ITCPParameter tcp = (ITCPParameter)GetConnection().Destination.GetAdapter(typeof(ITCPParameter)); if (tcp != null) { string msg = String.Format(GEnv.Strings.GetString("Message.AbstractTerminal.TCPDisconnected"), tcp.Destination); switch (GEnv.Options.DisconnectNotification) { case WarningOption.StatusBar: window.StatusBar.SetMainText(msg); break; case WarningOption.MessageBox: window.Warning(msg); //TODO Disableオプションつきのサポート break; } } } }
private static CommandResult CmdCopyToFile(ICommandTarget target) { string text = GetSelectedText(target, TextFormatOption.Default); if (text == null) { return(CommandResult.Ignored); } IPoderosaMainWindow window = TerminalCommandTarget.AsTerminal(target).OwnerWindow; SaveFileDialog dlg = new SaveFileDialog(); //dlg.InitialDirectory = GApp.Options.DefaultFileDir; dlg.Title = GEnv.Strings.GetString("Util.DestinationToSave"); dlg.Filter = "All Files(*.*)|*.*"; if (dlg.ShowDialog(window.AsForm()) == DialogResult.OK) { StreamWriter wr = null; try { wr = new StreamWriter(new FileStream(dlg.FileName, FileMode.Create), Encoding.Default); wr.Write(text); return(CommandResult.Succeeded); } catch (Exception ex) { window.Warning(ex.Message); return(CommandResult.Failed); } finally { if (wr != null) { wr.Close(); } } } else { return(CommandResult.Cancelled); } }
public static SerialTerminalConnection CreateNewSerialConnection(IPoderosaMainWindow window, SerialTerminalParam param, SerialTerminalSettings settings) { bool successful = false; FileStream strm = null; try { StringResource sr = SerialPortPlugin.Instance.Strings; //Debug.WriteLine("OPENING COM"+param.Port); string portstr = String.Format("\\\\.\\{0}", param.PortName); IntPtr ptr = Win32Serial.CreateFile(portstr, Win32.GENERIC_READ | Win32.GENERIC_WRITE, 0, IntPtr.Zero, Win32.OPEN_EXISTING, Win32.FILE_ATTRIBUTE_NORMAL | Win32.FILE_FLAG_OVERLAPPED, IntPtr.Zero); if (ptr == Win32.INVALID_HANDLE_VALUE) { string msg = sr.GetString("Message.FailedToOpenSerial"); int err = Marshal.GetLastWin32Error(); if (err == 2) { msg += sr.GetString("Message.NoSuchDevice"); } else if (err == 5) { msg += sr.GetString("Message.DeviceIsBusy"); } else { msg += "\nGetLastError=" + Marshal.GetLastWin32Error(); } throw new Exception(msg); } //strm = new FileStream(ptr, FileAccess.Write, true, 8, true); Win32Serial.DCB dcb = new Win32Serial.DCB(); FillDCB(ptr, ref dcb); UpdateDCB(ref dcb, settings); if (!Win32Serial.SetCommState(ptr, ref dcb)) { Win32.CloseHandle(ptr); throw new Exception(sr.GetString("Message.FailedToConfigSerial")); } Win32Serial.COMMTIMEOUTS timeouts = new Win32Serial.COMMTIMEOUTS(); Win32Serial.GetCommTimeouts(ptr, ref timeouts); timeouts.ReadIntervalTimeout = 0xFFFFFFFF; timeouts.ReadTotalTimeoutConstant = 0; timeouts.ReadTotalTimeoutMultiplier = 0; timeouts.WriteTotalTimeoutConstant = 100; timeouts.WriteTotalTimeoutMultiplier = 100; Win32Serial.SetCommTimeouts(ptr, ref timeouts); successful = true; SerialTerminalConnection r = new SerialTerminalConnection(param, settings, ptr); return(r); } catch (Exception ex) { RuntimeUtil.SilentReportException(ex); if (window != null) { window.Warning(ex.Message); } else { GUtil.Warning(Form.ActiveForm, ex.Message); //TODO 苦しい逃げ。IPoderosaFormを実装したベースクラスをCoreにでも持っていたほうがいいのか } return(null); } finally { if (!successful && strm != null) { strm.Close(); } } }
public static SerialTerminalConnection CreateNewSerialConnection(IPoderosaMainWindow window, SerialTerminalParam param, SerialTerminalSettings settings) { bool successful = false; FileStream strm = null; try { StringResource sr = SerialPortPlugin.Instance.Strings; //Debug.WriteLine("OPENING COM"+param.Port); string portstr = String.Format("\\\\.\\{0}", param.PortName); IntPtr ptr = Win32Serial.CreateFile(portstr, Win32.GENERIC_READ | Win32.GENERIC_WRITE, 0, IntPtr.Zero, Win32.OPEN_EXISTING, Win32.FILE_ATTRIBUTE_NORMAL | Win32.FILE_FLAG_OVERLAPPED, IntPtr.Zero); if (ptr == Win32.INVALID_HANDLE_VALUE) { string msg = sr.GetString("Message.FailedToOpenSerial"); int err = Marshal.GetLastWin32Error(); if (err == 2) msg += sr.GetString("Message.NoSuchDevice"); else if (err == 5) msg += sr.GetString("Message.DeviceIsBusy"); else msg += "\nGetLastError=" + Marshal.GetLastWin32Error(); throw new Exception(msg); } //strm = new FileStream(ptr, FileAccess.Write, true, 8, true); Win32Serial.DCB dcb = new Win32Serial.DCB(); FillDCB(ptr, ref dcb); UpdateDCB(ref dcb, settings); if (!Win32Serial.SetCommState(ptr, ref dcb)) { Win32.CloseHandle(ptr); throw new Exception(sr.GetString("Message.FailedToConfigSerial")); } Win32Serial.COMMTIMEOUTS timeouts = new Win32Serial.COMMTIMEOUTS(); Win32Serial.GetCommTimeouts(ptr, ref timeouts); timeouts.ReadIntervalTimeout = 0xFFFFFFFF; timeouts.ReadTotalTimeoutConstant = 0; timeouts.ReadTotalTimeoutMultiplier = 0; timeouts.WriteTotalTimeoutConstant = 100; timeouts.WriteTotalTimeoutMultiplier = 100; Win32Serial.SetCommTimeouts(ptr, ref timeouts); successful = true; SerialTerminalConnection r = new SerialTerminalConnection(param, settings, ptr); return r; } catch (Exception ex) { RuntimeUtil.SilentReportException(ex); if (window != null) window.Warning(ex.Message); else GUtil.Warning(Form.ActiveForm, ex.Message); //TODO 苦しい逃げ。IPoderosaFormを実装したベースクラスをCoreにでも持っていたほうがいいのか return null; } finally { if (!successful && strm != null) strm.Close(); } }