admin管理员组

文章数量:1415024

目录

Java 控制 Windows 系统音量

Spring Boot Jar、war 包注册成 Windows 服务启动

Windows Service Wrapper(WinSW-推荐)


Java 控制 Windows 系统音量

1、使用 Java 来控制 Windows 系统音量,使用 JNA 调用 windows 底层 API 因为有点麻烦,所以这里采用纯 Java API 结合 VBS 脚本的方式进行控制。

2、可以参考《VBS 控制 Windos 系统音量 及视频播放》,本文同样是利用 VBS 来控制,区别在于这里的 vbs 文件会用 Java 代码动态生成,灵活性更强。

    /**
     * 控制电脑系统音量
     * <p/>
     * 约定在应用根目录下的 temp 目录中放置3个vbs文件
     * volumeMute.vbs:用于静音
     * volumeAdd.vbs:增加音量
     * volumeMinus.vbs:减小音量
     * 文件以及文件的内容采用 Java 代码动态生成,不存在时则新建,存在时则直接调用
     *
     * @param type 0:静音/取消静音    1:增加音量  2:减小音量
     */
    public static void controlSystemVolume(String type) {
        try {
            if (type == null || "".equals(type.trim())) {
                logger.info("type 参数为空,不进行操作...");
            }
            /**tempFile:vbs 文件
             * vbsMessage:vbs 文件的内容*/
            String vbsMessage = "";
            File tempFile = null;
            Runtime runtime = Runtime.getRuntime();
            switch (type) {
                case "0":
                    tempFile = new File("temp", "volumeMute.vbs");
                    vbsMessage = !tempFile.exists() ? "CreateObject(\"Wscript.Shell\").Sendkeys \"棴\"" : "";
                    break;
                case "1":
                    tempFile = new File("temp", "volumeAdd.vbs");
                    vbsMessage = !tempFile.exists() ? "CreateObject(\"Wscript.Shell\").Sendkeys \"棷\"" : "";
                    break;
                case "2":
                    tempFile = new File("temp", "volumeMinus.vbs");
                    vbsMessage = !tempFile.exists() ? "CreateObject(\"Wscript.Shell\").Sendkeys \"棶\"" : "";
                    break;
                default:
                    return;
            }
            /**
             * 当3个vbs文件不存在时,则创建它们,应用默认编码为 utf-8 时,创建的 vbs 脚本运行时报错
             * 于是使用 OutputStreamWriter 将 vbs 文件编码改成gbd就正常了
             */
            if (!tempFile.exists() && !vbsMessage.equals("")) {
                if (!tempFile.getParentFile().exists()) {
                    tempFile.getParentFile().mkdirs();
                }
                tempFile.createNewFile();
                FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
                OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "GBK");
                outputStreamWriter.write(vbsMessage);
                outputStreamWriter.flush();
                outputStreamWriter.close();
                logger.info("vbs 文件不存在,新建成功:" + tempFile.getAbsolutePath());
            }
            runtime.exec("wscript " + tempFile.getAbsolutePath()).waitFor();
            logger.info("音量控制完成.");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

src/test/java/com/wmx/web_app/WinVolumeTest.java · 汪少棠/web_app - Gitee。 

Spring Boot Jar、war 包注册成 Windows 服务启动

1、本文介绍如何把 jar、war 包注册成 Windows 服务,然后随服务器启动而自动启动服务。

Windows Service Wrapper(WinSW-推荐)

1、WinSW 可以将任何应用程序作为 Windows 服务进行包装和管理。https://github/winsw/winsw。

2、WinSW 下载:https://github/winsw/winsw/releases。以 WinSW v2.12.0 版本为例,同时下载  sample-minimal.xml、WinSW-x64.exe 两个文件,前者用于配置服务信息,后者用于注册服务信息。

3、新建目录:将准备好 jar、war 包(比如web_app-0.0.1-SNAPSHOT.jar)与 WinSW 下载的两个文件放在一起。

4、修改配置:sample-minimal.xml 的文件名称为 WinSW-x64.xml,保持下载的两个文件名称相同就行,然后打开配置文件并修改内容如下(完整配置说明参考官网)

1)WinSW 根据 xml 配置文件中部分配置项注册或者卸载服务,服务关联的目录下 WinSW-64.exe 文件,启动服务时,在依据 xml 文件中的配置,通过命令行启动目标程序。

2、下面的 executable 与 arguments 组合起来就是:java -jar -Xms128m -Xmx512m %BASE%\web_app-0.0.1-SNAPSHOT.jar --server.port=8080

3、如果不是 java 程序,而是 exe 程序,则 executable 对应的通常是目标 exe 程序的路径,arguments 则是要传递给可执行文件的参数。

<!--
此配置文件应放置在WinSW可执行文件附近,名称应相同。例如,对于myapp.exe,配置文件名应为myapp.xml
更多信息:https://github/kohsuke/winsw/blob/master/doc/xmlConfigFile.md
完整示例:https://github/kohsuke/winsw/blob/master/examples/sample-allOptions.xml
 -->
<!--
环境变量扩展说明:
1、XML配置文件可以包含形式为%xxx%的环境变量扩展,将自动替换为变量的实际值。如果引用了未定义的环境变量,则不会发生替换。
2、此外,服务包装器会自行设置环境变量%BASE%,该变量指向包含重命名的WinSW.exe的目录。相当于是一个相对路径。
这对于引用同一目录中的其他文件很有用。由于这本身就是一个环境变量,因此也可以从服务包装器启动的子进程访问此值。
 -->
<service>
  <!-- 服务ID(必须):在系统中安装的所有服务中必须是唯一的,并且应该完全由字母数字字符组成。-->
  <id>WebAppTest</id>
  <!-- 服务名称(可选):可以包含空格和其他字符,但是不应该太长 -->
  <name>Web App Test</name>
  <!-- 服务说明(可选) -->
  <description>蚩尤后裔 全球气候监控中心</description>
  <!-- 为子进程设置环境变量(可选):可以多次指定此可选元素,value 可以是绝对路径,也可以是其它环境变量. -->
  <!--<env name="SERVER_HOME" value="%BASE%"/> -->
  <!-- 指定要启动的可执行文件(必须):可以是绝对路径,也可以只指定可执行文件名并从path中搜索它 -->
  <executable>java</executable>
  <!-- 指定要传递给可执行文件的参数(可选) -->
  <arguments>-jar -Xms128m -Xmx512m %BASE%\web_app-0.0.1-SNAPSHOT.jar --server.port=8080</arguments>
  <!-- 启动类型(可选):Automatic(自动启动,默认),Manual(手动启动) -->
  <startmode>Automatic</startmode>
  <!-- 日志模式(可选):append (追加,默认), reset (重置), ignore(忽略), roll (移动到\*.old). -->
  <!--<log mode="ignore"></log>-->
</service>

5、注册服务:然后便可以在当前目录下打开 cmd 命令行窗口,执行命令(完整命令可以参考官网):

Command 命令Description 描述
install注册安装服务。如 WinSW-x64.exe install
uninstall卸载服务。如 WinSW-x64.exe uninstall
start启动服务。如 WinSW-x64.exe start
stop停止服务。如 WinSW-x64.exe stop
restart重启服务。如 WinSW-x64.exe restart

6、服务注册成功后,可以在系统服务列表中看到并启动,也可修改启动方式。右击--》属性设置即可。

7、当前目录下会存放 WinSW 的日志信息,如果服务注册失败,可以从日志中分析,注册并启动好的 java 程序,程序输出的日志默认也会记录在当前目录下。

完整演示动画:doc/csdn/images/PixPin_2024-09-08_12-02-51-min.gif · 汪少棠/material - Gitee。

本文标签: 音量系统Windowsjavawar