当前页面: 开发资料首页 → Java 专题 → 用Java调用VC音量控制程序
用Java调用VC音量控制程序
摘要: 本文通过Java的Runtime接口来实现调用其他语言实现的应用程序,进而来实现对计算机硬件信息的监控和控制
<table width="570" border="0" cellspacing="0" cellpadding="5" bgcolor="FBE392"> <tr> <td> <table width="570" border="0" cellspacing="0" cellpadding="5"> <tr> <td bgcolor="E1B004" width="200" align="center">天极IT资讯短信服务 电脑小技巧
<table width="100%" border="0" cellspacing="0" cellpadding="3" bgcolor="fffcc0"> function check4() { if (dn.mobile.value.length!=11) { alert("手机号码不正确!"); dn.mobile.focus(); return false; } return true; } <form name=dn action="http://www.my5757.com/tj/join.jsp" target=_blank onSubmit="return check4()"> <tr valign=middle> <td>资费:包月5元
手机: <input type=text name=mobile size=11 style="border:1px solid #000000;height=16px"> <input type=image src="http://www.my5757.com/yesky/images/d34.gif" border="0" width="45" height="18" align="middle" name="image2" > </td> </tr> <input type=hidden name=stype value="yjq"> </form> </table> </td> <td width="370" bgcolor="FBC403">介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。 </td> </tr> </table> </td> </tr> </table>
前言
本文通过Java的Runtime接口来实现调用其他语言实现的应用程序,进而来实现对计算机硬件信息的监控和控制.本文是多媒体信息系统的一个部分,就是调整计算机音量。
<iframe width="360" height="300" align="right"scrolling="No" frameborder="0" marginheight="0" marginwidth="0" SRC="http://images.chinabyte.com/adjs/iframe-pip/y-software-pip.html"></iframe> 使用VC编写音量控制程序
本控制示例使用VC6.0编写,主
要是调用系统的API来实现,
mixerGetLineInfo 获取Master Volume Control.
mixerGetControlDetails 获取 Volume Control 信息
mixerSetControlDetails 设置 Volume Control 信息
最终编译成Console类型的Dos执行的程序VolumeControl.exe。这个程序实现三个功能:
1.获取音量 VolumeControl.exe 0
2.增加音量 VolumeControl.exe 1
3.减少音量 VolumeControl.exe 2
下面我们用Java设计创建一个Panel用于显示音量并调用应用程序实现对音量的实际控制,本例中使用自定义Progress显示VolumeTracker.java
实现原理如下:
使用一个线程动态刷新页面,主线程用来实现对音量的控制.其实现代码如下:
<table width="100%" bgColor=#ffffff>
<tr>
<td>import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.text.AttributedString;
import java.text.AttributedCharacterIterator;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.io.*;
public class VolumeTracker extends JPanel implements Runnable
{
String welcomeStr = "Welcome to Java Sound";
Thread pbThread;
Color background = Color.white;
//new Color(20, 20, 20);
Color jfcBlue = Color.blue;
//new Color(204, 204, 255);
Color jfcDarkBlue = jfcBlue.darker();
Font font24 = new Font("serif", Font.BOLD, 24);
Font font28 = new Font("serif", Font.BOLD, 28);
Font font42 = new Font("serif", Font.BOLD, 42);
FontMetrics fm28, fm42;
String errStr=null;
String currentName=null;
double duration = 100.0;
double seconds = 82.0;
boolean midiEOM, audioEOM;
public VolumeTracker()
{
fm28 = getFontMetrics(font28);
fm42 = getFontMetrics(font42);
initVolume();
start();
}
private void initVolume()
{
try
{
//这一段小程序实现对VC创建程序的调用
Runtime rt = Runtime.getRuntime(); //Time and Date.
//mngPathTool类,提供了一个获取当前路径的方法
mngPathTool tool = new mngPathTool();
String sexec = tool.getCurPath()+ "\\binex\\VolumeControl.exe 0";
Process child = rt.exec(sexec);
//获取控制台输出的内容,进而获得音量的大小
InputStreamReader reader = new InputStreamReader(child.getInputStream());
char[] chr = new char[5];
reader.read(chr) ;
String s="";
for(int i=0;i<5;i++)
{
if(chr[i]>='0' && chr[i]<='9') s+=chr[i];
}
//System.out.println(s);
Integer nVolume = new Integer(s);
seconds = nVolume.int
Value();
child.waitFor();
//这一段小程序实现对VC创建程序的调用
}
catch(Exception e1)
{
e1.printStackTrace();
}
}
public void paint(Graphics g)
{
//画图来实现百分比Tracker
Graphics2D g2 = (Graphics2D) g;
Dimension d = getSize();
g2.setBackground(background);
g2.clearRect(0, 0, d.width, d.height);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(jfcBlue);
double tseconds = duration-seconds;
if (tseconds > 0.0)
{
int num = 20;
int progress = (int) (tseconds / duration * num);
double hh = ((double) (d.height - 4) / (double) num);
double ww = (int)(d.width-4);
double x = 0.0;
for ( ; x < progress; x+=1.0)
{
g2.fill(new Rectangle2D.Double(d.width-ww-2, x*hh+2, ww, hh));
g2.fill3DRect((int)(d.width-ww-2),(int) (x*hh+2),(int) ww, (int)hh,true);
}
g2.setColor(jfcDarkBlue);
for ( ; x < num; x+=1.0)
{
g2.fill(new Rectangle2D.Double(d.width-ww-2, x*hh+2, ww, hh));
g2.fill3DRect((int)(d.width-ww-2),(int) (x*hh+2),(int) ww, (int)hh,true);
}
}
}
public void start()
{
pbThread = new Thread(this);
pbThread.setName("PlaybackMonitor");
pbThread.start();
}
public void stop()
{
if (pbThread != null)
{
pbThread.interrupt();
}
pbThread = null;
}
public void run()
{
while (pbThread != null)
{
try
{
pbThread.sleep(99);
}
catch (Exception e)
{
break;
}
repaint();
}
pbThread = null;
}
public void addVolume()
{
changeVolume(false);
initVolume();
}
public void minusVolume()
{ changeVolume(true);
initVolume();
}
//control sound volume.
private void changeVolume(boolean bIsMinus)
{
try
{
Runtime rt = Runtime.getRuntime();
//Sound Control mngPathTool
tool = new mngPathTool();
String sexec;
if(bIsMinus)
sexec= tool.getCurPath()+ "\\binex\\VolumeControl.exe 2";
else
sexec= tool.getCurPath()+ "\\binex\\VolumeControl.exe 1";
rt.exec(sexec);
}catch(Exception e1){e1.printStackTrace(); }
}
}
// End VolumeTracker</td></tr></table>
创建一个JFrame用于显示 VolumeControl.java
设置页面背景,创建显示上述Panel的容器.
创建对话框用于弹出显示音量控制界面 JVolumeDlg.java
创建一个对话框来显示上个步骤生成的Frame,并提供事件控制容器.
事件流向- JVolumeDlg -- VolumeControl --- VolumeTracker
总结
Java Runtime 接口提供了调用其他应用程序的接口,通过这个接口,可以实现对计算机硬件的控制和监控. 同时通过界面线程可以实现相对复杂的应用程序界面的开发。
↑返回目录
前一篇:
全面接触Java集合框架
后一篇:
Struts开发指南之其他Web构架