下面的代码我从 MSDN 复制并稍作修改:
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
DllImport("User32")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
int cnt = 0;
private void button1_Click(object sender, EventArgs e)
{
IntPtr calculatorHandle = FindWindow("Notepad", "Untitled - Notepad");
if (calculatorHandle == IntPtr.Zero)
{
MessageBox.Show("Calculator is not running.");
return;
}
SetForegroundWindow(calculatorHandle);
SendKeys.SendWait(cnt.ToString());
SendKeys.SendWait("{ENTER}");
cnt++;
SendKeys.Flush();
System.Threading.Thread.Sleep(1000);
}
问题是记事本中的数字序列不是连续的。第一次单击总是产生 0(如预期的那样)。但是从第二次点击开始,结果是不可预知的(但顺序仍然是按顺序排列的,例如 3、4、5、10、14、15、....)
如果我足够快地单击按钮,我能够以连续顺序(0,1,2,3,4,....)得到结果,但有时它会产生超过 2 个相同的数字(例如 0,1,2 ,3,3,3,4,5,6,6,6,7,8,9,...)