Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Hiiren liikuttaminen ir-kaukosäätimellä?

mixxo [28.11.2008 02:59:19]

#

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.

neau33 [29.11.2008 00:18:36]

#

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

neau33 [29.11.2008 09:24:45]

#

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

mixxo [29.11.2008 19:14:16]

#

Kiitoksia paljon jo etukäteen.

Pitää testata ja ilmoittaa miten kävi.

ZcMander [03.12.2008 06:56:36]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta