/// <summary> /// クリップボードにデータが書き込まれた際の処理。 /// </summary> /// <param name="sender">送信元オブジェクト</param> /// <param name="e">イベントオブジェクト</param> private void OnDrawClipboard(object sender, DrawClipboardEventArgs e) { if (!rdoConvEnabled.Checked) { txtResultMessage.Text = string.Format("自動変換がオフになっています"); return; } if (!System.Windows.Forms.Clipboard.ContainsText()) { // クリップボードの内容がテキストではない場合 return; } if (isEditingClipboard) { // クリップボードの書き換え中のため処理を中断 // -------------------------------------------- // 本メソッド内で、Clipboard.SetTextを呼び出すため、本メソッドが再帰呼び出しされる。 // そのため、二重に同じ処理が行われないようにフラグの判定を実施し処理を中断する。 return; } try { // クリップボードの書き換え中のためフラグを変更 isEditingClipboard = true; try { var convertScriptItem = GetSelectedMenuItem(menuGroupAutoConvert); if (convertScriptItem == null) { // 変換スクリプトの指定なし txtResultMessage.Text = string.Format("自動変換メニューが未選択です。"); } else { ConvertScriptInfo scriptInfo = convertScriptItem.Tag as ConvertScriptInfo; var convertedText = ExecConvert(System.Windows.Forms.Clipboard.GetText(), scriptInfo); System.Windows.Forms.Clipboard.SetText(convertedText, TextDataFormat.UnicodeText); txtResultMessage.Text = string.Format("{0} ... 自動変換しました", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); } } catch (Exception ex) { txtResultMessage.Text = string.Format("エラー発生 ... {0}", ex.Message); } } finally { // クリップボードの書き換え終了のためフラグを変更 isEditingClipboard = false; } }
/// <summary> /// 変換を実行する。 /// </summary> /// <param name="clipboardContents">クリップボードコンテンツ</param> /// <param name="scriptInfo">スクリプト情報</param> /// <returns>変換結果</returns> private string ExecConvert(string clipboardContents, ConvertScriptInfo scriptInfo) { var scriptDirPath = Path.GetDirectoryName(scriptInfo.ScriptFilePath); var scriptContents = FileUtil.ReadFileContents(scriptInfo.ScriptFilePath, Encoding.GetEncoding("utf-16")); var templateContents = FileUtil.ReadFileContents(scriptInfo.TemplateFilePath, Encoding.GetEncoding("utf-16")); var scriptExecutor = new ScriptExecutor(); var ret = scriptExecutor.Exec(scriptContents, "VBScript", "Main", new List <object>() { scriptDirPath, clipboardContents, templateContents, }); return(ret as string); }
/// <summary> /// メニューの変換スクリプトクリック時のイベントプロシージャ。 /// </summary> /// <param name="sender">送信元オブジェクト</param> /// <param name="e">イベントオブジェクト</param> private void menuItemConvertScripts_Click(object sender, EventArgs e) { if (!System.Windows.Forms.Clipboard.ContainsText()) { // クリップボードの内容がテキストではない場合 return; } if (isEditingClipboard) { // クリップボードの書き換え中のため処理を中断 // -------------------------------------------- // 本メソッド内で、Clipboard.SetTextを呼び出すため、本メソッドが再帰呼び出しされる。 // そのため、二重に同じ処理が行われないようにフラグの判定を実施し処理を中断する。 return; } try { // クリップボードの書き換え中のためフラグを変更 isEditingClipboard = true; try { var menuItem = sender as ToolStripMenuItem; ConvertScriptInfo scriptInfo = menuItem.Tag as ConvertScriptInfo; var convertedText = ExecConvert(System.Windows.Forms.Clipboard.GetText(), scriptInfo); System.Windows.Forms.Clipboard.SetText(convertedText, TextDataFormat.UnicodeText); SelectConvertScriptMenuItem(menuGroupAutoConvert, scriptInfo.Id); txtResultMessage.Text = string.Format("{0} ... 変換しました", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); } catch (Exception ex) { txtResultMessage.Text = string.Format("エラー発生 ... {0}", ex.Message); } } finally { // クリップボードの書き換え終了のためフラグを変更 isEditingClipboard = false; } }
/// <summary> /// 変換スクリプトリストを更新する。 /// </summary> /// <param name="menuGroup">メニューグループ</param> private void RefreshConvertScriptList(ToolStripMenuItem menuGroup, EventHandler onMenuClick) { // 現在選択されている情報を取得 var menuItem = GetSelectedMenuItem(menuGroup); ConvertScriptInfo itemInfo = null; if (menuItem != null) { itemInfo = menuItem.Tag as ConvertScriptInfo; } // リストをロードしなおす LoadConvertScriptList(menuGroup, onMenuClick); // 選択状態を復元する if (itemInfo != null) { SelectConvertScriptMenuItem(menuGroupAutoConvert, itemInfo.Id); } }