C# 模拟;按键;在非前景窗口上

C# 模拟;按键;在非前景窗口上,c#,wpf,C#,Wpf,我目前正在开发一个程序,每X秒向另一个程序(记事本)发送一次“按键”(虚拟按键代码中的字母a或0x41) 问题是,为了让它工作,我需要另一个程序(记事本)在前台,例如: Process[] processes = Process.GetProcessesByName("notepad"); foreach (Process proc in processes) { SetForegroundWindow(proc.MainWindowHandle); // Do Whateve

我目前正在开发一个程序,每X秒向另一个程序(记事本)发送一次“按键”(虚拟按键代码中的字母a或0x41)

问题是,为了让它工作,我需要另一个程序(记事本)在前台,例如:

Process[] processes = Process.GetProcessesByName("notepad");

foreach (Process proc in processes) {
    SetForegroundWindow(proc.MainWindowHandle);
    // Do Whatever
}

Thread.Sleep(1000);
有没有一种方法可以做到这一点,而不必将记事本放在前台


像可以在后台运行的东西吗?

您可以通过winApi来实现。尝试使用SendMessage

根据这一点,您可以执行以下操作:

[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

public static void sendKeystroke(ushort k)
{
    const uint WM_KEYDOWN = 0x100;
    const uint WM_SYSCOMMAND = 0x018;
    const uint SC_CLOSE = 0x053;

    IntPtr WindowToFind = FindWindow(null, "Untitled1 - Notepad++");

    IntPtr result3 = SendMessage(WindowToFind, WM_KEYDOWN, ((IntPtr)k), (IntPtr)0);
    //IntPtr result3 = SendMessage(WindowToFind, WM_KEYUP, ((IntPtr)c), (IntPtr)0);
}