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 SubHeippa 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 SubKiitoksia 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.