是否可以从Java程序中捕获Windows弹出消息框?

时间:2010-09-02 18:59:02

标签: java windows popup

我有一个在Windows服务器上运行的Java进程,我必须启动命令行exe。我正在使用

Process p = Runtime.getRuntime().exec(command);
OutputStream stdin = p.getOutputStream();
InputStreamstderr = p.getErrorStream();
InputStream stdout = p.getInputStream();

运行流程并捕获标准输入/输出流。我遇到的问题是我必须运行的exe之一将抛出一个弹出消息框,需要点击“Ok”才能完成失败。
我的Java程序在后台运行,因此它没有弹出消息框的窗口,这意味着当Java程序的exe错误将挂起,直到某人注意到它并在任务管理器中将其杀死。

有没有办法能够从Java中捕获或检测这些弹出框?

4 个答案:

答案 0 :(得分:1)

你可能很幸运。 您可以使用JNA来调用Win32 API的EnumerateWindowsFindWindow。 然后通过FindWindowEx搜索按钮。

然后拨打PostMessage并发送BM_CLICK

“点击”它

你可能希望有一个独立的观察者线程来完成所有这些,因为你的程序等待进程结束或继续。

抱歉,我的回答非常粗糙。晚餐优先。

答案 1 :(得分:0)

没有。这只是一个正在运行的过程。

产生任何提出GUI或任何其他无法通过stdin / out控制的控制方法的东西都没有意义。

答案 2 :(得分:0)

不,不是我直接说的。但是,您可以执行某种形式的异步通知。例如,您可以将特定应用程序发布到您的应用程序可以订阅的JSM队列中的主题。如果您没有选择转到JMS路由,则可以使用基于文件通知的触发器。您可以让另一个应用程序在公共目录中创建一个虚拟文件,您可以让您的应用程序监视该目录。

底线是我认为你不能从你进程中的另一个进程捕获弹出窗口。因此,您需要执行某种形式的外部/异步处理来捕获它。

答案 3 :(得分:0)

一个不优雅但简单的解决方案就是超时。