using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Drawing;
using Lugens.Utils;
using System.Diagnostics;
namespace Lugens.Passer.Macro
{
public delegate void MacroEventHandler(string result);
public enum MacroType
{
InOutText,
CutOutText,
OutText,
InOutPopup,
OutPopup
}
public interface IMacro
{
event MacroEventHandler OnMacroCompleted;
///
/// マクロID
///
///
string Id();
///
/// マクロ機能初期化
///
bool Init();
///
/// マクロタイプ
///
///
MacroType Type();
///
/// マクロ機能名
///
///
string Name();
///
/// マクロ機能概要
///
///
string Summary();
///
/// マクロ機能説明
///
///
string Description();
///
/// マクロテスト実行
///
///
bool Test();
///
/// マクロ実行
///
///
///
void ExecuteAsync(string str, params string[] args);
}
public static class MacroExecuter
{
private delegate void PopupTextDelegate(string text);
private static int currentCode = -1;
private static IMacro currentMacro = null;
private static int keycode;
public static void ExecuteAsync(int keycode, IMacro macro, params string[] args)
{
string str;
MacroExecuter.keycode = keycode;
MacroExecuter.currentCode = macro.GetHashCode();
MacroExecuter.currentMacro = macro;
switch (macro.Type())
{
case MacroType.CutOutText:
Program.SendMessage("${LControl+}${X}${LControl-}", keycode);
str = Clipboard.GetText();
macro.OnMacroCompleted += OnMacroCompleted;
MacroExecuter.currentMacro.ExecuteAsync(str, args);
break;
case MacroType.OutText:
macro.OnMacroCompleted += OnMacroCompleted;
MacroExecuter.currentMacro.ExecuteAsync(null, args);
break;
case MacroType.InOutPopup:
Program.SendMessage("${LControl+}${C}${LControl-}", keycode);
str = Clipboard.GetText();
if (!String.IsNullOrEmpty(str))
{
Program.PopupForm = new PopupForm();
Point p = Control.MousePosition;
p.X += 2;
p.Y += 16;
Program.PopupForm.Location = p;
Program.PopupForm.DoVisibleChange(true);
macro.OnMacroCompleted += OnMacroCompleted;
MacroExecuter.currentMacro.ExecuteAsync(str, args);
}
else
{
Program.Status = ProgramStatus.Waiting;
}
break;
}
}
public static void SetPopupText(string text)
{
Program.PopupForm.Loading = false;
Program.PopupForm.Text = text;
}
public static void OnMacroCompleted(string result)
{
if (MacroExecuter.currentCode == -1)
{
Program.Status = ProgramStatus.Waiting;
return;
}
switch (MacroExecuter.currentMacro.Type())
{
case MacroType.InOutText:
case MacroType.CutOutText:
case MacroType.OutText:
Clipboard.SetText(result);
Application.DoEvents();
int keycode = Program.EnabledKeycode(MacroExecuter.keycode);
Program.SendMessage("${LControl+}${V}${LControl-}", keycode);
Program.Status = ProgramStatus.Waiting;
break;
case MacroType.InOutPopup:
case MacroType.OutPopup:
if(!Program.PopupForm.IsDisposed)
{
Program.PopupForm.RequestSetText(result);
}
break;
}
currentCode = -1;
currentMacro.OnMacroCompleted -= OnMacroCompleted;
currentMacro = null;
}
}
}