如何使用Java关闭在本机桌面上运行的外部程序(Powerpoint)?

时间:2013-05-05 19:26:37

标签: java powerpoint desktop-application

我必须创建一个应用程序,它将自动打开一个powerpoint文件,让它播放,然后关闭它。我不仅需要弄清楚如何关闭它,而且还必须检测它何时关闭或停止。 第一种选择: 我知道每个powerpoint会播放多长时间,所以我可以在何时关闭文件进行硬编码。我只需要知道如何做到这一点。桌面类(我能找到)中没有方法可以关闭。 第二种选择: 如果有人知道微软powerpoint api让我打开powerpoint并使用java进行幻灯片演示并获得状态或某事,那就太好了。我不必进入每个演示文稿,并计算每张幻灯片上的幻灯片数量和转换计时器。

开场,让它播放和关闭它只是我需要创建的应用程序的一小部分。但到目前为止,这是关于这个问题的:

    File myfile = new File("PowerPoint.ppsx");
    try {
        Desktop.getDesktop().open(myfile);
    } catch (IOException ex) {
        Logger.getLogger(Sc.class.getName()).log(Level.SEVERE, null, ex);
    }

2 个答案:

答案 0 :(得分:1)

可能这是关闭外部程序的解决方案: http://www.java-forums.org/new-java/59691-close-another-program.html#post285956

如果要检测程序何时停止运行,那么可以使用循环启动新线程,该循环将不时检查程序进程是否仍在运行,使用链接中提到的相同方法。

这仅适用于一个(Windows)平台,Java不是此类任务的最佳选择。

答案 1 :(得分:1)

这是使用JNA的解决方案。首先我们得到句柄,我们使用窗口的“类名”进行搜索。您可以使用特殊实用程序(如Spy ++(Visual Studio附带))确定特定程序(在本例中为Powerpoint)的类名。使用类名和窗口标题可以使搜索更精确(但这里我只使用类名),所以如果你有多个演示文稿正在运行......你可能无法关闭好的演示文稿!。

import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinUser;
import com.sun.jna.platform.win32.WinDef.HWND;

// https://github.com/twall/jna#readme
//    you need 2 jars : jna-3.5.1.jar and platform-3.5.1.jar

public class KillMyPP {
    public static void main(String[] args) {
        HWND hwnd = User32.INSTANCE.FindWindow("screenClass", null);
        if (hwnd == null) {
           System.out.println("PPSX is not running");
        }
        else {
           User32.INSTANCE.PostMessage(hwnd, WinUser.WM_QUIT, null, null);  
        }
    }
}