Volume.exe: Ορισμός επίπεδα ελέγχου έντασης χρησιμοποιώντας τη Visual Basic

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 178456 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Volume.exe είναι ένα συμπιεσμένο αρχείο αυτόματης εξαγωγής που περιέχει Δείγμα έργου που παρουσιάζει πώς μπορείτε να ρυθμίσετε τα επίπεδα έντασης και μικρόφωνο χρησιμοποιώντας τη 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, χρησιμοποιήστε τις ακόλουθες συναρτήσεις API των Windows:
  • GlobalAlloc - εκχωρεί τον αριθμό των byte που καθορίζεται από το σωρό.
  • GlobalLock - κλειδώνει ένα αντικείμενο καθολική μνήμη και επιστρέφει ένα δείκτη για το πρώτο byte ενός μπλοκ μνήμης του αντικειμένου. Το μπλοκ μνήμης που σχετίζεται με ένα αντικείμενο κλειδωμένα μνήμης δεν μπορούν να μετακινηθούν ή να απορριφθεί.
  • GlobalFree - ελευθερώνει το αντικείμενο του καθορισμένου καθολική μνήμη και ακυρώνει τη λαβή.
  • mixerClose - κλείνει τη συσκευή μείκτη που καθορίστηκε.
  • mixerGetControlDetails - ανακτά τις λεπτομέρειες σχετικά με ένα μεμονωμένο στοιχείο ελέγχου που σχετίζεται με μια γραμμή ήχου.
  • mixerGetDevCaps - υποβάλλει ερώτημα για μια συσκευή μείκτη καθορισμένο για να προσδιορίσετε τις δυνατότητές του.
  • mixerGetID - ανακτά το αναγνωριστικό συσκευής για μια συσκευή μείκτη που σχετίζονται με ένα δείκτη χειρισμού της συγκεκριμένης συσκευής.
  • mixerGetLineControls - ανακτά ένα ή περισσότερα στοιχεία ελέγχου που σχετίζεται με μια γραμμή ήχου.
  • mixerGetLineInfo - ανακτά πληροφορίες σχετικά με μια συγκεκριμένη γραμμή μιας συσκευής μείκτη.
  • mixerGetNumDevs - ανακτά τις συσκευές μείξης που υπάρχει στο σύστημα.
  • mixerMessage - στέλνει ένα μήνυμα προγράμματος οδήγησης προσαρμοσμένο μείκτη απευθείας σε ένα πρόγραμμα οδήγησης μείκτη.
  • mixerOpen - ανοίγει μια συσκευή μείκτη καθορισμένο και εξασφαλίζει ότι η συσκευή δεν θα καταργηθούν μέχρι η εφαρμογή κλείνει τη λαβή.
  • mixerSetControlDetails - ορίζει τις ιδιότητες για ένα μεμονωμένο στοιχείο ελέγχου που σχετίζεται με μια γραμμή ήχου.
Στην επόμενη ενότητα περιγράφει τον τρόπο δημιουργίας ενός έργου δείγμα που χρησιμοποιεί αυτές τις συναρτήσεις για να ρυθμίσετε τα επίπεδα έντασης και μικρόφωνο.

Δημιουργήστε το δείγμα έργου

  1. Ξεκινήστε ένα νέο έργο Standard EXE στη Visual Basic. Φόρμα1 δημιουργείται από προεπιλογή.
  2. Προσθέσετε δύο κουμπιά εντολών, δύο πλαίσια κειμένου και οι δύο ετικέτες Φόρμα1.
  3. Προσθέστε μια λειτουργική μονάδα στο έργο, ακολουθώντας τα εξής βήματα:
    1. Από το μενού ' έργο ', κάντε κλικ στο κουμπί Προσθήκη λειτουργικής μονάδας. Η λειτουργική μονάδα προσθήκης εμφανίζεται το παράθυρο διαλόγου.
    2. Από την καρτέλα "Δημιουργία", επιλέξτε τη λειτουργική μονάδα και κάντε κλικ στο κουμπί OK. Προστίθεται μια νέα λειτουργική μονάδα κλάσης στο έργο σας.
  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. Αντιγράψτε τον ακόλουθο κώδικα στο παράθυρο κώδικα της Φόρμα1:
          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. Από το μενού "Εκτέλεση", κάντε κλικ στο μενού Έναρξη ή πιέστε το πλήκτρο F5 για να ξεκινήσετε το πρόγραμμα. Έτσι, το μόνο που εμφανίζεται στην οθόνη σας είναι Φόρμα1 να ελαχιστοποιήσετε το IDE της Visual Basic. Μεγιστοποιήστε το πρόγραμμα επίπεδο έντασης στη γραμμή εργασιών. Τακτοποίηση Φόρμα1 και το επίπεδο έντασης πρόγραμμα, ώστε να εμφανίζονται και τα δύο προγράμματα.
  7. Πληκτρολογήστε μια τιμή μεταξύ της μέγιστης και ελάχιστης τιμής που εμφανίζεται σε ένα ή και τα δύο πλαίσια κειμένου και κάντε κλικ σε ένα κουμπί εντολής στη Φόρμα1. Σημειώστε ότι το αντίστοιχο ρυθμιστικό στο επίπεδο έντασης πρόγραμμα προσαρμόζεται το καθορισμένο επίπεδο.
(c) Microsoft Corporation 1997, όλα τα δικαιώματα κάθε νόμιμου δικαιώματος.
ΕΙΣΦΟΡΕΣ με Arsenio Locsin, Microsoft Corporation

Ιδιότητες

Αναγν. άρθρου: 178456 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.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
Λέξεις-κλειδιά: 
kbdownload kbfile kbhowto kbsample kbsound kbmt KB178456 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της 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