Volume.exe: Visual Basic을 사용하여 볼륨 제어 수준 설정

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

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에서 이러한 마이크 및 볼륨 수준을 설정하려면 다음 Windows API 함수를 사용합니다.
  • GlobalAlloc - 지정된 바이트 수를 힙에서 할당합니다.
  • GlobalLock - 전역 메모리 개체를 잠그고 개체의 메모리 블록의 첫 번째 바이트에 대한 포인터를 반환합니다. 잠긴된 메모리 개체와 연결된 메모리 블록은 삭제된 또는 이동할 수 없습니다.
  • GlobalFree - 지정된 전역 메모리 개체를 해제하고 해당 핸들을 무효로 만듭니다.
  • mixerClose - 지정한 믹서 장치를 닫습니다.
  • mixerGetControlDetails - 오디오 선으로 연결된 단일 컨트롤에 대한 세부 정보를 검색합니다.
  • mixerGetDevCaps - 기능을 확인하기 위해 지정한 믹서 장치를 쿼리합니다.
  • mixerGetID - 지정한 장치 핸들과 연결된 믹서 장치 장치 식별자를 검색합니다.
  • mixerGetLineControls - 오디오 선으로 연결된 하나 이상의 컨트롤을 검색합니다.
  • mixerGetLineInfo - 믹서 장치 특정 줄 정보를 검색합니다.
  • mixerGetNumDevs - 믹서 장치 시스템에서 현재 수를 검색합니다.
  • mixerMessage - 믹서 드라이버를 직접 사용자 지정 믹서 드라이버를 메시지를 보냅니다.
  • mixerOpen - 지정한 믹서 장치를 열고 장치 핸들이 응용 프로그램이 닫힐 때까지 다시 제거할 수 있습니다.
  • mixerSetControlDetails - 오디오 선으로 연결된 단일 컨트롤의 속성을 설정합니다.
다음 섹션에서는 이러한 함수를 사용하는 볼륨과 마이크 수준 설정 예제 프로젝트를 만드는 방법을 보여 줍니다.

샘플 프로젝트 만들기

  1. Visual Basic에서 새 표준 EXE 프로젝트를 시작하십시오. 기본적으로 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. 실행 메뉴에서 시작을 클릭하거나 F5 키를 눌러 프로그램을 시작하십시오. 모든 디스플레이 에 나타나는 Form1 있으므로 Visual Basic IDE 최소화하십시오. 작업 표시줄에 볼륨 수준 프로그램을 최대화하십시오. 두 프로그램 모두 볼 수 있도록 Form1 및 볼륨 수준 프로그램을 정렬하십시오.
  7. 하나 또는 두 텍스트 상자에 표시된 최소 및 최대 값 사이의 값을 입력하고 Form1 명령 단추 중 하나를 클릭하십시오. 볼륨 수준 프로그램에서 해당 슬라이더가 지정된 수준으로 조정되어 있는지 유의하십시오.
(c) Microsoft의 1997 년 예약 모든 권한.
Arsenio Locsin, Microsoft Corporation에 의해 기고물

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 178456 - 마지막 검토: 12/05/2015 08:14:56 - 수정: 4.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, Microsoft Visual Basic Enterprise Edition for Windows 6.0

  • kbnosurvey kbarchive kbmt kbdownload kbfile kbhowto kbsample kbsound KB178456 KbMtko
피드백