模拟窗口聚焦

时间:2014-09-23 11:22:58

标签: c# winapi

如何将外部窗口模拟为聚焦窗口? 我需要这个,因为我想将密钥发送到记事本窗口,它只有在记事本窗口具有焦点时才有效。但我不想把注意力放在我自己的窗户上。

public IntPtr Find(string taskName, string windowName)
{
    return Fenster.FindWindow(taskName, windowName);
}
public void Send(IntPtr hwnd, string text)
{
    if (!hwnd.Equals(IntPtr.Zero))
    {
        SendKeys.Send(text);
    }
}
public bool SetForeground(IntPtr hwnd)
{
    return SetForegroundWindow(hwnd);   
}

[DllImport("user32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lp1, string lp2);

[DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetForegroundWindow(IntPtr hWnd);

非常感谢!

1 个答案:

答案 0 :(得分:1)

最佳解决方案是获取您要控制的窗口的HWND并发送密钥消息(WM_KEY_DOWNWM_KEY_UPWM_CHAR - 可能取决于应用和目的)直接通过SendMessagePostMessage