登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 | 信息 | 空间 | VB | VC | Delphi | Java | Flash | 补丁 | 控件 | 安全 | 黑客 | 电子书 | 笔记本 | 手机 | MP3 | 杀毒 | QQ群 | 产品库 | 分类信息 | 编程网站
  立华软件园 - Visual Basic 专区 - 技术文档 - 系统控制 技术文章 | VB源代码 | 电子图书 | VB网站 | 相关下载 | 在线论坛 | QQ群组 | 搜索   
 VB技术文档
  · 窗体界面
  · 系统控制
  · VB.Net
  · 多媒体
  · 网络编程
  · API函数
  · 游戏编程
  · 数据报表
  · 其他文档
 VB源代码
  · 窗体界面
  · 文件目录
  · 多媒体
  · 网络编程
  · 系统API
  · 数据报表
  · 游戏编程
  · VBA办公
  · 其他代码
 VB论坛
  · Visual Basic 讨论区
  · VB.Net 讨论区
  · VB数据库开发讨论区
  · VB系统API讨论区
 其他VB资源
  · VB下载资源
  · VB电子图书
  · VB QQ群组讨论区
  · VB 其他网站资源




如何控制系统音量
发表日期:2002-12-08作者:[] 出处:  

'thanks to Rick Ratayczak of Future Works Media (rickr@execpc.com)

'save file and rename them to [name].BAS

Attribute VB_Name = "MIXER"

'****************************************************************************

'* This constant holds the value of the Highest Custom volume setting. The *

'* lowest value will always be zero. *

'****************************************************************************

Public Const HIGHEST_VOLUME_SETTING = 12

'Put these into a module

' device ID for aux device mapper

Public Const AUX_MAPPER = -1&

Public Const MAXPNAMELEN = 32

Type AUXCAPS

wMid As Integer

wPid As Integer

vDriverVersion As Long

szPname As String * MAXPNAMELEN

wTechnology As Integer

dwSupport As Long

End Type

' flags for wTechnology field in AUXCAPS structure

Public Const AUXCAPS_CDAUDIO = 1 ' audio from internal CD-ROM drive

Public Const AUXCAPS_AUXIN = 2 ' audio from auxiliary input jacks

' flags for dwSupport field in AUXCAPS structure

Public Const AUXCAPS_VOLUME = &H1 ' supports volume control

Public Const AUXCAPS_LRVOLUME = &H2 ' separate left-right volume control

Declare Function auxGetNumDevs Lib "winmm.dll" () As Long

Declare Function auxGetDevCaps Lib "winmm.dll" Alias "auxGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As AUXCAPS, ByVal uSize As Long) As Long

Declare Function auxSetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, ByVal dwVolume As Long) As Long

Declare Function auxGetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, ByRef lpdwVolume As Long) As Long

Declare Function auxOutMessage Lib "winmm.dll" (ByVal uDeviceID As Long, ByVal msg As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long

'****************************************************************************

'* Possible Return values from auxGetVolume, auxSetVolume *

'****************************************************************************

Public Const MMSYSERR_NOERROR = 0

Public Const MMSYSERR_BASE = 0

Public Const MMSYSERR_BADDEVICEID = (MMSYSERR_BASE + 2)

'****************************************************************************

'* Use the CopyMemory function from the Windows API *

'****************************************************************************

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)

'****************************************************************************

'* Use this structure to break the Long into two Integers *

'****************************************************************************

Public Type VolumeSetting

LeftVol As Integer

RightVol As Integer

End Type

Sub lCrossFader()

'Vol1 = 100 - Slider1.Value ' Left

'Vol2 = 100 - Slider5.Value ' Right

'E = CrossFader.Value

'F = 100 - E

'If Check4.Value = 1 Then ' Half Fader Check

' LVol = (F * Val(Vol1) / 100) * 2

' RVol = (E * Val(Vol2) / 100) * 2

' If LVol > (50 * Val(Vol1) / 100) * 2 Then

' LVol = (50 * Val(Vol1) / 100) * 2

' End If

' If RVol > (50 * Val(Vol2) / 100) * 2 Then

' RVol = (50 * Val(Vol2) / 100) * 2

' End If

'Else

' LVol = (F * Val(Vol1) / 100)

' RVol = (E * Val(Vol2) / 100)

'End If

'Label1.Caption = "Fader: " + LTrim$(Str$(LVol)) + " x " + LTrim$(Str$(RVol))

'

End Sub

Public Function lSetVolume(ByRef lLeftVol As Long, ByRef lRightVol As Long, lDeviceID As Long) As Long

'****************************************************************************

'* This function sets the current Windows volume settings to the specified *

'* device using two Custom numbers from 0 to HIGHEST_VOLUME_SETTING for the *

'* right and left volume settings. *

'* *

'* The return value of this function is the Return value of the auxGetVolume*

'* Windows API call. *

'****************************************************************************

Dim bReturnValue As Boolean ' Return Value from Function

Dim Volume As VolumeSetting ' Type structure used to convert a long to/from

' two Integers.

Dim lAPIReturnVal As Long ' Return value from API Call

Dim lBothVolumes As Long ' The API passed value of the Combined Volumes

'****************************************************************************

'* Calculate the Integers *

'****************************************************************************

Volume.LeftVol = nSigned(lLeftVol * 65535 / HIGHEST_VOLUME_SETTING)

Volume.RightVol = nSigned(lRightVol * 65535 / HIGHEST_VOLUME_SETTING)

'****************************************************************************

'* Combine the Integers into a Long to be Passed to the API *

'****************************************************************************

lDataLen = Len(Volume)

CopyMemory lBothVolumes, Volume.LeftVol, lDataLen

'****************************************************************************

'* Set the Value to the API *

'****************************************************************************

lAPIReturnVal = auxSetVolume(lDeviceID, lBothVolumes)

lSetVolume = lAPIReturnVal

End Function

Public Function lGetVolume(ByRef lLeftVol As Long, ByRef lRightVol As Long, lDeviceID As Long) As Long

'****************************************************************************

'* This function reads the current Windows volume settings from the *

'* specified device, and returns two numbers from 0 to *

'* HIGHEST_VOLUME_SETTING for the right and left volume settings. *

'* *

'* The return value of this function is the Return value of the auxGetVolume*

'* Windows API call. *

'****************************************************************************

Dim bReturnValue As Boolean ' Return Value from Function

Dim Volume As VolumeSetting ' Type structure used to convert a long to/from

' two Integers.

Dim lAPIReturnVal As Long ' Return value from API Call

Dim lBothVolumes As Long ' The API Return of the Combined Volumes

'****************************************************************************

'* Get the Value from the API *

'****************************************************************************

lAPIReturnVal = auxGetVolume(lDeviceID, lBothVolumes)

'****************************************************************************

'* Split the Long value returned from the API into to Integers *

'****************************************************************************

lDataLen = Len(Volume)

CopyMemory Volume.LeftVol, lBothVolumes, lDataLen

'****************************************************************************

'* Calculate the Return Values. *

'****************************************************************************

lLeftVol = HIGHEST_VOLUME_SETTING * lUnsigned(Volume.LeftVol) / 65535

lRightVol = HIGHEST_VOLUME_SETTING * lUnsigned(Volume.RightVol) / 65535

lGetVolume = lAPIReturnVal

End Function

Public Function nSigned(ByVal lUnsignedInt As Long) As Integer

Dim nReturnVal As Integer ' Return value from Function

If lUnsignedInt > 65535 Or lUnsignedInt < 0 Then

MsgBox "Error in conversion from Unsigned to nSigned Integer"

nSignedInt = 0

Exit Function

End If

If lUnsignedInt > 32767 Then

nReturnVal = lUnsignedInt - 65536

Else

nReturnVal = lUnsignedInt

End If

nSigned = nReturnVal

End Function

Public Function lUnsigned(ByVal nSignedInt As Integer) As Long

Dim lReturnVal As Long ' Return value from Function

If nSignedInt < 0 Then

lReturnVal = nSignedInt + 65536

Else

lReturnVal = nSignedInt

End If

If lReturnVal > 65535 Or lReturnVal < 0 Then

MsgBox "Error in conversion from nSigned to Unsigned Integer"

lReturnVal = 0

End If

lUnsigned = lReturnVal

End Function

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 如何控制系统音量

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00218