0

我必须创建一个应用程序,它会自动打开一个 powerpoint 文件,让它播放,然后关闭它。我不仅需要弄清楚如何关闭它,而且我还必须检测它何时关闭或停止。第一个选项:我知道每个 powerpoint 会播放多长时间,所以我可以硬编码何时关闭文件。我只需要知道如何做到这一点。桌面类(我可以找到)中没有用于关闭的方法。第二种选择:如果有人知道一个微软的 powerpoint api,它可以让我打开 powerpoints 并使用 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);
    }
4

2 回答 2

1

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

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

这只是一个(Windows)平台的解决方案,Java 不是此类任务的最佳选择。

于 2013-05-05T19:46:21.107 回答
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);  
        }
    }
}
于 2013-05-05T20:13:16.027 回答