如何用java控制window系统音量 50
我知道java的JNA或者JNI可以调用C函数库,但是不熟悉,没思路。还有就是SWT里面也是提供function调用C,可以对于C语音的API及其参数和类型不是很熟悉。...
我知道 java 的 JNA或者JNI可以调用 C 函数库,但是不熟悉,没思路。还有就是 SWT 里面也是提供 function 调用 C ,可以对于C语音的API 及其参数和类型不是很熟悉。
展开
4个回答
展开全部
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();
这里推荐使用第二种方式,它比较灵活,控制可以放在程序内,也可以将控制文件独立出来,便于后期维护更改。
核心代码如下:
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();
展开全部
追问
恩 JNI 是 调用 winAPI的标准,比较麻烦,一时不知道如何下手,能给个实例不。我要的是通过java 操作 window系统,也就是 java调用 c 而不是 c调用java
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用JAVA调用VBS会很方便
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询