c# - 使用 WPF 将 Enter 键发送到外部应用程序时出现问题

标签 c# wpf windows winapi

我正在尝试使用以下代码将 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 ,但其标记为 delphi。您应该可以尝试相同的 PostMessagePostThreadMessage调用,因为它也在 user32.dll 中。最后和倒数第二个帖子here似乎警告 OP 记住在您发送 KeyDown 时调用 KeyUp。请记住检查返回值。

关于c# - 使用 WPF 将 Enter 键发送到外部应用程序时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32074253/

相关文章:

windows - 是否可以在 CALL 命令中传递未处理的参数?

javascript - 谷歌可视化中的自动宽度

c# - IIS CLI 为我的项目生成带有站点的 applicationhost.config

c# - (UInt16)i 与 Convert.ToUInt16(i)

wpf - 设置全局字体系列

wpf - 路由命令的所有者类型应该是什么?

java - 将 JDK 添加到 netbeans 8.1

c# - 接口(interface)上的最小起订量通用方法设置

c# - WPF 的新 DateTimePicker?

windows - Powershell - 如何使用 Get-WindowsOptionalFeature 命令到 "Turn Windows Features On and Off"