如何用java控制window系统音量 50

我知道java的JNA或者JNI可以调用C函数库,但是不熟悉,没思路。还有就是SWT里面也是提供function调用C,可以对于C语音的API及其参数和类型不是很熟悉。... 我知道 java 的 JNA或者JNI可以调用 C 函数库,但是不熟悉,没思路。还有就是 SWT 里面也是提供 function 调用 C ,可以对于C语音的API 及其参数和类型不是很熟悉。 展开
 我来答
金刚钻Johnny
推荐于2018-04-04 · TA获得超过356个赞
知道小有建树答主
回答量:314
采纳率:100%
帮助的人:57.6万
展开全部
java控制window系统音量有两种办法,一是JNA或者JNI调用,二是执行VBS脚本。

这里推荐使用第二种方式,它比较灵活,控制可以放在程序内,也可以将控制文件独立出来,便于后期维护更改。
核心代码如下:
public static void main(String[] args){

File file = File.createTempFile("ylkz_vba",".vbs");
file.deleteOnExit();
FileWriter fw = new FileWriter(file);
String vbs ="'以下命令实现音量减(用循环可以实现一直减):\n" +
"Set WshShell = CreateObject(\"WScript.Shell\")\n" +
"WshShell.SendKeys(chr(&hAE))\n" +
"'音量增(用循环可以实现一直增):\n" +
"Set WshShell = CreateObject(\"WScript.Shell\")\n" +
"WshShell.SendKeys(chr(&hAF))";
fw.write(vbs);
fw.close();
Runtime.getRuntime().exec("wscript " + file.getPath()).waitFor();
bd9006
2012-06-23 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
追问
恩 JNI 是 调用 winAPI的标准,比较麻烦,一时不知道如何下手,能给个实例不。我要的是通过java 操作 window系统,也就是 java调用 c  而不是 c调用java
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
en620519
2012-06-23 · TA获得超过101个赞
知道答主
回答量:125
采纳率:0%
帮助的人:48.1万
展开全部
使用JAVA调用VBS会很方便
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ruin_lelouch
2018-04-04 · 超过11用户采纳过TA的回答
知道答主
回答量:38
采纳率:100%
帮助的人:15.5万
展开全部
package com.wang.robot.service;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/**********************************************************
 * All Rights Reserved.
 * 文件名称: VbsService
 * 摘 要: 执行vbs
 * 初始版本:1.0.0
 * 原 作 者:wangch
 * 完成日期: 2018-04-04 09:27
 * 当前版本: 1.0.0
 * 作 者: wangch
 * 完成日期: 2018-04-04 09:27
 *****************************************************************/
public class VbsService {

    public static void execKeyVbs(String key){
        String vbs = "Set wshell = Wscript.CreateObject(\"Wscript.Shell\")\n" +
                "key = chr(&h88" + key + ")\n" +
                "wshell.Sendkeys key";
        try {
            File file = File.createTempFile("media_control", ".vbs");
            file.deleteOnExit();
            FileWriter fw = new FileWriter(file);
            fw.write(vbs);
            fw.close();
            Runtime.getRuntime().exec("wscript " + file.getPath()).waitFor();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        VbsService.execKeyVbs("AF");//加大音量
        VbsService.execKeyVbs("AE");//减小音量

    }

}

最佳答案的vbs代码有问题, 改了一下在win10测试有效.
key值是在 windows虚拟按键表网页链接里面查到的, 我截了其中媒体按钮的值给你,

VK_VOLUME_MUTE

0xAD

Volume Mute key

VK_VOLUME_DOWN

0xAE

Volume Down key

VK_VOLUME_UP

0xAF

Volume Up key

VK_MEDIA_NEXT_TRACK

0xB0

Next Track key

VK_MEDIA_PREV_TRACK

0xB1

Previous Track key

VK_MEDIA_STOP

0xB2

Stop Media key

VK_MEDIA_PLAY_PAUSE

0xB3

Play/Pause Media key

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式