c# – 使用WPF向外部应用程序发送Enter键按下时出现问题

我正在尝试使用以下代码向外部应用程序发送Enter键.我已经在
WPF中对这个主题做了很多研究,但还没有让它发挥作用.任何人都可以看到为什么这可能不起作用?

    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);

    const int WM_KEYDOWN = 0x0100;
    const int WM_KEYUP = 0x0101;
    const int VK_ENTER = 0x0D;

    SendMessage((IntPtr)myProcess.MainWindowHandle, WM_KEYDOWN, (IntPtr)VK_ENTER, IntPtr.Zero);
    SendMessage((IntPtr)myProcess.MainWindowHandle, WM_KEYUP, (IntPtr)VK_ENTER, IntPtr.Zero);

注意:

– 我没有任何访问外部应用程序代码的权限,因为它不是我的.

-SendKeys不适用于WPF.

最佳答案 您是否从Win32应用程序或WPF以外的其他应用程序尝试过此操作?您需要了解外部应用程序本身才能尝试与之交谈.您正在向窗口发送一条输入消息,但是有什么东西专注于外部应用程序,是否需要激活它来处理事件,外部应用程序是否故意阻止/过滤外部命令?有很多事情可能会发生.

你可以做的一件事就是调试两个应用程序是否真的有效.尝试将消息发送到另一个基本应用程序,当它获得一个输入按下命令时会触及一个断点.如果这样可行,那么您就知道您对主题中的外部应用程序的理解正在做您不期望的事情.

关于SendMessage的另一个有用的事情是它返回一个int.发送邮件后的返回值是多少?您可能已经阅读过,但请确保您对SendMessage有所了解,尤其是:

Message sending is subject to UIPI. The thread of a process can send messages only to message queues of threads in processes of lesser or equal integrity level.

和整个备注部分.我认为它也值得了解编组WM_USER,WM_APPRegisterWindowMessage

如果不是0,请告诉我们您的返回值.

编辑

我用谷歌搜索你的问题并导航到this,但它标记为德尔福.您应该可以尝试相同的PostMessagePostThreadMessage调用,因为它也在user32.dll中. here的最后一个和第二个帖子似乎警告OP记得在你发送KeyDown时调用KeyUp.记得检查返回值.

点赞