gpt4 book ai didi

java - 阻止应用程序的所有其他输入并通过 Java 包装器对其进行控制

转载 作者:行者123 更新时间:2023-12-02 00:51:48 34 4
gpt4 key购买 nike

我有一个 Windows 应用程序,它有一个复杂的 GUI,我想对用户隐藏它。为了做到这一点,我想创建一个具有极其简单界面的包装器,该界面覆盖此应用程序,并在用户单击包装器上的单个按钮时自动执行许多操作。 (我希望“包装器”是正确的术语。)是否可以使用 Java 来阻止底层应用程序的输入,以便用户不会无意中搞乱自动化?我该怎么办呢?另外,如何在不劫持鼠标的情况下自动对应用程序进行按键和单击?这在 Java 中可能吗?

我看过java.awt.Robot ,但它似乎劫持了鼠标。我也看过AutoIT ,但它也劫持了鼠标并且不与 Java 集成。

这些选项似乎都不足以满足我的需要,但我不知道如何继续。

最佳答案

如果您确实没有其他选择,我建议仅将通过 GUI 的自动化作为最后的手段。

如果您的应用程序公开了一个 API,我会尝试使用它。例如,如果 GUI 在一个 DLL 中实现,而逻辑在另一个 DLL 中实现,那么您可以使用 JNA 加载应用程序逻辑 DLL 并直接从 java 调用应用程序函数。如果您的应用程序公开 COM/OLE 接口(interface),那就更好了 - 有大量的 Java<>COM 桥,这将允许您直接调用此接口(interface),例如Jacob

如果您确实别无选择,只能通过 GUI 实现自动化,那么请按以下步骤操作:

  1. 使用 JNA 访问 Windows shell API。然后,您可以使用 ShellExecute 启动包装的应用程序。具体来说,传递 SW_HIDE 作为窗口模式应该有助于确保应用程序不会出现。
  2. 使用 JNA 访问 Windows API FindWindow 来查找您的应用程序窗口。您还可以使用 ShowWindow API 将其设置为不可见,以防万一步骤 1 不起作用(并非所有应用程序都编写为使用 nCmdShow 参数。)
  3. 您现在可以使用 PostMessage 将消息发布到应用程序窗口。您可以使用 Windows 消息发送击键和鼠标事件。例如。请参阅 WM_KEYUPWM_LBUTTONDOWN

因为包装的应用程序窗口是不可见的,所以您不需要“阻止”该应用程序,用户根本无法访问它的 GUI。但您仍然可以通过编程方式向其发送输入。

关于java - 阻止应用程序的所有其他输入并通过 Java 包装器对其进行控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2718525/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com