/************************************************************
FileName: SendKey.cs
Description: 模拟键盘指令,发送命令字符
Version:
***********************************************************/
using System;
using System.Windows.Automation;
using System.Threading;
using System.Text;
using System.Windows.Forms;
namespace 命名空间
{
/// <summary>
/// 操作键盘命令
/// </summary>
public class SendKeys
{
StringBuilder builder = new StringBuilder();
public string Alt = "%";
public string ContextMenu = "+{F10}";
public string Ctrl = "^";
public string Shift = "+";
public string Enter = "{Enter}";
public string Delete = "{Del}";
public string Save = "^S";
public string SaveAll = "^+S";
public string Copy = "^C";
public string Cut = "^X";
public string Paste = "^V";
public string Undo = "^Z";
public string Redo = "^Y";
public string Print = "^P";
public string Help = "{F1}";
public string New = "^N";
public string DOWNARROW = "{DOWN}";
public string UPARROW = "{UP}";
public string LEFTARROW = "{LEFT}";
public string RIGHTARROW = "{RIGHT}";
public string[] Keys { get; set; }
public void Sendkeys(AutomationElement element, string[] keys)
{
this.Keys = keys;
try
{
// element.SetFocus();
}
catch (Exception exception)
{
throw new Exception("Cannot set focus to this element.", exception);
}
string myKeys = "";
foreach (string str2 in this.Keys)
{
myKeys = myKeys + str2;
}
Thread.Sleep();
if ((this.ContainsUnescapedKey(myKeys, '^') || this.ContainsUnescapedKey(myKeys, '%')) || this.ContainsUnescapedKey(myKeys, '+'))
{
myKeys = myKeys.ToLower();
}
System.Windows.Forms.SendKeys.SendWait(myKeys);
Thread.Sleep(0x3e8);
}
public void Sendkeys(AutomationElement element, string myKeys)
{
if (myKeys == string.Empty || myKeys == "") return;
this.Keys = new string[];
this.Keys[] = myKeys;
try
{
//element.SetFocus();
}
catch (Exception exception)
{
throw new Exception("Cannot set focus to this element.", exception);
}
Thread.Sleep();
if ((this.ContainsUnescapedKey(myKeys, '^') || this.ContainsUnescapedKey(myKeys, '%')) || this.ContainsUnescapedKey(myKeys, '+'))
{
myKeys = myKeys.ToLower();
}
System.Windows.Forms.SendKeys.SendWait(myKeys);
Thread.Sleep(0x3e8);
}
/// <summary>
/// 向活动应用程序发送击键。
/// </summary>
/// <param name="keys"></param>
public void Sendkeys(string keys)
{
System.Windows.Forms.SendKeys.SendWait(keys);
Thread.Sleep(0x3e8);
}
private bool ContainsUnescapedKey(string keys, char key)
{
for (int i = ; i < keys.Length; i++)
{
if (keys[i] == key)
{
if ((i == ) || (i == (keys.Length - )))
{
return true;
}
if ((keys[i - ] != '{') || (keys[i + ] != '}'))
{
return true;
}
}
}
return false;
}
private string KeysToString(string[] keys)
{
if (keys != null)
{
for (int i = ; i < keys.Length; i++)
{
string str = keys[i];
if (str == null)
{
builder.Append(keys[i]);
}
int length = keys.Length - ;
switch (str)
{
case "^":
builder.Append("Ctrl");
IsEquals(i, length, builder);
break;
case "+{F10}":
builder.Append("Open Context Menu");
IsEquals(i, length, builder);
break;
case "%":
builder.Append("Alt");
IsEquals(i, length, builder);
break;
case "+":
builder.Append("Shift");
IsEquals(i, length, builder);
break;
case "^S":
builder.Append("Save");
IsEquals(i, length, builder);
break;
case "^X":
builder.Append("Cut");
IsEquals(i, length, builder);
break;
case "^C":
builder.Append("Copy");
IsEquals(i, length, builder);
break;
case "^V":
builder.Append("Paste");
IsEquals(i, length, builder);
break;
case "^+S":
builder.Append("Save All");
IsEquals(i, length, builder);
break;
case "^P":
builder.Append("Print");
IsEquals(i, length, builder);
break;
case "^Z":
builder.Append("Undo");
IsEquals(i, length, builder);
break;
case "^Y":
builder.Append("Redo");
IsEquals(i, length, builder);
break;
case "^N":
builder.Append("New");
IsEquals(i, length, builder);
break;
default:
builder.Append(keys[i]);
IsEquals(i, length, builder);
break;
}
}
}
return builder.ToString();
}
void IsEquals(int i, int length, StringBuilder builder)
{
if (i < length)
builder.Append("+");
}
#region Public Method
public override string ToString()
{
return string.Format("Sendkeys to input data or operator with keys = '{0}'", this.KeysToString(Keys));
}
#endregion
}
}