Volume.exe: การตั้งค่าระดับการควบคุมระดับเสียงโดยใช้ Visual Basic

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 178456 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

Volume.exe คือ แฟ้มบีบอัดเองที่ประกอบด้วยตัวอย่างโครงการ demonstrating วิธีการตั้งค่าระดับระดับเสียงและไมโครโฟนโดยใช้ Visual Basic

ข้อมูลเพิ่มเติม

หลังจากการดาวน์โหลด และเรียกใช้แฟ้มเอง แฟ้มต่อไปนี้จะถูกคัดลอกไปยังไดเรกทอรีโครงการระดับของระดับเสียงบนฮาร์ดไดรฟ์ของคุณ:
  Form1.frm    - the main form in the project
  Module1.bas  - the module containing the function and type declarations.
  Project1.vbp - the project file
  Project1.vbw - the project workspace file
  Readme.txt   - you are currently reading this file.
เมื่อต้องการตั้งค่าระดับไมโครโฟนและไดรฟ์ข้อมูลเหล่านี้จาก Visual Basic ใช้ฟังก์ชัน Windows API ต่อไปนี้:
  • GlobalAlloc - จัดสรรจำนวนไบต์ที่ระบุจากฮีป
  • GlobalLock - ล็อกวัตถุที่มีหน่วยความจำทั้งหมด และการส่งกลับค่าของตัวชี้เพื่อไบต์แรกของบล็อกของหน่วยความจำของวัตถุ ไม่สามารถย้าย หรือถูกยกเลิกบล็อกของหน่วยความจำเกี่ยวข้องกับวัตถุที่มีหน่วยความจำถูกล็อก
  • GlobalFree - เพิ่มวัตถุหน่วยความจำทั้งหมดที่ระบุ และ invalidates ของหมายเลขอ้างอิง
  • mixerClose - ปิดอุปกรณ์ตัวผสมที่ระบุ
  • mixerGetControlDetails - ดึงรายละเอียดเกี่ยวกับตัวควบคุมเดียวที่เกี่ยวข้องกับบรรทัดที่มีเสียง
  • mixerGetDevCaps - queries อุปกรณ์ตัวผสมระบุการตรวจสอบความสามารถในการทำงานของ
  • mixerGetID - ดึงข้อมูลรหัสอุปกรณ์สำหรับอุปกรณ์ตัวผสมที่เกี่ยวข้องกับค่าแฮนเดิลของอุปกรณ์ที่ระบุ
  • mixerGetLineControls - ดึงข้อมูลอย่าง น้อยหนึ่งตัวควบคุมที่เกี่ยวข้องกับบรรทัดที่มีเสียง
  • mixerGetLineInfo - ดึงรายละเอียดเกี่ยวกับบรรทัดหนึ่ง ๆ ของอุปกรณ์ตัวผสม
  • mixerGetNumDevs - ดึงหมายเลขของอุปกรณ์ตัวผสมที่มีอยู่ในระบบ
  • mixerMessage - ส่งข้อความของโปรแกรมควบคุมตัวผสมแบบกำหนดเองโดยตรงไปยังโปรแกรมควบคุมตัวผสม
  • mixerOpen - เปิดอุปกรณ์ตัวผสมที่ระบุ และช่วยให้มั่นใจว่า อุปกรณ์ดังกล่าวจะไม่ถูกเอาออกจนกว่าโปรแกรมประยุกต์ที่ปิดหมายเลขอ้างอิง
  • mixerSetControlDetails - ตั้งค่าคุณสมบัติของตัวควบคุมเดียวที่เกี่ยวข้องกับบรรทัดที่มีเสียง
ส่วนถัดไปแสดงวิธีการสร้างโครงการตัวอย่างที่ใช้ฟังก์ชันเหล่านี้เพื่อตั้งค่าระดับเสียงและไมโครโฟน

สร้างโครงการตัวอย่าง

  1. เริ่มต้นโครงการ EXE มาตรฐานใหม่ใน Visual Basic Form1 จะถูกสร้างขึ้นตามค่าเริ่มต้น
  2. เพิ่มปุ่มคำสั่งที่สอง กล่องข้อความที่สอง และป้ายผนึกที่สองไป Form1
  3. เพิ่มในโมดูลโครงการ โดยปฏิบัติตามขั้นตอนต่อไปนี้:
    1. จากเมนูโครงการ คลิกโมดูลเพิ่ม โมดูลเพิ่มกล่องโต้ตอบปรากฏขึ้น
    2. จากแท็บใหม่ เลือกโมดูล และคลิกตกลง โมดูลใหม่ถูกเพิ่มโครงการของคุณ
  4. คัดลอกรหัสต่อไปนี้ในหน้าต่างรหัสของ Module1:
          Option Explicit
    
          Public Const MMSYSERR_NOERROR = 0
          Public Const MAXPNAMELEN = 32
          Public Const MIXER_LONG_NAME_CHARS = 64
          Public Const MIXER_SHORT_NAME_CHARS = 16
          Public Const MIXER_GETLINEINFOF_COMPONENTTYPE = &H3&
          Public Const MIXER_GETCONTROLDETAILSF_VALUE = &H0&
          Public Const MIXER_GETLINECONTROLSF_ONEBYTYPE = &H2&
          Public Const MIXERLINE_COMPONENTTYPE_DST_FIRST = &H0&
          Public Const MIXERLINE_COMPONENTTYPE_SRC_FIRST = &H1000&
    
          Public Const MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = _
                         (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)
    
          Public Const MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = _
                         (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)
    
          Public Const MIXERLINE_COMPONENTTYPE_SRC_LINE = _
                         (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)
    
          Public Const MIXERCONTROL_CT_CLASS_FADER = &H50000000
          Public Const MIXERCONTROL_CT_UNITS_UNSIGNED = &H30000
    
          Public Const MIXERCONTROL_CONTROLTYPE_FADER = _
                         (MIXERCONTROL_CT_CLASS_FADER Or _
                         MIXERCONTROL_CT_UNITS_UNSIGNED)
    
          Public Const MIXERCONTROL_CONTROLTYPE_VOLUME = _
                         (MIXERCONTROL_CONTROLTYPE_FADER + 1)
    
          Declare Function mixerClose Lib "winmm.dll" _
                         (ByVal hmx As Long) As Long
    
          Declare Function mixerGetControlDetails Lib "winmm.dll" _
                         Alias "mixerGetControlDetailsA" _
                         (ByVal hmxobj As Long, _
                         pmxcd As MIXERCONTROLDETAILS, _
                         ByVal fdwDetails As Long) As Long
    
          Declare Function mixerGetDevCaps Lib "winmm.dll" _
                         Alias "mixerGetDevCapsA" _
                         (ByVal uMxId As Long, _
                         ByVal pmxcaps As MIXERCAPS, _
                         ByVal cbmxcaps As Long) As Long
    
          Declare Function mixerGetID Lib "winmm.dll" _
                         (ByVal hmxobj As Long, _
                         pumxID As Long, _
                         ByVal fdwId As Long) As Long
    
          Declare Function mixerGetLineControls Lib "winmm.dll" _
                         Alias "mixerGetLineControlsA" _
                         (ByVal hmxobj As Long, _
                         pmxlc As MIXERLINECONTROLS, _
                         ByVal fdwControls As Long) As Long
    
          Declare Function mixerGetLineInfo Lib "winmm.dll" _
                         Alias "mixerGetLineInfoA" _
                         (ByVal hmxobj As Long, _
                         pmxl As MIXERLINE, _
                         ByVal fdwInfo As Long) As Long
    
          Declare Function mixerGetNumDevs Lib "winmm.dll" () As Long
    
          Declare Function mixerMessage Lib "winmm.dll" _
                         (ByVal hmx As Long, _
                         ByVal uMsg As Long, _
                         ByVal dwParam1 As Long, _
                         ByVal dwParam2 As Long) As Long
    
          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
    
          Declare Function mixerSetControlDetails Lib "winmm.dll" _
                         (ByVal hmxobj As Long, _
                         pmxcd As MIXERCONTROLDETAILS, _
                         ByVal fdwDetails As Long) As Long
    
          Declare Sub CopyStructFromPtr Lib "kernel32" _
                         Alias "RtlMoveMemory" _
                         (struct As Any, _
                         ByVal ptr As Long, _
                         ByVal cb As Long)
    
          Declare Sub CopyPtrFromStruct Lib "kernel32" _
                         Alias "RtlMoveMemory" _
                         (ByVal ptr As Long, _
                         struct As Any, _
                         ByVal cb As Long)
    
          Declare Function GlobalAlloc Lib "kernel32" _
                         (ByVal wFlags As Long, _
                         ByVal dwBytes As Long) As Long
    
          Declare Function GlobalLock Lib "kernel32" _
                         (ByVal hmem As Long) As Long
    
          Declare Function GlobalFree Lib "kernel32" _
                         (ByVal hmem As Long) As Long
    
          Type MIXERCAPS
             wMid As Integer                   '  manufacturer id
             wPid As Integer                   '  product id
             vDriverVersion As Long            '  version of the driver
             szPname As String * MAXPNAMELEN   '  product name
             fdwSupport As Long                '  misc. support bits
             cDestinations As Long             '  count of destinations
          End Type
    
          Type MIXERCONTROL
             cbStruct As Long           '  size in Byte of MIXERCONTROL
             dwControlID As Long        '  unique control id for mixer device
             dwControlType As Long      '  MIXERCONTROL_CONTROLTYPE_xxx
             fdwControl As Long         '  MIXERCONTROL_CONTROLF_xxx
             cMultipleItems As Long     '  if MIXERCONTROL_CONTROLF_MULTIPLE
                                        '  set
             szShortName As String * MIXER_SHORT_NAME_CHARS  ' short name of
                                                             ' control
             szName As String * MIXER_LONG_NAME_CHARS        ' long name of
                                                             ' control
             lMinimum As Long           '  Minimum value
             lMaximum As Long           '  Maximum value
             reserved(10) As Long       '  reserved structure space
             End Type
    
          Type MIXERCONTROLDETAILS
             cbStruct As Long       '  size in Byte of MIXERCONTROLDETAILS
             dwControlID As Long    '  control id to get/set details on
             cChannels As Long      '  number of channels in paDetails array
             item As Long           '  hwndOwner or cMultipleItems
             cbDetails As Long      '  size of _one_ details_XX struct
             paDetails As Long      '  pointer to array of details_XX structs
          End Type
    
          Type MIXERCONTROLDETAILS_UNSIGNED
             dwValue As Long        '  value of the control
          End Type
    
          Type MIXERLINE
             cbStruct As Long               '  size of MIXERLINE structure
             dwDestination As Long          '  zero based destination index
             dwSource As Long               '  zero based source index (if
                                            '  source)
             dwLineID As Long               '  unique line id for mixer device
             fdwLine As Long                '  state/information about line
             dwUser As Long                 '  driver specific information
             dwComponentType As Long        '  component type line connects to
             cChannels As Long              '  number of channels line supports
             cConnections As Long           '  number of connections (possible)
             cControls As Long              '  number of controls at this line
             szShortName As String * MIXER_SHORT_NAME_CHARS
             szName As String * MIXER_LONG_NAME_CHARS
             dwType As Long
             dwDeviceID As Long
             wMid  As Integer
             wPid As Integer
             vDriverVersion As Long
             szPname As String * MAXPNAMELEN
          End Type
    
          Type MIXERLINECONTROLS
             cbStruct As Long       '  size in Byte of MIXERLINECONTROLS
             dwLineID As Long       '  line id (from MIXERLINE.dwLineID)
                                    '  MIXER_GETLINECONTROLSF_ONEBYID or
             dwControl As Long      '  MIXER_GETLINECONTROLSF_ONEBYTYPE
             cControls As Long      '  count of controls pmxctrl points to
             cbmxctrl As Long       '  size in Byte of _one_ MIXERCONTROL
             pamxctrl As Long       '  pointer to first MIXERCONTROL array
          End Type
    
          Function GetVolumeControl(ByVal hmixer As Long, _
                                  ByVal componentType As Long, _
                                  ByVal ctrlType As Long, _
                                  ByRef mxc As MIXERCONTROL) As Boolean
    
          ' This function attempts to obtain a mixer control.
          ' Returns True if successful.
             Dim mxlc As MIXERLINECONTROLS
             Dim mxl As MIXERLINE
             Dim hmem As Long
             Dim rc As Long
    
             mxl.cbStruct = Len(mxl)
             mxl.dwComponentType = componentType
    
             ' Obtain a line corresponding to the component type
             rc = mixerGetLineInfo(hmixer, _
                                   mxl, _
                                   MIXER_GETLINEINFOF_COMPONENTTYPE)
    
             If (MMSYSERR_NOERROR = rc) Then
                 mxlc.cbStruct = Len(mxlc)
                 mxlc.dwLineID = mxl.dwLineID
                 mxlc.dwControl = ctrlType
                 mxlc.cControls = 1
                 mxlc.cbmxctrl = Len(mxc)
    
                 ' Allocate a buffer for the control
                 hmem = GlobalAlloc(&H40, Len(mxc))
                 mxlc.pamxctrl = GlobalLock(hmem)
                 mxc.cbStruct = Len(mxc)
    
                 ' Get the control
                 rc = mixerGetLineControls(hmixer, _
                                           mxlc, _
                                           MIXER_GETLINECONTROLSF_ONEBYTYPE)
    
                 If (MMSYSERR_NOERROR = rc) Then
                     GetVolumeControl = True
    
                     ' Copy the control into the destination structure
                     CopyStructFromPtr mxc, mxlc.pamxctrl, Len(mxc)
                 Else
                     GetVolumeControl = False
                 End If
                 GlobalFree (hmem)
                 Exit Function
             End If
    
             GetVolumeControl = False
          End Function
    
          Function SetVolumeControl(ByVal hmixer As Long, _
                                  mxc As MIXERCONTROL, _
                                  ByVal volume As Long) As Boolean
          ' This function sets the value for a volume control.
          ' Returns True if successful
    
             Dim mxcd As MIXERCONTROLDETAILS
             Dim vol As MIXERCONTROLDETAILS_UNSIGNED
    
             mxcd.item = 0
             mxcd.dwControlID = mxc.dwControlID
             mxcd.cbStruct = Len(mxcd)
             mxcd.cbDetails = Len(vol)
    
             ' Allocate a buffer for the control value buffer
             hmem = GlobalAlloc(&H40, Len(vol))
             mxcd.paDetails = GlobalLock(hmem)
             mxcd.cChannels = 1
             vol.dwValue = volume
    
             ' Copy the data into the control value buffer
             CopyPtrFromStruct mxcd.paDetails, vol, Len(vol)
    
             ' Set the control value
             rc = mixerSetControlDetails(hmixer, _
                                        mxcd, _
                                        MIXER_SETCONTROLDETAILSF_VALUE)
    
             GlobalFree (hmem)
             If (MMSYSERR_NOERROR = rc) Then
                 SetVolumeControl = True
             Else
                 SetVolumeControl = False
             End If
          End Function
    
  5. คัดลอกรหัสต่อไปนี้ในหน้าต่างรหัสของ Form1:
          Option Explicit
    
          Dim hmixer As Long          ' mixer handle
          Dim volCtrl As MIXERCONTROL ' waveout volume control
          Dim micCtrl As MIXERCONTROL ' microphone volume control
          Dim rc As Long              ' return code
          Dim ok As Boolean           ' boolean return code
          Dim vol As Long             ' volume  
    
          Private Sub Form_Load()
          ' Open the mixer with deviceID 0.
             rc = mixerOpen(hmixer, 0, 0, 0, 0)
             If ((MMSYSERR_NOERROR <> rc)) Then
                 MsgBox "Couldn't open the mixer."
                 Exit Sub
                 End If
    
             ' Get the waveout volume control
             ok = GetVolumeControl(hmixer, _
                                  MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, _
                                  MIXERCONTROL_CONTROLTYPE_VOLUME, _
                                  volCtrl)
             If (ok = True) Then
                 ' If the function successfully gets the volume control,
                 ' the maximum and minimum values are specified by
                 ' lMaximum and lMinimum
                 Label1.Caption = volCtrl.lMinimum _
                                  & " to " _
                                  & volCtrl.lMaximum
                 End If
    
             ' Get the microphone volume control
             ok = GetVolumeControl(hmixer, _
                                  MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, _
                                  MIXERCONTROL_CONTROLTYPE_VOLUME, _
                                  micCtrl)
             If (ok = True) Then
                 Label2.Caption = micCtrl.lMinimum _
                                  & " to " _
                                  & micCtrl.lMaximum
                 End If
          End Sub
    
          Private Sub Command1_Click()
             vol = CLng(Text1.Text)
             SetVolumeControl hmixer, volCtrl, vol
          End Sub
    
          Private Sub Command2_Click()
             vol = CLng(Text2.Text)
             SetVolumeControl hmixer, micCtrl, vol
          End Sub
  6. บนเมนู Run คลิกเริ่มต้น หรือกดแป้น F5 เพื่อเริ่มการทำงานของโปรแกรม คุณสามารถย่อเล็กสุด IDE Visual Basic เพื่อทั้งหมดที่ปรากฏบนจอแสดงผลของคุณคือ Form1 เพิ่มระดับเสียงโปรแกรมในแถบงาน จัดเรียง Form1 และโปรแกรมระดับเสียงเพื่อให้โปรแกรมทั้งสองจะมองเห็นได้
  7. ใส่ค่าระหว่างค่าน้อยที่สุด และสูงสุดที่แสดงในกล่องข้อความหนึ่ง หรือทั้งสอง และคลิกที่ปุ่มคำสั่งใน Form1 อย่างใดอย่างหนึ่ง โปรดสังเกตว่า มีการปรับปรุงแถบเลื่อนที่สอดคล้องกันในโปรแกรมระดับเสียงไปยังระดับที่มีการระบุของคุณ
(c) Microsoft Corporation 1997 สิทธิ์ทั้งหมดที่สำรองไว้
contributions โดย Arsenio Locsin, Microsoft Corporation

คุณสมบัติ

หมายเลขบทความ (Article ID): 178456 - รีวิวครั้งสุดท้าย: 7 มกราคม 2554 - Revision: 3.0
ใช้กับ
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Professional Edition
Keywords: 
kbdownload kbfile kbhowto kbsample kbsound kbmt KB178456 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:178456

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com