Moi.
Haluasin tietää onnistuuko hiiren liikuttaminen kaukosäätimellä?
Koneella minulla on Winlirc joka antaa seuraavat koodit haluamilleni toiminnoille, kun painan kaukosäätimen nappeja.
ylös 0x0000000000007788
alas 0x000000000000D728
oikea 0x00000000000037C8
vasen 0x000000000000B748
vasen nappi 0x00000000000057A8
Olisin erittäin kiitollinen jos joku voisi auttaa miten tämmöinen ohjelma tehtäisiin, saisi hiiret hyppimästä pöydälle.
Jutska hoituisi esim. vaikkapa VB:llä - lukemalla sarjaportin data MSComm-kontrollin puskurista ja siirtelemällä kursoria sitten ehtolauserakennelman & GetCursorPos/SetCursorPos API'en avulla...
(HUOM koodi on testaamaton)
' moduuliin... Type POINTAPI x As Integer y As Integer End Type Global rect As POINTAPI Declare Sub GetCursorPos Lib "User32.dll" (lpPoint As POINTAPI) Declare Function SetCursorPos Lib "User32.dll" _ (ByVal x As Long, ByVal y As Long) As Long
' lomakkeelle... Dim data() As Byte Dim strIrcData(1 to 4) As String Dim mpos As long Private Sub Form_Load() strIrcData(1) = "0x0000000000007788" strIrcData(2) = "0x000000000000D728" strIrcData(3) = "0x00000000000037C8" strIrcData(4) = "0x000000000000B748" MSComm1.CommPort = 1 MSComm1.Settings = "1200, n, 8, 1" MSComm1.InputLen = 1 MSComm1.InputMode = comInputModeBinary MSComm1.PortOpen = True Timer1.Interval = 100 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() Static strData As String If MSComm1.InBufferCount Then data() = MSComm1.Input strData = strData & CStr(data(0)) For i = 1 to 4 If InStr(strData, strIrcData(i)) > 0 Then Select Case i Case 1: mpos = SetCursorPos(rect.x, rect.y - 1) Case 2: mpos = SetCursorPos(rect.x, rect.y + 1) Case 3: mpos = SetCursorPos(rect.x + 1,rect.y) Case 4: mpos = SetCursorPos(rect.x - 1, rect.y) End Select strData = "": Exit For End if Next i End If End Sub
Heippa taas!
Sori toi edellinen mokailu...
'moduulissa... Type POINTAPI x As Long ' piti olla pidempää kokonaislukua y As Long End Type Global rect As POINTAPI Declare Sub GetCursorPos Lib "User32.dll" (lpPoint As POINTAPI) Declare Function SetCursorPos Lib "User32.dll" _ (ByVal x As Long, ByVal y As Long) As Long
'lomakkeella... Dim data() As Byte Dim strIrcData(1 to 4) As String Dim mpos As long Private Sub Form_Load() strIrcData(1) = "0x0000000000007788" strIrcData(2) = "0x000000000000D728" strIrcData(3) = "0x00000000000037C8" strIrcData(4) = "0x000000000000B748" '(arvot voivat poiketa edellä luetelluista) If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End If MSComm1.CommPort = 1 MSComm1.Settings = "1200, n, 8, 1" MSComm1.InputLen = 1 MSComm1.InputMode = comInputModeBinary MSComm1.PortOpen = True Timer1.Interval = 100 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() Static working As Bolean Static strData As String If not working Then working = true If MSComm1.InBufferCount Then data() = MSComm1.Input strData = strData & CStr(data(0)) For i = 1 to 4 If InStr(strData, strIrcData(i)) > 0 Then 'piti olla myös jotain mihin verrata... Call GetCursorPos(rect) Select Case i Case 1: mpos = SetCursorPos(rect.x, rect.y - 10) Case 2: mpos = SetCursorPos(rect.x, rect.y + 10) Case 3: mpos = SetCursorPos(rect.x + 10,rect.y) Case 4: mpos = SetCursorPos(rect.x - 10, rect.y) End Select strData = "": Exit For End if Next i End If working = False End If End Sub Private Sub Form1_Unload(Cancel as Integer) If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End If End Sub
Kiitoksia paljon jo etukäteen.
Pitää testata ja ilmoittaa miten kävi.
Eikö olisi helpompaa jutella suoraan winlircin kanssa kuin toteuttaa oma luku vastaanottimelta? Sen lisäksi monet valmiit ohjelmat osaavat liikuttaa hiirtä yhteistyössä winlircin kanssa.
Winlirc toimiipi jopa VB:n kanssa:
http://winlirc.sourceforge.net/vb.html
Toinen tapa käyttää valmista ActiveX-komponenttia:
http://winlirc.sourceforge.net/activex.html
Ja nämä suoraan winlircin sivuilta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.