using System; using System.Collections.Generic; using System.Text; using Lugens.Utils; using System.Drawing; using System.Windows.Forms; using System.Diagnostics; using Lugens.Components; using System.Runtime.InteropServices; using System.Threading; using Lugens.Passer.Macro; namespace Lugens.Passer { public enum HotKeyProcessType { /// /// メインフォームの表示 /// OpenMainForm, /// /// 定型文フォームの表示 /// OpenSentenceForm, /// /// 定型文のペースト /// PasteSentence, /// /// クリップボード文字列のペースト /// PasteClipboard, /// /// スクリプトの実行 /// ExecScript, /// /// マクロの実行 /// ExecMacro, /// /// キー操作記憶 /// KeyRecord, /// /// 記憶したキー再生 /// KeyPlay } public class HotKeyProcess { public HotKeyProcessType ProcessType; public int HotKey; public string Id; public string Value; public SentenceInfo SentenceInfo; } public static class HotKeyProcessExecuter { public static volatile HotKeyProcess Process; private static string MacroResult; private delegate void HotKeyProcessDelegate(); public static void Execute(List processList) { HotKeyProcessExecuter.Process = processList[0]; if (processList.Count == 1) { switch (HotKeyProcessExecuter.Process.ProcessType) { case HotKeyProcessType.OpenMainForm: OpenMainForm(); return; case HotKeyProcessType.OpenSentenceForm: OpenSentenceForm(); return; case HotKeyProcessType.PasteSentence: if (Program.Status == ProgramStatus.Waiting) { Program.Status = ProgramStatus.SendMessaging; new Thread(new ThreadStart(InvokePasteSentence)).Start(); } return; case HotKeyProcessType.PasteClipboard: if (Program.SentenceGroupList[0].Count > 0) { if (Program.Status == ProgramStatus.Waiting && !"".Equals(Program.SentenceGroupList[0][0].Value)) { Program.Status = ProgramStatus.SendMessaging; new Thread(new ThreadStart(InvokePasteClipboard)).Start(); } } return; case HotKeyProcessType.ExecMacro: if (Program.Status == ProgramStatus.Waiting) { if (Program.MacroDic.ContainsKey(HotKeyProcessExecuter.Process.Id)) { Program.Status = ProgramStatus.SendMessaging; new Thread(new ThreadStart(InvokeExecMacro)).Start(); } else { string text = "マクロが見つかりません\nID:" + HotKeyProcessExecuter.Process.Id; MessageBox.Show(Program.MainForm, text, "マクロ実行エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); } } return; case HotKeyProcessType.ExecScript: if (Program.Status == ProgramStatus.Waiting) { Program.Status = ProgramStatus.SendMessaging; new Thread(new ThreadStart(InvokeExecScript)).Start(); } return; case HotKeyProcessType.KeyRecord: KeyRecord(); return; case HotKeyProcessType.KeyPlay: if (Program.Status == ProgramStatus.Waiting) { Program.Status = ProgramStatus.SendMessaging; new Thread(new ThreadStart(KeyPlay)).Start(); } return; } } else { switch (HotKeyProcessExecuter.Process.ProcessType) { case HotKeyProcessType.PasteSentence: case HotKeyProcessType.ExecScript: case HotKeyProcessType.ExecMacro: OpenSentenceForm(processList); return; } } } /// /// メインフォームの表示 /// public static void OpenMainForm() { if (!Program.MainForm.Visible) { Program.MainForm.BeforeHWnd = Win32.GetForegroundWindow(); //Program.ForceForegroundWindow(this.beforeHWnd); Program.MainForm.DoVisibleChange(true); } Program.ForceForegroundWindow(Program.MainForm.Handle); Program.MainForm.Invalidate(); //Program.MainForm.TextBox_cmd.Focus(); Program.MainForm.SearchTextBox.Focus(); Program.MainForm.Timer.Start(); } /// /// 定型文フォームの表示 /// public static void OpenSentenceForm() { if (Program.Status == ProgramStatus.Waiting) { Rectangle r = Program.GetSentenceFormBaseRectangle(); Program.SentenceForm = new SentenceForm(); Program.SentenceForm.FixData = false; Program.SentenceForm.SetData(); Program.SentenceForm.DoVisibleChange(true); if (Settings.ContainsKey(Settings.PASSER_FORM_SENTENCE_WIDTH) && Settings.ContainsKey(Settings.PASSER_FORM_SENTENCE_HEIGHT)) Program.SentenceForm.Size = new Size(Settings.GetInt(Settings.PASSER_FORM_SENTENCE_WIDTH), Settings.GetInt(Settings.PASSER_FORM_SENTENCE_HEIGHT)); Program.SentenceForm.Location = Util.CalcWindowLocate(r, Program.SentenceForm.Size, Util.Locate.Down); Program.SentenceForm.ShowToolTip(); Program.Status = ProgramStatus.SentenceFormOpen; } } /// /// 定型文フォームの表示 /// public static void OpenSentenceForm(List processList) { if (Program.Status == ProgramStatus.Waiting) { Rectangle r = Program.GetSentenceFormBaseRectangle(); Program.SentenceForm = new SentenceForm(); Program.SentenceForm.FixData = true; Program.SentenceForm.SetData(processList); Program.SentenceForm.DoVisibleChange(true); if (Settings.ContainsKey(Settings.PASSER_FORM_SENTENCE_WIDTH) && Settings.ContainsKey(Settings.PASSER_FORM_SENTENCE_HEIGHT)) Program.SentenceForm.Size = new Size(Settings.GetInt(Settings.PASSER_FORM_SENTENCE_WIDTH), Settings.GetInt(Settings.PASSER_FORM_SENTENCE_HEIGHT)); Program.SentenceForm.Location = Util.CalcWindowLocate(r, Program.SentenceForm.Size, Util.Locate.Down); Program.SentenceForm.ShowToolTip(); Program.Status = ProgramStatus.SentenceFormOpen; } } public static void InvokePasteSentence() { Program.MainForm.Invoke(new HotKeyProcessDelegate(PasteSentence)); } public static void InvokePasteClipboard() { Program.MainForm.Invoke(new HotKeyProcessDelegate(PasteClipboard)); } public static void InvokeExecMacro() { Program.MainForm.Invoke(new HotKeyProcessDelegate(ExecMacro)); } public static void InvokeExecScript() { Program.MainForm.Invoke(new HotKeyProcessDelegate(ExecScript)); } /// /// 定型文のペースト /// static void PasteSentence() { Clipboard.SetText(HotKeyProcessExecuter.Process.Value); Program.SendMessage("${LControl+}${V}${LControl-}", HotKeyProcessExecuter.Process.HotKey); Program.Status = ProgramStatus.Waiting; } /// /// クリップボード文字列のペースト /// static void PasteClipboard() { Clipboard.SetText(Program.SentenceGroupList[0][0].Value); Program.SendMessage("${LControl+}${V}${LControl-}", HotKeyProcessExecuter.Process.HotKey); Program.Status = ProgramStatus.Waiting; } /// /// マクロの実行 /// static void ExecMacro() { IMacro macro = Program.MacroDic[HotKeyProcessExecuter.Process.Id].Macro; MacroExecuter.ExecuteAsync(HotKeyProcessExecuter.Process.HotKey, macro, Util.Split(HotKeyProcessExecuter.Process.Value, ' ', '"')); } /// /// スクリプトの実行 /// public static void ExecScript() { Program.SendMessage(HotKeyProcessExecuter.Process.Value, HotKeyProcessExecuter.Process.HotKey); Program.Status = ProgramStatus.Waiting; } /// /// キーボード記憶 /// public static void KeyRecord() { if (Program.Status == ProgramStatus.KeyRecoding) { //ストップ Program.Status = ProgramStatus.Waiting; Win32.PostMessage(Program.MainForm.Handle, Program.WM_APP_REC_END, (IntPtr)HotKeyProcessExecuter.Process.HotKey, IntPtr.Zero); Program.MainForm.notifyIcon1.Icon = Properties.Resources.App; if (Program.Main_ShowBalloonWhileRecoding) { Win32.PostMessage(Program.BallonWindowHandle, Win32.WM_LBUTTONDOWN, (IntPtr)0, (IntPtr)0); Program.BallonWindowHandle = IntPtr.Zero; Program.MainForm.timer_keyRecoding.Enabled = false; } } else { //記録 Program.KeyRecordList.Clear(); Program.Status = ProgramStatus.KeyRecoding; NotifyIcon icon = Program.MainForm.notifyIcon1; icon.Icon = Properties.Resources.AppRec; if (Program.Main_ShowBalloonWhileRecoding) { icon.BalloonTipText = "停止キー: " + HotKeyTextBox.GetKeyText(HotKeyProcessExecuter.Process.HotKey); icon.ShowBalloonTip(Int32.MaxValue, icon.BalloonTipTitle, icon.BalloonTipText, ToolTipIcon.Info); Win32.EnumWindows(Program.MainForm.EnumWindowsProc, IntPtr.Zero); Program.MainForm.timer_keyRecoding.Enabled = true; } } } /// /// キーボード再生 /// public static void KeyPlay() { Program.SendMessage(Program.KeyRecordString, HotKeyProcessExecuter.Process.HotKey); Program.Status = ProgramStatus.Waiting; } public static void OnMacroCompleted(string s) { HotKeyProcessExecuter.MacroResult = s; } } }