我正在创建一个自动化工具,用于使用SendKeys.Send()
向发送Windows窗体应用程序之外的其他窗口发送文本。我使用此处提供的Gma.UserActivityMonitor库,使用热键命令将工具设置为“type”:http://www.codeproject.com/KB/cs/globalhook.aspx
我的问题是,当我使用热键处理按键触发打字时,有时它仍然允许按键滑过。
我试图启动一个新线程并在那里使用sendkeys,但由于目标应用程序不接受输入,我收到错误,我应该使用SendKeys.SendWait
。
所以我的问题可以通过以下两种方式之一来回答:
1)我可以在哪个方向查找有关多线程和使用sendkeys的更多信息?
2)如何确保库中的hookmanager正确禁止触发按键?
我允许用户构建一个由不同字母键入的字典,因此不同的字母会向目标应用程序发送不同的字符串。 相关守则:
private void HookManager_KeyPress(object sender, KeyPressEventArgs e)
{
//code to generate tValue from the pressed key
if (tAutoTyperDictionary.ContainsKey(tValue))
{
//Should prevent the key from being passed to the window
//works sometimes
e.Handled = true;
AutoType();
}
}
private void AutoType()
{
int tCount = 0;
string tLine = tAutoTyperDictionary[tCurrentAutotypeKey];
//I remove the listener to prevent it calling itself
HookManager.KeyPress -= new KeyPressEventHandler(HookManager_KeyPress);
while (tCount < tLine.Length)
{
SendKeys.Send(tLine[tCount].ToString());
Thread.Sleep(10);
tCount++;
}
HookManager.KeyPress += new KeyPressEventHandler(HookManager_KeyPress);
}
答案 0 :(得分:0)
您是否尝试过SendKeys.SendWait(字符串键)而不是Thread.Sleep(10)?
SendWait等待,直到发送的密钥被清除,然后继续。
答案 1 :(得分:0)
这是我写的一个静态线程类,在这种情况下可能很有用:
public static class threadClass
{
private static Thread _thread;
public static Thread thread
{
get { return _thread; }
}
public static void startThread()
{
_thread = new Thread(delegate() { });
_thread.Start();
}
}