新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     >>W3CHINA.ORG讨论区<<     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL计算机技术与应用『 Java/Eclipse 』 → 在Java中调用exe实现对计算机音量的控制 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 5057 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 在Java中调用exe实现对计算机音量的控制 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Java/Eclipse 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 在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
      实现原理如下:
        使用一个线程动态刷新页面,主线程用来实现对音量的控制.其实现代码如下:
        
        

        import java.awt.*;
        import java.awt.font.*;
        import java.awt.geom.*;
        import java.awt.event.*;
        import java.text.java/text/AttributedString.java.html" target="_blank">AttributedString;
        import java.text.java/text/AttributedCharacterIterator.java.html" target="_blank">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 java/lang/Runnable.java.html" target="_blank">Runnable {
        java/lang/String.java.html" target="_blank">String welcomeStr = "Welcome to Java Sound";
        java/lang/Thread.java.html" target="_blank">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;
        java/lang/String.java.html" target="_blank">String errStr=null;
        java/lang/String.java.html" target="_blank">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创建程序的调用
              java/lang/Runtime.java.html" target="_blank">Runtime rt = java/lang/Runtime.java.html" target="_blank">Runtime.getRuntime();
              //Time and Date.
              //mngPathTool类,提供了一个获取当前路径的方法
              mngPathTool tool = new mngPathTool();
              java/lang/String.java.html" target="_blank">String sexec = tool.getCurPath()+ "\\binex\\VolumeControl.exe 0";
              java/lang/Process.java.html" target="_blank">Process child = rt.exec(sexec);
              
              //获取控制台输出的内容,进而获得音量的大小
              InputStreamReader reader = new InputStreamReader(child.getInputStream());
              char[] chr = new char[5];
              reader.read(chr) ;
              java/lang/String.java.html" target="_blank">String s="";
              for(int i=0;i<5;i++){
                if(chr[i]>='0' && chr[i]<='9')
                  s+=chr[i];
              }
              //System.out.println(s);
              java/lang/Integer.java.html" target="_blank">Integer nVolume = new java/lang/Integer.java.html" target="_blank">Integer(s);
              seconds = nVolume.intValue();
              child.waitFor();
              //这一段小程序实现对VC创建程序的调用
            }catch(java/lang/Exception.java.html" target="_blank">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 java/lang/Thread.java.html" target="_blank">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 (java/lang/Exception.java.html" target="_blank">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{
              java/lang/Runtime.java.html" target="_blank">Runtime rt = java/lang/Runtime.java.html" target="_blank">Runtime.getRuntime();
              //Sound Control
              mngPathTool tool = new mngPathTool();
              java/lang/String.java.html" target="_blank">String sexec;
              if(bIsMinus)
                sexec= tool.getCurPath()+ "\\binex\\VolumeControl.exe 2";
              else
                sexec= tool.getCurPath()+ "\\binex\\VolumeControl.exe 1";
              rt.exec(sexec);
            }catch(java/lang/Exception.java.html" target="_blank">Exception e1){e1.printStackTrace(); }
        }

        } // End VolumeTracker

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

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


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/9/7 16:36:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/20 21:15:17

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    54.688ms