我对 SendKeys.Send 有一个奇怪的问题
基本上发生的事情是这样的。我在 google.com 上关注 Internet Explorer,我调用 SendKeys.Send("TestSample\n"); 它有时会以不可预知的方式两次发送一些密钥(如 TeestSample 或 TestSSSample)。它大约有 20% 的时间发生。
此外,当我在字符串 SendKeys.Send("Test Sample\n") 中包含一个空格时,它同样是不可预测的,除非有一点。每次我这样做时,它都会进入测试样本,进行谷歌搜索,但也会向下滚动结果页面,因为我在输入文本后按下了空格键。
有没有其他人看到过这种行为。它似乎并没有以记事本为焦点执行这种方式。
(为了说明这里有一些示例代码。将它放在一个表单中的一秒计时器中,将 DllImport 定义放在类的顶部附近。)这个应用程序在 Internet Explorer(8.0 )
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
private void timer1_Tick(object sender, EventArgs e)
{
IntPtr foreground = GetForegroundWindow();
if (foreground != _currentForeground)
{
_currentForeground = foreground;
var titleBuilder = new StringBuilder(200);
GetWindowText(foreground, titleBuilder, 200);
string title = titleBuilder.ToString();
Debug.WriteLine("Title of " + title);
if (title == "Google - Windows Internet Explorer")
{
Debug.WriteLine("Sending keys");
SendKeys.Send("Test Sample\n");
}
if (title == "Untitled - Notepad")
SendKeys.Send("Test notpad sample\n");
Thread.Sleep(2000);
}
}
private IntPtr _currentForeground = IntPtr.Zero;