中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 用户界面
在Java中调用exe实现对计算机音量的控制
作者:未知 时间:2005-07-24 21:16 出处:JR 责编:chinaitpower
              摘要:在Java中调用exe实现对计算机音量的控制
前言
   本文通过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
创建一个Panel用于显示音量并操作应用程序实现对音量的实际控制,本例中使用自定义Progress显示.VolumeTracker.java 
  实现原理如下:
    使用一个线程动态刷新页面,主线程用来实现对音量的控制.其实现代码如下:
    
    
  1.     import java.awt.*;
  2.     import java.awt.font.*;
  3.     import java.awt.geom.*;
  4.     import java.awt.event.*;
  5.     import java.text.AttributedString;
  6.     import java.text.AttributedCharacterIterator;
  7.     import javax.swing.*;
  8.     import javax.swing.border.*;
  9.     import javax.swing.table.*;
  10.     import javax.swing.event.*;
  11.     import java.io.*;
  12.     
  13.     public class VolumeTracker extends JPanel implements Runnable {
  14.     String welcomeStr = "Welcome to Java Sound";
  15.     Thread pbThread;
  16.     Color background = Color.white; //new Color(20, 20, 20);
  17.     Color jfcBlue = Color.blue; //new Color(204, 204, 255);
  18.     Color jfcDarkBlue = jfcBlue.darker();
  19.     Font font24 = new Font("serif"Font.BOLD, 24);
  20.     Font font28 = new Font("serif"Font.BOLD, 28);
  21.     Font font42 = new Font("serif"Font.BOLD, 42);
  22.     FontMetrics fm28, fm42;
  23.     String errStr=null;
  24.     String currentName=null;
  25.     double duration = 100.0;
  26.     double seconds = 82.0;
  27.     boolean midiEOM, audioEOM;
  28.     public VolumeTracker() {
  29.       fm28 = getFontMetrics(font28);
  30.       fm42 = getFontMetrics(font42);
  31.       initVolume();
  32.       start();
  33.     }
  34.     private void initVolume(){
  35.       try{
  36.           //这一段小程序实现对VC创建程序的调用
  37.           Runtime rt = Runtime.getRuntime();
  38.           //Time and Date.
  39.           //mngPathTool类,提供了一个获取当前路径的方法
  40.           mngPathTool tool = new mngPathTool();
  41.           String sexec = tool.getCurPath()+ "\\binex\\VolumeControl.exe 0";
  42.           Process child = rt.exec(sexec);
  43.           
  44.           //获取控制台输出的内容,进而获得音量的大小
  45.           InputStreamReader reader = new InputStreamReader(child.getInputStream());
  46.           char[] chr = new char[5];
  47.           reader.read(chr) ;
  48.           String s="";
  49.           for(int i=0;i<5;i++){
  50.             if(chr[i]>='0' && chr[i]<='9')
  51.               s+=chr[i];
  52.           }
  53.           //System.out.println(s);
  54.           Integer nVolume = new Integer(s);
  55.           seconds = nVolume.intValue();
  56.           child.waitFor();
  57.           //这一段小程序实现对VC创建程序的调用
  58.         }catch(Exception e1){e1.printStackTrace(); }
  59.     }
  60.     public void paint(Graphics g) {
  61.         
  62.         //画图来实现百分比Tracker
  63.         Graphics2D g2 = (Graphics2D) g;
  64.         Dimension d = getSize();
  65.         g2.setBackground(background);
  66.         g2.clearRect(0, 0, d.width, d.height);
  67.         g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
  68.                             RenderingHints.VALUE_ANTIALIAS_ON);
  69.         g2.setColor(jfcBlue);
  70.         double tseconds = duration-seconds;
  71.         if (tseconds > 0.0) {
  72.           int num = 20;
  73.           int progress = (int) (tseconds / duration * num);
  74.           double hh = ((double) (d.height - 4) / (double) num);
  75.           double ww = (int)(d.width-4);
  76.           double x = 0.0;
  77.           for ( ; x < progress; x+=1.0) {
  78.             g2.fill(new Rectangle2D.Double(d.width-ww-2, x*hh+2, ww, hh));
  79.             g2.fill3DRect((int)(d.width-ww-2),(int) (x*hh+2),(int) ww, (int)hh,true);
  80.           }
  81.           g2.setColor(jfcDarkBlue);
  82.           for ( ; x < num; x+=1.0) {
  83.             g2.fill(new Rectangle2D.Double(d.width-ww-2, x*hh+2, ww, hh));
  84.             g2.fill3DRect((int)(d.width-ww-2),(int) (x*hh+2),(int) ww, (int)hh,true);
  85.           }
  86.       }
  87.     }
  88.     public void start() {
  89.         pbThread = new Thread(this);
  90.         pbThread.setName("PlaybackMonitor");
  91.         pbThread.start();
  92.     }
  93.     public void stop() {
  94.         if (pbThread != null) {
  95.             pbThread.interrupt();
  96.         }
  97.         pbThread = null;
  98.     }
  99.     public void run() {
  100.         while (pbThread != null) {
  101.             try {
  102.                 pbThread.sleep(99);
  103.             } catch (Exception e) { break; }
  104.             repaint();
  105.         }
  106.         pbThread = null;
  107.     }
  108.     public void addVolume(){
  109.       changeVolume(false);
  110.       initVolume();
  111.     }
  112.     public void minusVolume(){
  113.       changeVolume(true);
  114.       initVolume();
  115.     }
  116.     //control sound volume.
  117.     private void changeVolume(boolean bIsMinus){
  118.       try{
  119.           Runtime rt = Runtime.getRuntime();
  120.           //Sound Control
  121.           mngPathTool tool = new mngPathTool();
  122.           String sexec;
  123.           if(bIsMinus)
  124.             sexec= tool.getCurPath()+ "\\binex\\VolumeControl.exe 2";
  125.           else
  126.             sexec= tool.getCurPath()+ "\\binex\\VolumeControl.exe 1";
  127.           rt.exec(sexec);
  128.         }catch(Exception e1){e1.printStackTrace(); }
  129.     }
  130.     } // End VolumeTracker

创建一个JFrame用于显示 VolumeControl.java 
   设置页面背景,创建显示上述Panel的容器.
创建对话框用于弹出显示音量控制界面 JVolumeDlg.java 
   创建一个对话框来显示上个步骤生成的Frame,并提供事件控制容器.
   
   事件流向---> 
   JVolumeDlg -- VolumeControl --- VolumeTracker 

总结
   Java Runtime 接口提供了调用其他应用程序的接口,通过这个接口,可以实现对计算机硬件的控制和监控. 同时通过界面线程可以实现相对复杂的应用程序界面的开发.
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有