vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Timer startet nicht 
Autor: Snecx
Datum: 06.02.11 20:43

Hallo

Das muss nicht so geschehen. Mir fällt nur nichts anders ein wie ich das Problem lösen soll.
Ich möchte nur einen Keyboardrepeat verwirklichen.
Drücke ich eine Taste auf der Fernbedienung bekomme ich einen int grösser 0. Lasse ich die Taste wieder los dann bekomme ich eine 0 über die sub RCB.

Also habe ich mir gedacht wenn die 0 kommt schalte ich den Timer ab und wenn größer dann schalte ich den Timer ein.

Das habe ich vorher simuliert indem ich das ein/ausschalten des Timers auf 2 Buttons gelegt habe.
Das funzt auch.
Public Class Form1
 
    Private KeepAliveDelegate As Threading.TimerCallback
    Private KeepAliveTimer As System.Threading.Timer
 
    Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal _
      bScan As Byte, ByVal dwFlags As Int32, ByVal dwExtraInfo As Int32)
    Private Const VK_CONTROL As Int32 = &H11
    Private Const KEYEVENTF_KEYUP As Int32 = &H2
 
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles MyBase.Load
        KeepAliveDelegate = AddressOf KeepAliveTimerHandler
    End Sub
 
    Private Sub KeepAliveTimerHandler(ByVal state As Object)
        keybd_event(38, 0, 0, 0)
        keybd_event(38, 0, KEYEVENTF_KEYUP, 0)
    End Sub
 
 
    Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
        KeepAliveTimer = New System.Threading.Timer(KeepAliveDelegate, Nothing, _
        0, 50)
    End Sub
 
    Private Sub Button2_MouseUp(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.MouseEventArgs) Handles Button2.MouseUp
        KeepAliveTimer.Change(0, System.Threading.Timeout.Infinite)
    End Sub
End Class
Wenn ich jetzt aber den Timer innerhalb von der Sub RCB einschalten will dann humpelt es eben und der Repeat wird nicht gleichmässig ausgelößt.


Imports System.Threading
Imports HIDLibrary.HidDevice
Imports HIDLibrary
 
 
Public Class Form1
 
    Private KeepAliveDelegate As Threading.TimerCallback
    Private KeepAliveTimer As System.Threading.Timer
 
    Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal _
      bScan As Byte, ByVal dwFlags As Int32, ByVal dwExtraInfo As Int32)
    Private Const VK_CONTROL As Int32 = &H11
    Private Const KEYEVENTF_KEYUP As Int32 = &H2
 
    Friend WithEvents _HidDevice As HIDLibrary.HidDevice
    Private t As Thread
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles MyBase.Load
        KeepAliveDelegate = AddressOf KeepAliveTimerHandler
        Dim HidDeviceList As HIDLibrary.HidDevice()
        HidDeviceList = HidDevices.Enumerate("&H54C", "&H306")
        If HidDeviceList.Length > 0 Then
            _HidDevice = HidDeviceList(0)
            _HidDevice.MonitorDeviceEvents = True
            t = New Thread(AddressOf Me.RunBackgrounder)
            t.Start()
        End If
    End Sub
 
    Private Sub RunBackgrounder()
        While 1
            _HidDevice.Read(AddressOf rcb)
        End While
    End Sub
 
 
    Private Sub KeepAliveTimerHandler(ByVal state As Object)
        keybd_event(38, 0, 0, 0)
        keybd_event(38, 0, KEYEVENTF_KEYUP, 0)
    End Sub
 
 
    Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
        KeepAliveTimer = New System.Threading.Timer(KeepAliveDelegate, Nothing, _
        0, 50)
    End Sub
 
    Private Sub Button2_MouseUp(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.MouseEventArgs) Handles Button2.MouseUp
        KeepAliveTimer.Change(0, System.Threading.Timeout.Infinite)
    End Sub
 
    Private Sub rcb(ByVal data As HIDLibrary.HidDeviceData)
        If CInt(data.Data(1)) > 0 Then
            KeepAliveTimer = New System.Threading.Timer(KeepAliveDelegate, _
              Nothing, 0, 50)
        Else
            KeepAliveTimer.Change(0, System.Threading.Timeout.Infinite)
        End If
    End Sub
 
End Class
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Timer startet nicht2.515Snecx15.01.11 20:56
Re: Timer startet nicht1.870ModeratorDaveS16.01.11 08:50
Re: Timer startet nicht1.692Snecx16.01.11 14:55
Re: Timer startet nicht1.896cookstdu16.01.11 16:03
Re: Timer startet nicht1.746Snecx16.01.11 17:47
Re: Timer startet nicht1.744Snecx05.02.11 18:51
Re: Timer startet nicht1.617ModeratorDaveS06.02.11 11:24
Re: Timer startet nicht1.902Snecx06.02.11 20:43
Re: Timer startet nicht1.896sudave07.02.11 01:36

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel