|
Const MMSYSERR_BASE = 0
Const MMSYSERR_NODRIVER = (MMSYSERR_BASE + 6)
Const MMSYSERR_INVALPARAM = (MMSYSERR_BASE + 11)
Const JOYERR_BASE = 160
Const JOYERR_UNPLUGGED = (JOYERR_BASE + 7)
Const MAXPNAMELEN = 32
Const JOYERR_NOERROR = (0) ' no error
Private Declare Function joyGetDevCaps Lib "winmm.dll" Alias "joyGetDevCapsA" (ByVal id As Long, lpCaps As JOYCAPS, ByVal uSize As Long) As Long
Private Declare Function joyGetNumDevs Lib "winmm.dll" Alias "joyGetNumDev" () As Long
Private Declare Function joyGetPos Lib "winmm.dll" (ByVal uJoyID As Long, pji As JOYINFO) As Long
Private Declare Function joyGetPosEx Lib "winmm.dll" (ByVal uJoyID As Long, pji As JOYINFOEX) As Long
Private Declare Function joyGetThreshold Lib "winmm.dll" (ByVal id As Long, lpuThreshold As Long) As Long
Private Declare Function joyReleaseCapture Lib "winmm.dll" (ByVal id As Long) As Long
Private Declare Function joySetCapture Lib "winmm.dll" (ByVal hwnd As Long, ByVal uID As Long, ByVal uPeriod As Long, ByVal bChanged As Long) As Long
Private Declare Function joySetThreshold Lib "winmm.dll" (ByVal id As Long, ByVal uThreshold As Long) As Long
Private Type JOYCAPS
wMid As Integer
wPid As Integer
szPname As String * MAXPNAMELEN
wXmin As Integer
wXmax As Integer
wYmin As Integer
wYmax As Integer
wZmin As Integer
wZmax As Integer
wNumButtons As Integer
wPeriodMin As Integer
wPeriodMax As Integer
End Type
Private Type JOYINFO
wXpos As Integer
wYpos As Integer
wZpos As Integer
wButtons As Integer
End Type
Private Type JOYINFOEX
dwSize As Long ' size of structure
dwFlags As Long ' flags to indicate what to return
dwXpos As Long ' x position
dwYpos As Long ' y position
dwZpos As Long ' z position
dwRpos As Long ' rudder/4th axis position
dwUpos As Long ' 5th axis position
dwVpos As Long ' 6th axis position
dwButtons As Long ' button states
dwButtonNumber As Long ' current button number pressed
dwPOV As Long ' point of view state
dwReserved1 As Long ' reserved for communication between winmm driver
dwReserved2 As Long ' reserved for future expansion
End Type
Const JOYSTICKID1 = 0
Const JOYSTICKID2 = 1
Const JOYERR_PARMS = (JOYERR_BASE + 5)
Const JOYERR_NOCANDO = (JOYERR_BASE + 6) ' request not completed
Dim Ret As Long
Private Sub cmd_GetDevCaps_Click()
'/ 조이스틱의 설치여부
Dim jcap As JOYCAPS
List1.Clear
List1.AddItem " << 조이스틱 설치여부 >> "
Ret = joyGetDevCaps(joysticid1, jcap, Len(jcap))
If Ret <> 0 Then
List1.AddItem " 조이스틱이 설치되어 있지 않습니다."
Else
List1.AddItem " 조이스틱 제품이름: " & jcap.szPname
List1.AddItem " 조이스틱 버튼의수: " & jcap.wNumButtons
End If
End Sub
Private Sub cmd_GetNumDevs_Click()
'/ 조이스틱 드라이버가 지원하는 조이스틱 개수
Dim jcap As JOYCAPS
List1.Clear
List1.AddItem " << 드라이버가 지원하는 조이스틱의 개수 >> "
'/조이스틱 존재여부
Ret = joyGetDevCaps(JOYSTICKID1, jcap, Len(jcap))
If Ret <> 0 Then
List1.AddItem " 조이스틱이 설치되어 있지 않습니다."
Else
'/조이스틱 개수
Ret = joyGetNumDevs()
If Ret <> 0 Then
List1.AddItem " 개수: " & Str(Ret)
End If
End If
End Sub
Private Sub cmd_GetPos_Click()
'/ 조이스틱의 위치와 상태반환
Dim jInfo As JOYINFO
List1.Clear
List1.AddItem " << 조이스틱 위치와 버튼상태 >> "
Ret = joyGetPos(JOYSTICKID1, jInfo)
Select Case Ret
Case MMSYSERR_NODRIVER
List1.AddItem " 조이스틱 드라이브 없음"
Case MMSYSERR_INVALPARAM
List1.AddItem " 잘못된 인수 전달"
Case JOYERR_UNPLUGGED
List1.AddItem " 지정한 조이스틱이 시스템에 연결되어 있지 않습니다."
Case JOYERR_NOERROR
List1.AddItem " X위치 : " & Str(jInfo.wXpos)
List1.AddItem " Y위치 : " & Str(jInfo.wYpos)
List1.AddItem " Z위치 : " & Str(jInfo.wZpos)
List1.AddItem " 버튼상태 : " & Str(jInfo.wButtons)
End Select
End Sub
Private Sub cmd_GetPosEx_Click()
'/joyGetPos 의 확장
Dim jInfEx As JOYINFOEX
List1.Clear
List1.AddItem " << 조이스틱 위치와 버튼상태(확장형) >> "
Ret = joyGetPosEx(JOYSTICKID1, jInfEx)
Select Case Ret
Case MMSYSERR_NODRIVER
List1.AddItem " 조이스틱 드라이브 없음"
Case MMSYSERR_INVALPARAM
List1.AddItem " 잘못된 인수 전달"
Case JOYERR_UNPLUGGED
List1.AddItem " 지정한 조이스틱이 시스템에 연결되어 있지 않습니다."
Case JOYERR_NOERROR
List1.AddItem " X위치 : " & Str(jInfEx.dwXpos)
List1.AddItem " Y위치 : " & Str(jInfEx.dwYpos)
List1.AddItem " Z위치 : " & Str(jInfEx.dwZpos)
List1.AddItem " 눌러진 버튼번호 : " & Str(jInfEx.dwButtonNumber)
End Select
End Sub
Private Sub cmd_GetThreshold_Click()
'/조이스틱 이동의 출발점
Dim Thold As Long
List1.Clear
List1.AddItem " << 조이스틱 이동시 출발점 >> "
Ret = joyGetThreshold(JOYSTICKID1, ByVal Thold)
Select Case Ret
Case MMSYSERR_NODRIVER
List1.AddItem " 조이스틱 드라이브 없음"
Case MMSYSERR_INVALPARAM
List1.AddItem " 잘못된 인수 전달"
Case JOYERR_NOERROR
List1.AddItem " 출발점 : " & Str(Thold)
End Select
End Sub
Private Sub cmd_ReleaseCapture_Click()
'/ 조이스틱 해제
Dim jcap As JOYCAPS
List1.Clear
List1.AddItem " << 조이스틱 해제 >>"
'/조이스틱 존재여부
Ret = joyGetDevCaps(JOYSTICKID1, jcap, Len(jcap))
If Ret <> 0 Then
List1.AddItem " 조이스틱이 설치되어 있지 않습니다."
Else
Ret = joyReleaseCapture(JOYSTICKID1)
Select Case Ret
Case MMSYSERR_NODRIVER
List1.AddItem " 조이스틱 드라이브 없음"
Case JOYERR_PARMS
List1.AddItem " 조이스틱 식별자 JOYSTICKID1이 유효하지 않다."
End Select
End If
End Sub
Private Sub cmd_SetCapture_Click()
'/ 조이스틱 선택
Dim jcap As JOYCAPS
List1.Clear
List1.AddItem " << 조이스틱 선택 >>"
'/조이스틱 존재여부
Ret = joyGetDevCaps(JOYSTICKID1, jcap, Len(jcap))
If Ret <> 0 Then
List1.AddItem " 조이스틱이 설치되어 있지 않습니다."
Else
'/조이스틱 선택
Ret = joySetCapture(Me.hwnd, JOYSTICKID1, 1, False)
Select Case Ret
Case MMSYSERR_NODRIVER
List1.AddItem " 조이스틱 드라이브 없음"
Case JOYERR_NOCANDO
List1.AddItem " 조이스틱 선택불가."
Case JOYERR_UNPLUGGED
List1.AddItem " 지정된 조이스틱이 시스템에 연결되어 있지않음"
End Select
End If
End Sub
Private Sub cmd_SetThreshold_Click()
'/조이스틱의 이동 시작점 설정
Dim jcap As JOYCAPS
List1.Clear
List1.AddItem " << 조이스틱 시작점 설정 >>"
'/조이스틱 존재여부
Ret = joyGetDevCaps(JOYSTICKID1, jcap, Len(jcap))
If Ret <> 0 Then
List1.AddItem " 조이스틱이 설치되어 있지 않습니다."
Else
'/조이스틱 시작점
Ret = joySetThreshold(JOYSTICKID1, 10)
Select Case Ret
Case MMSYSERR_NODRIVER
List1.AddItem " 조이스틱 드라이브 없음"
Case JOYERR_PARMS
List1.AddItem " 조이스틱 식별자 JOYSTICKID1이 유효하지 않다."
End Select
End If
End Sub
Private Sub Command9_Click()
End
End Sub