9

我正在从 Windows 应用程序启动一个进程。当我按下按钮时,我想模拟该过程中的按键操作F4。我怎样才能做到这一点?

[稍后编辑]我不想F4在我的表单中模拟按键的按下,而是在我开始的过程中。

4

3 回答 3

12

您可以使用System.Windows.Forms.SendKeys.Send("{F4}") ;

于 2009-05-05T16:13:07.120 回答
11

要将 F4 键发送到另一个进程,您必须激活该进程

http://bytes.com/groups/net-c/230693-activate-other-process建议:

  1. 获取 Process.Start 返回的 Process 类实例
  2. 查询进程.MainWindowHandle
  3. 调用非托管 Win32 API 函数“ShowWindow”或“SwitchToThisWindow”

然后,您可以按照 Reed 的建议使用 System.Windows.Forms.SendKeys.Send("{F4}") 将击键发送到此进程

编辑:

下面的代码示例运行记事本并向其发送“ABC”:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace TextSendKeys
{
    class Program
    {
        [DllImport("user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        static void Main(string[] args)
            {
                Process notepad = new Process();
                notepad.StartInfo.FileName = @"C:\Windows\Notepad.exe";
                notepad.Start();

                // Need to wait for notepad to start
                notepad.WaitForInputIdle();

                IntPtr p = notepad.MainWindowHandle;
                ShowWindow(p, 1);
                SendKeys.SendWait("ABC");
            }
    }
}
于 2009-05-05T16:26:39.160 回答
1

可以聚焦窗口(SetForegroundWindow WINAPI),然后用windows窗体的SendKeys发送F4。

于 2009-05-05T17:55:32.460 回答