有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我必须创建一个应用程序,自动打开powerpoint文件,让它播放,然后关闭它。我不仅需要知道如何关闭它,还必须检测它何时关闭或停止。 第一种选择: 我知道每个powerpoint将播放多长时间,因此我可以硬编码何时关闭文件。我只是想知道怎么做。桌面类(我可以找到)中没有用于关闭的方法。 第二种选择: 如果有人知道一个microsoft 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);
    }

共 (2) 个答案

  1. # 1 楼答案

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

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

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

  2. # 2 楼答案

    这里是一个使用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);  
            }
        }
    }