目录

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

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

Java 控制 Windows 系统音量

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.util.logging.Logger;

/**

* Created by Administrator on 2018/6/26 0026.

* 系统工具类

*/

public class SystemUtils {

private static final Logger logger = Logger.getGlobal();

/**

* 控制电脑系统音量

*

* 约定在应用根目录下的 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();

}

}

public static void main(String[] args) throws InterruptedException {

logger.info("1 秒后开始静音.");

Thread.sleep(1000);

controlSystemVolume("0");

logger.info("1 秒后开始取消静音.");

Thread.sleep(1000);

controlSystemVolume("0");

logger.info("1 秒后开始增加 2 格音量,可以使用循环,持续增加音量.");

Thread.sleep(1000);

controlSystemVolume("1");

logger.info("1 秒后开始减小音量,可以使用循环持续减小.");

Thread.sleep(1000);

for (int i = 0; i < 3; i++) {

controlSystemVolume("2");

Thread.sleep(500);

}

}

}

java控制系统音量_Java 控制 Windows 系统音量-Go语言中文社区相关推荐

  1. 控制windows系统音量

    网上有一些控制系统音量的方法: win xp系统可以用mixerOpen等方式: win 7系统可以用wsapi等方式:WASAPI的全称是Windows Audio Session API(Wind ...

  2. c 语言 网络唤醒,Java网络编程————UDP实现ThinkPad S5网络唤醒-Go语言中文社区...

    功能要求:通过Java程序实现ThinkPad S5 笔记本网络唤醒 必备知识: 一.定义:网络唤醒,通过局域网.互联网或通讯网络,以有线网卡的形式,向目标电脑发送魔法包(Magic Packet), ...

  3. grpc java 泛型_关于使用GRPC遇到的BUG-Go语言中文社区

    GRPC获取服务器数据是耗时操作,不能写在UI主线程中,可以写在子线程或使用AsyncTask实现获取数据,但实测,仅仅是获取少量数据,可以写在UI主线程中(虽然不推荐这么做).目前博主在AsyncT ...

  4. 最牛逼的java代码_分享史上java最牛逼 最简短的代码-Go语言中文社区

    也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 确实是12306的最核心代码呀 确实牛public class Test{    static{       System.ou ...

  5. 像素鸟多线程java_用java Swing做的小游戏像素鸟-Go语言中文社区

    最终效果 整个项目都是基于swing实现的.窗是口将图片加载到JPanel面板,然后将面板添加到到JFrame窗口实现显示. 这个类是选择几只像素鸟的类,也是main函数里执行的方法,代码有详细的注释 ...

  6. 如何管理php常驻进程,一看就懂系列之 如何实现与控制php常驻进程-Go语言中文社区...

    前言 关于如何实现与控制php常驻进程,不管是google还是baidu上进行搜索,都没有感觉看起来赏心悦目的解答,于是决定自己动手总结下. 有同学会问了,整这个干甚?简单的说就是,可以让一个php脚 ...

  7. CB在Windows系统中程序输出中文时出现乱码

    前几天在cb写代码的时候出现中文乱码(如下) 本来也是新手,啥都不会,只能到处查解决方法.网上确实有,但是不知道为什么我的CB还是会出现各种奇葩状况.后来在一本教材里面找到了解决方法如下(疯狂感谢这位 ...

  8. C# Windows系统音量调节Demo源码

    基于.NET Framework 4.0开发,包含滑块设置音量,键盘F1.F2调节音量. 通过滑块调节系统音量核心代码 /// <summary>/// 滑块设置音量/// </su ...

  9. electron调节windows系统音量解决方案

    借助NirCmd的能力 官方地址 下载地址 使用NirCmd的相应命令 将音量设为最高值 nircmd.exe setsysvolume 65535 静音 nircmd.exe mutesysvolu ...

最新文章

  1. 计算机书籍-机器学习预测分析Go语言实现
  2. eclipse快速定位java对应的class
  3. qpaint 在graphicsview上的qimage画一条线_solidworks2016画一个塑料外壳:用开放的草图进行切除,你会吗?...
  4. ifix如何设画面大小_如何让你的视频又小又清晰?视频编码输出软件来了
  5. 使用croc命令在Linux系统电脑之间传输文件和文件夹
  6. mysql 索引 内存_mysql索引【第三篇】
  7. 接口规范 9. 推流认证相关接口
  8. 深度优先遍历访问的边集合_数据结构与算法: 三十张图弄懂「图的两种遍历方式」...
  9. Android 手机不赚钱为啥还要做
  10. 团队作业4——第一次项目冲刺(Alpha版本)2017.4.24
  11. 【转】计算机视觉简介
  12. 和foreach的区别和应用场景_介绍下Set、Map、WeakSet 和 WeakMap 的区别?
  13. 2019 related conferences 相关会议 ISMAR, VRST, UIST
  14. 几款引擎比较 BigWorld Unreal CryEngine等
  15. 禁忌搜索算法(Tabu Search)
  16. vscode access denied to unins000.exe
  17. 通过天眼查查询相关企业信息
  18. 动态规划算法---钢条切割
  19. InnoDB关键特性之插入缓冲
  20. sap pi的操作1

热门文章

  1. Lind.DDD.RedisClient~对StackExchange.Redis调用者的封装及多路复用技术
  2. ASP.NET Core 中文文档 第三章 原理(2)中间件
  3. 用ajax连接mysql_页面用ajax实现简单的连接数据库
  4. 【空间数据库】Windows操作系统PostgreSQL+PostGIS环境搭建图文安装教程
  5. C语言试题二十之利用以下的简单迭代方法求方程cos(x)-x=0的一个实根。
  6. php str_replace 字符串替换
  7. linux block设备,Linux I/O Block--块设备的表示
  8. 营业执照在线一键生成_如何在线制作证件照?证件照一键生成的方法
  9. 32岁武汉硕士毕业4年后重新高考,考上本硕需再读8年:“不是一时冲动”
  10. 震惊!原来现在无所不能的世界主人翁,早已在三千年前就悄然出现!