阻止应用程序的所有其他输入,并从Java中的包装器控制它

阻止应用程序的所有其他输入,并从Java中的包装器控制它,java,windows,automation,wrapper,Java,Windows,Automation,Wrapper,我有一个windows应用程序,它有一个复杂的GUI,我想对用户隐藏它。为了做到这一点,我想创建一个具有极其简单界面的包装器,该界面覆盖此应用程序,并在用户单击包装器上的单个按钮时自动执行许多操作。(我希望“包装器”是一个恰当的术语。)是否可以使用Java阻止底层应用程序的输入,这样用户就不会无意中弄乱自动化?我该怎么办?另外,如何在不劫持鼠标的情况下自动按下和单击应用程序?这在Java中可能吗 我已经看过了,但它似乎劫持了老鼠。 我也看过,但它也劫持了鼠标,没有与Java集成 这两个选项似乎都

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

我已经看过了,但它似乎劫持了老鼠。 我也看过,但它也劫持了鼠标,没有与Java集成


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

我建议,只有在没有其他选择的情况下,通过GUI实现自动化才是最后的选择

如果您的应用程序公开了一个API,我会尝试使用它。例如,如果GUI在一个DLL中实现,而逻辑在另一个DLL中实现,则可以使用加载应用程序逻辑DLL并直接从java调用应用程序函数。如果您的应用程序公开了一个COM/OLE接口,那就更好了——有很多JavaCOM桥,这将允许您直接调用这个接口,例如

如果您真的别无选择,只能通过GUI实现自动化,那么下面介绍如何实现这一点:

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

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

    我建议,只有在您确实没有其他选择的情况下,通过GUI实现自动化才是最后的选择

    如果您的应用程序公开了一个API,我会尝试使用它。例如,如果GUI在一个DLL中实现,而逻辑在另一个DLL中实现,则可以使用加载应用程序逻辑DLL并直接从java调用应用程序函数。如果您的应用程序公开了一个COM/OLE接口,那就更好了——有很多JavaCOM桥,这将允许您直接调用这个接口,例如

    如果您真的别无选择,只能通过GUI实现自动化,那么下面介绍如何实现这一点:

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

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

    现在您不再是新手,我相信如果您返回并编辑本文中的超链接,其他人会很感激。我将对你所描述的内容做一些研究,然后我会带着反馈回来。谢谢你的帮助。原来这个应用程序有一个COM接口。我要试着用雅各布。(可能需要再问几个问题,呵呵)再次感谢。既然你不再是新手了,我相信如果你回去编辑这篇文章的超链接,其他人会很感激的。我将对你所描述的内容做一些研究,然后我会带着反馈回来。谢谢你的帮助。原来这个应用程序有一个COM接口。我要试着用雅各布。(可能需要再问几个问题)再次感谢。