我遇到了SendKeys.Send的奇怪问题
基本上会发生这种情况。我在google.com上关注了Internet Explorer,我调用了SendKeys.Send(“TestSample \ n”);它有时会以不可预测的方式发送两次密钥(如TeestSample或TestSSSample)。它发生在大约20%的时间。
此外,当我在字符串SendKeys.Send(“Test Sample \ n”)中包含空格时,除了一点之外,它同样是不可预测的。每次我这样做都会进入测试样本,进行谷歌搜索,但也会向下滚动结果页面,因为我在输入文本后按空格键。
有没有人见过这种行为。它似乎没有以记事本的方式执行这种方式。
(这里要说明的是一些示例代码。将它放在表格中的一秒计时器中,DllImport定义靠近类的顶部。)此应用程序在Internet上使用Google.com时大约有20%的时间失败资源管理器(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;
答案 0 :(得分:-1)
您最好找到想要在新数据中写入的hWnd,然后调用SetWindowTextW
[DllImport( "user32.dll" )]
public static extern int SetWindowTextW( HandleRef hWnd, [MarshalAs( UnmanagedType.LPWStr )] string text );
然后,找到按钮的hWnd并使用
发送WM_LBUTTONDOWN和WM_LBUTTONUP[DllImport( "user32.dll" )]
public static extern int PostMessage( HandleRef hWnd, WM msg, int wParam, int lParam );
WM_LBUTTONDOWN = 0x0201
WM_LBUTTONUP = 0x0202