将密钥发送到后台窗口(不是记事本)

时间:2017-07-30 12:53:28

标签: c#

所以我现在已经被困了大约10个小时了。此代码适用于记事本。它将击键发送到后台的记事本,而无需点击它或任何东西。问题是,没有其他窗口或过程有效,我不知道为什么。我尝试更改名称并使用窗口名称而不是像这样的进程名称,但没有任何作用。只有记事本。

不,我不能使用SendKeys,因为我需要它在后台。

[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport("user32.dll")]
private static extern bool PostMessage(
    IntPtr hWnd, // handle to destination window
    UInt32 Msg, // message
    Int32 wParam, // first message parameter
    Int32 lParam // second message parameter
);

public void Start()
{
    const int WM_KEYDOWN = 0x100;
    // IntPtr Notepad = FindWindow(null, "");
    //Console.WriteLine(Notepad);
    Process notepadProccess = Process.GetProcessesByName("notepad")[0];
    Console.WriteLine(notepadProccess.MainWindowHandle);
    Console.WriteLine(notepadProccess.MainWindowTitle);

    IntPtr editx = FindWindowEx(notepadProccess.MainWindowHandle, IntPtr.Zero, "Edit", null);

    PostMessage(editx, WM_KEYDOWN, (int)Keys.X, 0);
}

0 个答案:

没有答案