-1

我正在尝试编写一个应用程序来处理并向他发送击键 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);

                }
            } 

我做错了什么?

4

1 回答 1

0

也许,您使用了错误的 API 来满足正确的需求。您可能会观察到消息的顺序与您编写的一样,但是按该顺序发布消息可能不会像您想象的那样。如果您决心以这种方式解决,请阅读<< this post >>并查看短暂的延迟是否有帮助。但是,我建议采用更好的方法来使用旨在服务于类似场景的 SendInput() 函数。查看<<此链接>>和<<此链接>>了解更多信息。

于 2013-01-06T17:49:37.200 回答