5

我想模拟外部程序的键盘点击。我尝试过 SendMessage、PostMessage、SendKeys,但它们不会将密钥发送到一个特定的程序。所以我想尝试 SendInput 并且我已经为SendInput下载了一个很好的包装器- http://inputsimulator.codeplex.com/

我已将程序集添加到我的项目中,但我还不能开始使用任何功能...

我必须做什么?我应该添加什么“使用”?

4

4 回答 4

5

我相信你需要一个

Using WindowsInput; 

如果不是这样,您可以在对象浏览器中查看它并查看命名空间。只需右键单击解决方案资源管理器中的引用,然后单击浏览。

于 2011-07-07T13:37:56.380 回答
2

您可以像这样模拟程序的键盘输入:

  • 使用user32.dll中的SetForegroundWindow将要发送密钥的程序带到前台

  • 使用SendKeys.SendWait 方法将实际密钥发送到程序窗口

示例代码(测试前启动记事本):

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

namespace SendKeyboardInput
{
    public class SendKey
    {
        [DllImport("user32.dll")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);

        public void Send()
        {
            System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName("notepad"); //search for process notepad
            if (p.Length > 0) //check if window was found
            {
                SetForegroundWindow(p[0].MainWindowHandle); //bring notepad to foreground
            }

            SendKeys.SendWait("a"); //send key "a" to notepad
        }
    }
}
于 2011-07-07T14:31:01.167 回答
1

我遇到了同样的问题,但我设法通过以下 3 个步骤来解决

  1. 将 InputSimulator 内容提取到某个合理的位置,例如您的项目 URL

  2. 在 Visual Studio 中单击 Project->Add Reference 并浏览到 InputSimulator DLL 文件

  3. 通过添加“使用 WindowsInput;”将 WindowsInput 命名空间添加到项目中
于 2013-08-16T15:03:55.610 回答
0

虽然我无法告诉您可能需要什么 using 指令,但我不确定此工具是否允许您将输入发送到特定窗口。您链接的页面的“历史”部分指出:

它最初是为在 WpfKB(WPF 触摸屏键盘)项目中使用而编写的,以模拟对活动窗口的真实键盘输入。

我知道这个问题的唯一解决方案是 SendMessage,也许你可以进一步解释问题出在哪里?

于 2011-07-07T13:47:59.597 回答