.::: 一路问情 :::.
  • 注册
  • 登录
  • 会员
  • 生存游戏
  • FTP资源中心
  • 七海争霸
  • 社区设施
  • 帮助
.::: 一路问情 :::. » 『建站技术』 » 用Java调用VC音量控制程序
‹‹ 上一主题 | 下一主题 ››
发新话题
  • 发新话题
  • 发布投票
  • 发布商品
  • 发布悬赏
  • 发布活动
  • 发布辩论
  • 发布视频
打印

[技术] 用Java调用VC音量控制程序

guaiguai1107
看贴不回的后果

中级会员

Rank: 2

帖子
81 
威望
78 点 
金钱
148 元 
好评
0 点 
  • 个人空间
  • 发短消息
  • 加为好友
  • 当前离线
1楼 大 中 小 发表于 2008-2-20 17:17  只看该作者

用Java调用VC音量控制程序

前言

  本文通过Java的Runtime接口来实现调用其他语言实现的应用程序,进而来实现对计算机硬件信息的监控和控制.本文是多媒体信息系统的一个部分,就是调整计算机音量。

  使用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

  实现原理如下:

  使用一个线程动态刷新页面,主线程用来实现对音量的控制.其实现代码如下:

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>='0' && chr<='9') s+=chr;
    }
    //System.out.println(s);
    Integer nVolume = new Integer(s);
    seconds = nVolume.intValue();
    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

  创建一个JFrame用于显示 VolumeControl.java

  设置页面背景,创建显示上述Panel的容器.

  创建对话框用于弹出显示音量控制界面 JVolumeDlg.java

  创建一个对话框来显示上个步骤生成的Frame,并提供事件控制容器.

  事件流向---> JVolumeDlg -- VolumeControl --- VolumeTracker

  总结

  Java Runtime 接口提供了调用其他应用程序的接口,通过这个接口,可以实现对计算机硬件的控制和监控. 同时通过界面线程可以实现相对复杂的应用程序界面的开发



QQ
UID
71395 
精华
0 
积分
78 
钻石
0 克拉 
宣传
0 点 
来路
朋友介绍 
阅读权限
20 
性别
男 
来自
qq 
在线时间
5 小时 
注册时间
2008-2-20 
最后登录
2008-2-29 

查看详细资料

TOP

beauty511

初级会员

帖子
8 
威望
10 点 
金钱
47 元 
好评
0 点 
  • 个人空间
  • 发短消息
  • 加为好友
  • 当前离线
2楼 大 中 小 发表于 2008-3-19 23:58  只看该作者

beauty511

wedding dress
bride
abito
vestido
abito
flower gril
party dress
evening dress
http://www.beauty511.com
traje de novia
Brautkleider
<a href="http://www.beauty511.com/shop2/index.php" >wedding dress</a>
<a href="http://www.beauty511.com/shop2/catalog_31.html" >bride</a>
<a href="http://www.beauty511.com/" >abito</a>
<a href="http://www.beauty511.com/Girls.php" >flower gril</a>
<a href="http://www.beauty511.com/Voyage.php" >party dress</a>
<a href="http://www.beauty511.com/" >evening dress</a>
<a href="http://www.beauty511.com/" >vestido</a>
<a href="http://www.beauty511.com/" >traje de novia</a>
<a href="http://www.beauty511.com/" >Brautkleider</a>
http://www.beauty511.com/



QQ
UID
85068 
精华
0 
积分
10 
钻石
0 克拉 
宣传
0 点 
来路
朋友介绍 
阅读权限
10 
性别
女 
来自
suzhou 
在线时间
0 小时 
注册时间
2008-3-19 
最后登录
2008-3-19 

查看详细资料

TOP

‹‹ 上一主题 | 下一主题 ››
发新话题
 

 

当前时区 GMT+8, 现在时间是 2008-7-21 07:56 蜀ICP备08000616号

清除 Cookies - 联系我们 - Ask Love - Archiver - WAP - TOP - 界面风格

  • YUYU_Emera-x

Powered by Discuz! 6.0.0,

Processed in 0.029302 second(s), 5 queries, Gzip enabled.

  • 控制面板首页
  • 编辑个人资料
  • 积分交易
  • 积分记录
  • 公众用户组
  • 个人空间管理
  • 资源中心
  • 名人堂
  • 社区银行
  • 醒目高亮
  • 勋章中心
  • 空间互踩
  • 便民查询
  • 邮箱图标
如果你喜欢一路问情,请同时向你的5个QQ好友宣传Sy64.Com,多谢支持!
论坛是我家,维护靠大家!--问情宣