Java代码关闭桌面/本地窗口?

时间:2019-05-24 08:55:00

标签: java window

我已经使用Java Swing工具箱创建了一个桌面窗口,该窗口已打开,并且要求使用Java代码关闭该窗口。

窗口可以是:文件浏览器窗口,也可以是您可以考虑在计算机上打开的任何窗口。

2 个答案:

答案 0 :(得分:0)

我了解到,您想关闭Windows系统上的本机窗口。

如果这意味着要杀死底层进程,那么您可以按照另一个答案中几乎A所假设的那样使用taskkill。

如果您真的想只关闭一个窗口而不终止后面的过程,则需要一种不同的方法:

Java应用程序在Java虚拟机中运行,因此它们具有自己的虚拟环境,而Java框架不提供此类方法。

(Java框架也是跨平台的,在操作系统上,如何获取和关闭此窗口有所不同。)

我从未使用过Java Native Interface(https://docs.oracle.com/javase/7/docs/technotes/guides/jni/index.html),但据我了解,可以用来编写本机代码,然后从Java VM中执行本机代码。

或者找到一个正在执行此操作的小型工具,然后通过ProcessBuilder / Process / Runtime类执行该外部工具,可能要简单得多(我不知道这样的工具,但是周围可能有这样的工具。用户界面测试工具也许可以做到这一点以及更多!而且在...附近有自动化工具

背后的技术思想:Windows应用程序具有消息队列,您可以使用API​​对其进行访问。因此,您可以将消息发送到Windows(以及Windows内部的控件)以执行某些操作,例如关闭。

可以在user32.dll / winuser.h中找到该API:

FindWindow函数,例如:https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-findwindowa ->您可以使用该函数获取句柄,然后将其用于下一个函数。

CloseWindow:https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-closewindow

如果您找不到要启动的现有命令行收费,也许您可​​以使用现有的包装程序(例如CProject上的CWindow)快速编写.Net应用程序:https://www.codeproject.com/Articles/25925/CWindow-A-wrapper-class-for-the-window-API-functio

也许有点复杂,但这是我所知道的控制窗口的方式。

答案 1 :(得分:-1)

我假设您正在使用Windows操作系统。您可以执行命令行指令:

Runtime.getRuntime().exec("cmd /c start cmd.exe /K \"<your command>\"");

例如,关闭Firefox浏览器(通过杀死进程):

Runtime.getRuntime().exec("cmd /c start cmd.exe /K \"taskkill /F /IM firefox.exe\"");

有关关闭特定浏览器窗口的命令的线程: https://superuser.com/questions/1263315/how-to-close-a-particular-opened-folder-using-cmd-or-batch-file

或者,您可以使用命令来杀死指定的进程(就像上面显示的示例一样): https://www.windows-commandline.com/taskkill-kill-process/