Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
名为PostMessage的c#api_C#_Input_Postmessage_Keystrokes - Fatal编程技术网

名为PostMessage的c#api

名为PostMessage的c#api,c#,input,postmessage,keystrokes,C#,Input,Postmessage,Keystrokes,我正试图写一个应用程序来处理并发送给他 按ctrl-a,然后按ctrl-c,我将获得 我的剪贴板中的文本内容 我读到正确的api是PostMessage`Sendmeesage`。 使用api,我成功地将代码写入程序(例如记事本)。 但我没有成功发送击键 这是我的密码 public const uint WM_KEYDOWN = 0x0100; public const uint WM_KEYUP = 0x0101; const int CTRL = 0x11;

我正试图写一个应用程序来处理并发送给他 按ctrl-a,然后按ctrl-c,我将获得 我的剪贴板中的文本内容

我读到正确的api是
PostMessage
`Sendmeesage`。 使用api,我成功地将代码写入程序(例如记事本)。 但我没有成功发送击键

这是我的密码

    public const uint WM_KEYDOWN = 0x0100;
    public const uint WM_KEYUP = 0x0101;
    const int CTRL = 0x11;
    const int A_Key = 0x41;
    const int C_Key = 0x43;

    static void Main(string[] args)
    {
        IntPtr hWnd = FindWindow(null, "Microsoft Word ");
        hWnd = FindWindowEx(hWnd, null, "Edit", null);
        //PostMessage(hWnd, WM_GETTEXT, 0x11, 0);
        Process[] processes = Process.GetProcessesByName("winword");
        foreach (Process p in processes)
        {

            PostMessage((IntPtr)hWnd, WM_KEYDOWN, (IntPtr)CTRL, 1);
            PostMessage((IntPtr)hWnd, WM_KEYDOWN, (IntPtr)A_Key, 1);
            PostMessage((IntPtr)hWnd, WM_KEYUP, (IntPtr)A_Key, 1);
            PostMessage((IntPtr)hWnd, WM_KEYUP, (IntPtr)CTRL, 1);

                }
            } 

我做错了什么

也许,您使用了错误的API来满足正确的需求。您可能会观察到消息的顺序与您编码的一样,但是,按该顺序发布消息可能不会像您认为的那样。如果你决心用这种方法解决问题,请阅读并看看短暂的延迟是否有帮助。
但是,我建议使用更好的方法来使用SendInput()函数,该函数旨在服务于类似的场景。有关详细信息,请检查和。

Microsoft Word没有名为“编辑”的客户端窗口。使用Spy++查看窗口层次结构和名称。延迟没有帮助,因为我不想关注应用程序。它应该作为一个后卫。spy++在日志中为我的应用程序和实际按下ctrl-a ctrl-c显示了相同的行。如上所述,并非所有程序都只按消息ID和顺序处理输入,word是复杂的输入处理应用程序,延迟没有帮助我一点也不奇怪。通常,所使用的调用(如)不能“用PostMessage()管理”。SendInput是你最好的选择,依我看。