PARAMETERS hRawinput As Number
LOCAL nBufsize, cHeader, cRawdata
nBufsize=0
GetRawInputData(m.hRawinput, RID_INPUT, NULL, @nBufsize, RAWINPUTHEADER_SIZE)
cRawdata = REPLICATE(CHR(0), nBufsize)
WITH THIS
.dwType = .Buf2Dword(SUBSTR(cRawdata,1,4))
.dwSize = .Buf2Dword(SUBSTR(cRawdata,5,4))
.hDevice = .Buf2Dword(SUBSTR(cRawdata,9,4))
.wParam = .Buf2Dword(SUBSTR(cRawdata,13,4))
IF .dwType = RIM_TYPEKEYBOARD
.kbdFlags = .Buf2Word(SUBSTR(cRawdata,19,2))
IF INLIST(.kbdFlags, 0, 2)
.kbdMakeCode = .Buf2Word(SUBSTR(cRawdata,17,2))
.kbdReserved = .Buf2Word(SUBSTR(cRawdata,21,2))
.kbdVKey = .Buf2Word(SUBSTR(cRawdata,23,2))
.kbdMessage = .Buf2Dword(SUBSTR(cRawdata,25,4))
.kbdExtraInformation = .Buf2Dword(SUBSTR(cRawdata,29,4))
.kbdAsciiCode = .VKeyToASCII( .kbdVKey, .kbdMakeCode)
RETURN .T.
ENDIF
ENDIF
IF .dwType = RIM_TYPEMOUSE
.musFlags = .buf2Word(SUBSTR(cRawdata,17,2))
IF INLIST( .musFlags, 0, 2)
.mulButtons = .buf2Dword(SUBSTR(cRawdata,19,4))
.musButtonFlags = .Buf2Word(SUBSTR(cRawdata,23,2))
.musButtonData = .buf2Word(SUBSTR(cRawdata,23,2))
.mulRawButtons = .Buf2Dword(SUBSTR(cRawdata,25,4))
.mlLastX = .buf2Dword(SUBSTR(cRawdata,29,4))
.mlLastY = .buf2Dword(SUBSTR(cRawdata,33,4))
.mulExtraInformation = .buf2Dword(SUBSTR(cRawdata,37,4))
RETURN .T.
ENDIF
ENDIF
ENDWITH
RETURN .F.
*-------------- METODO Buf2Dword
PARAMETERS cBuffer
RETURN ASC(SUBSTR(cBuffer, 1,1)) + ;
BITLSHIFT(ASC(SUBSTR(cBuffer, 2,1)), 8) + ;
BITLSHIFT(ASC(SUBSTR(cBuffer, 3,1)), 16) + ;
BITLSHIFT(ASC(SUBSTR(cBuffer, 4,1)), 24)
*-------------- METODO Buf2Word
PARAMETERS lcBuffer
RETURN ASC(SUBSTR(lcBuffer, 1,1)) + ASC(SUBSTR(lcBuffer, 2,1)) * 256