找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
請尊重及感激所有版主付出和奉獻感激所有對伊莉作出奉獻的人安全提問(回答) 和 永久尊貴會員 事宜
蘿莉催眠officegdrpg
國中錦繡小食きょくち3dぼたもち幸乃下蛍職場狂想

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[繁]魔法科高中的劣等

[繁]轉生為第七王子,

女子搧別人耳光的後果

[繁]老夫老妻重返青春

[繁]無職轉生 第二季1

(4月新番)[簡]被稱為
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 3556|回復: 0
打印上一主題下一主題

[轉載]可以命令方式控制系統音量[複製鏈接]

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

帖子
70
積分
1000 點
潛水值
14348 米
跳轉到指定樓層
樓主
發表於 2007-5-1 10:38 PM|只看該作者|倒序瀏覽
  1. Attribute VB_Name = "Module1"
  2. ' Mixer Code provided by GivenRandy
  3. ' He kewl.
  4. ' The dos console stuff provided by gridrun [TNC]
  5. ' He kewl.
  6. ' I did command line parsing stuff. :)

  7. Dim hMixer As Long
  8. Dim VolCtrl As MIXERCONTROL
  9. Dim hMem As Long
  10. Dim Mxlc As MIXERLINECONTROLS
  11. Dim Mxl As MIXERLINE
  12. Dim Mxcd As MIXERCONTROLDETAILS
  13. Dim Vol As MIXERCONTROLDETAILS_UNSIGNED
  14. Const MMSYSERR_NOERROR = 0
  15. Const MAXPNAMELEN = 32
  16. Const MIXER_LONG_NAME_CHARS = 64
  17. Const MIXER_SHORT_NAME_CHARS = 16
  18. Const MIXER_GETLINEINFOF_COMPONENTTYPE = &H3&
  19. Const MIXER_SETCONTROLDETAILSF_VALUE = &H0&
  20. Const MIXER_GETLINECONTROLSF_ONEBYTYPE = &H2&
  21. Const MIXERLINE_COMPONENTTYPE_DST_FIRST = &H0&
  22. Const MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)
  23. Const MIXERCONTROL_CT_CLASS_FADER = &H50000000
  24. Const MIXERCONTROL_CT_UNITS_UNSIGNED = &H30000
  25. Const MIXERCONTROL_CONTROLTYPE_FADER = (MIXERCONTROL_CT_CLASS_FADER Or MIXERCONTROL_CT_UNITS_UNSIGNED)
  26. Const MIXERCONTROL_CONTROLTYPE_VOLUME = (MIXERCONTROL_CONTROLTYPE_FADER + 1)
  27. Private Type MIXERCONTROLDETAILS
  28.    cbStruct    As Long
  29.    dwControlID As Long
  30.    cChannels   As Long
  31.    item        As Long
  32.    cbDetails   As Long
  33.    paDetails   As Long
  34. End Type
  35. Private Type MIXERCONTROLDETAILS_UNSIGNED
  36.    dwValue As Long
  37. End Type
  38. Private Type MIXERCONTROL
  39.    cbStruct       As Long
  40.    dwControlID    As Long
  41.    dwControlType  As Long
  42.    fdwControl     As Long
  43.    cMultipleItems As Long
  44.    szShortName    As String * MIXER_SHORT_NAME_CHARS
  45.    szName         As String * MIXER_LONG_NAME_CHARS
  46.    lMinimum       As Long
  47.    lMaximum       As Long
  48.    reserved(10)   As Long
  49. End Type
  50. Private Type MIXERLINECONTROLS
  51.    cbStruct  As Long
  52.    dwLineID  As Long
  53.    dwControl As Long
  54.    cControls As Long
  55.    cbmxctrl  As Long
  56.    pamxctrl  As Long
  57. End Type
  58. Private Type MIXERLINE
  59.    cbStruct        As Long
  60.    dwDestination   As Long
  61.    dwSource        As Long
  62.    dwLineID        As Long
  63.    fdwLine         As Long
  64.    dwUser          As Long
  65.    dwComponentType As Long
  66.    cChannels       As Long
  67.    cConnections    As Long
  68.    cControls       As Long
  69.    szShortName     As String * MIXER_SHORT_NAME_CHARS
  70.    szName          As String * MIXER_LONG_NAME_CHARS
  71.    dwType          As Long
  72.    dwDeviceID      As Long
  73.    wMid            As Integer
  74.    wPid            As Integer
  75.    vDriverVersion  As Long
  76.    szPname         As String * MAXPNAMELEN
  77. End Type
  78. Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
  79. Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
  80. Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
  81. Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
  82. Private Declare Sub CopyPtrFromStruct Lib "kernel32" Alias "RtlMoveMemory" (ByVal ptr As Long, struct As Any, ByVal cb As Long)
  83. Private Declare Sub CopyStructFromPtr Lib "kernel32" Alias "RtlMoveMemory" (struct As Any, ByVal ptr As Long, ByVal cb As Long)
  84. Private Declare Function mixerOpen Lib "winmm.dll" (phmx As Long, ByVal uMxId As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal fdwOpen As Long) As Long
  85. Private Declare Function mixerSetControlDetails Lib "winmm.dll" (ByVal hmxobj As Long, pmxcd As MIXERCONTROLDETAILS, ByVal fdwDetails As Long) As Long
  86. Private Declare Function mixerGetLineInfo Lib "winmm.dll" Alias "mixerGetLineInfoA" (ByVal hmxobj As Long, pmxl As MIXERLINE, ByVal fdwInfo As Long) As Long
  87. Private Declare Function mixerGetLineControls Lib "winmm.dll" Alias "mixerGetLineControlsA" (ByVal hmxobj As Long, pmxlc As MIXERLINECONTROLS, ByVal fdwControls As Long) As Long
  88. Sub Main()
  89.    ConAcquire
  90.    
  91.    If Command$ = "" Or InStr(1, Command$, "/?") > 0 Then
  92.    ConPrint "To use just type in " & App.EXEName & " n"
  93.    ConPrint "n is a number between 0 and 100"
  94.    'MsgBox "hey"
  95.    End
  96.    End If
  97.    
  98.    Dim Newvolume As Long
  99.    
  100.    Newvolume = CLng(Command$)
  101.    
  102.    If (mixerOpen(hMixer, 0, 0, 0, 0) <> MMSYSERR_NOERROR) Then
  103.        ConPrint "Could not open the mixer. Type /? for help."
  104.        ConPrint "Sorry no fix for this...."
  105.     '   MsgBox "hey"
  106.        Exit Sub
  107.    End If
  108.    Dim Max As Long
  109.    Dim Min As Long
  110.    
  111.    
  112.    If (fGetVolumeControl(hMixer, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, MIXERCONTROL_CONTROLTYPE_VOLUME, VolCtrl)) Then
  113.        Max = VolCtrl.lMinimum
  114.        Min = VolCtrl.lMaximum \ 2
  115.             
  116.    End If
  117.    mciSendString "open cdaudio", 0, 0, hWnd
  118.    
  119.    fSetVolumeControl hMixer, VolCtrl, CLng(Min * Newvolume / 100 * 2)
  120.    mciSendString "close all", 0, 0, hWnd
  121.     ConPrint
  122.     ConPrint "Volume Set to " & Newvolume & "%"
  123. 'ConRelease
  124. End
  125. End Sub
  126. Private Sub Form_Unload(Cancel As Integer)
  127. End Sub
  128. Private Sub VScroll1_Change()
  129.    fSetVolumeControl hMixer, VolCtrl, CLng(VScroll1.Value) * 2
  130. End Sub
  131. Private Sub VScroll1_Scroll()
  132.    fSetVolumeControl hMixer, VolCtrl, CLng(VScroll1.Value) * 2
  133. End Sub
  134. Private Sub fSetVolumeControl(ByVal hMixer As Long, Mxc As MIXERCONTROL, ByVal Volume As Long)
  135.    Mxcd.item = 0
  136.    Mxcd.dwControlID = Mxc.dwControlID
  137.    Mxcd.cbStruct = Len(Mxcd)
  138.    Mxcd.cbDetails = Len(Vol)
  139.    hMem = GlobalAlloc(&H40, Len(Vol))
  140.    Mxcd.paDetails = GlobalLock(hMem)
  141.    Mxcd.cChannels = 1
  142.    Vol.dwValue = Volume
  143.    CopyPtrFromStruct Mxcd.paDetails, Vol, Len(Vol)
  144.    mixerSetControlDetails hMixer, Mxcd, MIXER_SETCONTROLDETAILSF_VALUE
  145.    Call GlobalFree(hMem)
  146. End Sub
  147. Private Function fGetVolumeControl(ByVal hMixer As Long, ByVal componentType As Long, ByVal ctrlType As Long, ByRef Mxc As MIXERCONTROL) As Boolean
  148.    Mxl.cbStruct = Len(Mxl)
  149.    Mxl.dwComponentType = componentType
  150.    If (mixerGetLineInfo(hMixer, Mxl, MIXER_GETLINEINFOF_COMPONENTTYPE) = MMSYSERR_NOERROR) Then
  151.        Mxlc.cbStruct = Len(Mxlc)
  152.        Mxlc.dwLineID = Mxl.dwLineID
  153.        Mxlc.dwControl = ctrlType
  154.        Mxlc.cControls = 1
  155.        Mxlc.cbmxctrl = Len(Mxc)
  156.        hMem = GlobalAlloc(&H40, Len(Mxc))
  157.        Mxlc.pamxctrl = GlobalLock(hMem)
  158.        Mxc.cbStruct = Len(Mxc)
  159.        If (mixerGetLineControls(hMixer, Mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE) = MMSYSERR_NOERROR) Then
  160.            fGetVolumeControl = True
  161.            Call CopyStructFromPtr(Mxc, Mxlc.pamxctrl, Len(Mxc))
  162.        Else
  163.            fGetVolumeControl = False
  164.        End If
  165.        Call GlobalFree(hMem)
  166.        Exit Function
  167.    End If
  168.    fGetVolumeControl = False
  169. End Function
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
分享分享0收藏收藏0支持支持0
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部