2 using System.Collections.Generic;
4 using System.Threading;
5 using System.Windows.Forms;
8 using System.Diagnostics;
10 namespace Lugens.Passer.Macro
12 public delegate void MacroEventHandler(string result);
23 public interface IMacro
25 event MacroEventHandler OnMacroCompleted;
30 /// <returns></returns>
41 /// <returns></returns>
47 /// <returns></returns>
53 /// <returns></returns>
59 /// <returns></returns>
65 /// <returns></returns>
71 /// <param name="str"></param>
72 /// <param name="args"></param>
73 void ExecuteAsync(string str, params string[] args);
76 public static class MacroExecuter
78 private delegate void PopupTextDelegate(string text);
80 private static int currentCode = -1;
82 private static IMacro currentMacro = null;
84 private static int keycode;
85 public static void ExecuteAsync(int keycode, IMacro macro, params string[] args)
88 MacroExecuter.keycode = keycode;
89 MacroExecuter.currentCode = macro.GetHashCode();
90 MacroExecuter.currentMacro = macro;
94 case MacroType.CutOutText:
95 Program.SendMessage("${LControl+}${X}${LControl-}", keycode);
96 str = Clipboard.GetText();
97 macro.OnMacroCompleted += OnMacroCompleted;
98 MacroExecuter.currentMacro.ExecuteAsync(str, args);
101 case MacroType.OutText:
102 macro.OnMacroCompleted += OnMacroCompleted;
103 MacroExecuter.currentMacro.ExecuteAsync(null, args);
106 case MacroType.InOutPopup:
107 Program.SendMessage("${LControl+}${C}${LControl-}", keycode);
108 str = Clipboard.GetText();
109 if (!String.IsNullOrEmpty(str))
111 Program.PopupForm = new PopupForm();
112 Point p = Control.MousePosition;
115 Program.PopupForm.Location = p;
116 Program.PopupForm.DoVisibleChange(true);
117 macro.OnMacroCompleted += OnMacroCompleted;
118 MacroExecuter.currentMacro.ExecuteAsync(str, args);
122 Program.Status = ProgramStatus.Waiting;
128 public static void SetPopupText(string text)
130 Program.PopupForm.Loading = false;
131 Program.PopupForm.Text = text;
134 public static void OnMacroCompleted(string result)
136 if (MacroExecuter.currentCode == -1)
138 Program.Status = ProgramStatus.Waiting;
142 switch (MacroExecuter.currentMacro.Type())
144 case MacroType.InOutText:
145 case MacroType.CutOutText:
146 case MacroType.OutText:
147 Clipboard.SetText(result);
148 Application.DoEvents();
149 int keycode = Program.EnabledKeycode(MacroExecuter.keycode);
150 Program.SendMessage("${LControl+}${V}${LControl-}", keycode);
151 Program.Status = ProgramStatus.Waiting;
154 case MacroType.InOutPopup:
155 case MacroType.OutPopup:
156 if(!Program.PopupForm.IsDisposed)
158 Program.PopupForm.RequestSetText(result);
164 currentMacro.OnMacroCompleted -= OnMacroCompleted;