我正在使用以下代码将焦点放在窗口上(在本例中为记事本窗口),并在每次单击按钮2时向其发送一些按键。但是,当我按下按钮2时,没有任何反应。任何人都可以告诉我为什么我的sendkeys命令失败了吗?
public partial class Form1 : Form
{
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private Process s;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.s = new Process();
s.StartInfo.FileName = "notepad";
s.Start();
s.WaitForInputIdle();
}
private void button2_Click(object sender, EventArgs e)
{
ShowWindow(s.MainWindowHandle, 1);
SendKeys.SendWait("Hello");
}
}
答案 0 :(得分:4)
ShowWindow
显示已启动的'记事本',但没有给它输入焦点。您的sendkeys输出正在通过发送表单Form1
收到。
答案 1 :(得分:0)
嗯,原来这就是问题所在。我没有正确地将焦点设置到记事本。应该使用命令SetForegroundWindow而不是ShowWindow。
[DllImport("User32")]
private static extern int SetForegroundWindow(IntPtr hwnd);
private Process s;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.s = new Process();
s.StartInfo.FileName = "notepad";
s.Start();
s.WaitForInputIdle();
}
private void button2_Click(object sender, EventArgs e)
{
//ShowWindow(s.MainWindowHandle, SW_RESTORE);
SetForegroundWindow(s.MainWindowHandle);
SendKeys.SendWait("Hello");
}
}