GELÖST Numlock, Cpslock-Lampen per Visual Basic

Diskutiere Numlock, Cpslock-Lampen per Visual Basic im Programmierung Forum im Bereich Software Forum; Hallo, gibt es eine Möglichkeit in Visual Basic die Num-, Caps- und Rollen/Scroll-Lampen an bzw. aus zu schalten? Über Sendkeys habe ich es schon...
nka

nka

Threadstarter
Mitglied seit
29.03.2010
Beiträge
699
Standort
Hamburg
Hallo,
gibt es eine Möglichkeit in Visual Basic die Num-, Caps- und Rollen/Scroll-Lampen an bzw. aus zu schalten? Über Sendkeys habe ich es schon probiert, es ging aber nicht.

Mfg
 
F

flipper8

Mitglied seit
27.02.2006
Beiträge
8
Hi !

Ich wußte leider nicht, ob Du einen Beispielcode für vb6 oder vb.net braucht.

Aber hier http://www.schmittis-page.de/excel/vba/t72.htm findest Du einen Code, der mit VB6 funktioniert.
Das Beispielprojekt ist nur eine Excel-Tabelle mit diesen Funktionen.

Ach, und die Lämpchen gehen an ;-)

Gruß
flipper8
 
D

dlonra

Mitglied seit
19.10.2005
Beiträge
1.149
Ja genau und dann noch ein Relais anlöten und du kannst was ein und ausschalten :D:D
 
nka

nka

Threadstarter
Mitglied seit
29.03.2010
Beiträge
699
Standort
Hamburg
In Exel funktioniert es, aber in Visual Basic 2010 nicht. 2010 ersetzt Type durch Structure da liegt das Problem.
 
F

flipper8

Mitglied seit
27.02.2006
Beiträge
8
Ja genau und dann noch ein Relais anlöten und du kannst was ein und ausschalten :D:D
:unsure Wie wär's z.B. mit Lämpchen ? ;)

@nka

Erstetze mal die Definition von oSv das OSVERSIONINFO durch OperatingSystem

Lösche dann die Definition "GetVersionEx", die beiden Constanten "VER_PLATFORM_WIN32_NT" und "VER_PLATFORM_WIN32_WINDOWS" und
den "Private Type" (bis "End Type")

Nun mußt Du nur noch die alte Function "KeyStatus" und die alte Sub "Switch" durch folgende ersetzen. Unter VB2008 funktioniert es.


Private Function KeyStatus(ByVal Taste As Integer) As Boolean
oSv= Environment.OSVersion

If My.Computer.Keyboard.NumLock = True Then
keys(VK_NUM) = 1
Else
keys(VK_NUM) = 0
End If
If My.Computer.Keyboard.CapsLock = True Then
keys(VK_CAPS) = 1
Else
keys(VK_CAPS) = 0
End If
If My.Computer.Keyboard.ScrollLock = True Then
keys(VK_SCROLL) = 1
Else
keys(VK_SCROLL) = 0
End If

Return keys(Taste)

End Function

Private Sub Switch(ByVal Taste As Integer, ByVal AnAus As Boolean)
If (KeyStatus(Taste) <> AnAus) Then
If (oSv.Platform = PlatformID.Win32Windows) Then
keys(Taste) = 1
SetKeyboardState(keys(0))
ElseIf (oSv.Platform = PlatformID.Win32NT) Then
keybd_event(Taste, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0)
keybd_event(Taste, &H45, KEYEVENTF_EXTENDEDKEY Or _
KEYEVENTF_KEYUP, 0)
End If
End If

End Sub
 
D

dlonra

Mitglied seit
19.10.2005
Beiträge
1.149
Hab es noch nicht getestet :D
 
Zuletzt bearbeitet:
nka

nka

Threadstarter
Mitglied seit
29.03.2010
Beiträge
699
Standort
Hamburg
Unter Visual Basic 2010 geht es nicht oder ich habe was falsch gemacht. Es kommt diese Fehlermeldung:
Ein Aufruf an die PInvoke-Funktion "Blinken!Blinken.Form1::keybd_event" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.
Hier mein kompletter Code:
Code:
    Private Declare Function GetKeyboardState Lib "user32" _
        (ByVal pbKeyState As Byte) As Long

    Private Declare Function GetKeyState Lib "user32" _
          (ByVal nVirtKey As Long) As Integer

    Private Declare Sub keybd_event Lib "user32" _
          (ByVal bVk As Byte, ByVal bScan As Byte, _
          ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

    Private Declare Function SetKeyboardState Lib "user32" _
          (ByVal lppbKeyState As Byte) As Long

    Private Const KEYEVENTF_EXTENDEDKEY = &H1
    Private Const KEYEVENTF_KEYUP = &H2


    Private Const VK_CAPS = &H14
    Private Const VK_NUM = &H90
    Private Const VK_SCROLL = &H91

    Private keys(0 To 255) As Byte

    Private oSv As OperatingSystem

    Private Function KeyStatus(ByVal Taste As Integer) As Boolean
        oSv = Environment.OSVersion

        If My.Computer.Keyboard.NumLock = True Then
            keys(VK_NUM) = 1
        Else
            keys(VK_NUM) = 0
        End If
        If My.Computer.Keyboard.CapsLock = True Then
            keys(VK_CAPS) = 1
        Else
            keys(VK_CAPS) = 0
        End If
        If My.Computer.Keyboard.ScrollLock = True Then
            keys(VK_SCROLL) = 1
        Else
            keys(VK_SCROLL) = 0
        End If

        Return keys(Taste)

    End Function

    Private Sub Switch(ByVal Taste As Integer, ByVal AnAus As Boolean)
        If (KeyStatus(Taste) <> AnAus) Then
            If (oSv.Platform = PlatformID.Win32Windows) Then
                keys(Taste) = 1
                SetKeyboardState(keys(0))
            ElseIf (oSv.Platform = PlatformID.Win32NT) Then
                keybd_event(Taste, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0)
                keybd_event(Taste, &H45, KEYEVENTF_EXTENDEDKEY Or _
                KEYEVENTF_KEYUP, 0)
            End If
        End If

    End Sub

    Private Sub cmdan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdan.Click
        Switch(1, True)
        Switch(2, True)
        Switch(3, True)
    End Sub

    Private Sub cmdaus_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdaus.Click
        Switch(1, False)
        Switch(2, False)
        Switch(3, False)
    End Sub
Das ganze steht dann natürlich noch in einer Class.
 
F

flipper8

Mitglied seit
27.02.2006
Beiträge
8
Warum hast Du Denn in den Sub's "cmdan_Click" bzw. "cmdaus_Click" die Parameter bei "Switch"-Aufrufen geändert ?

Ändere mal die Sub's von
Code:
    Private Sub cmdan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdan.Click
        Switch(1, True)
        Switch(2, True)
        Switch(3, True)
    End Sub

    Private Sub cmdaus_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdaus.Click
        Switch(1, False)
        Switch(2, False)
        Switch(3, False)
    End Sub
in

Code:
    Private Sub cmdan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdan.Click
        Switch(VK_NUM, 1)
        Switch(VK_CAPS, 1)
        Switch(VK_SCROLL, 1)
    End Sub

    Private Sub cmdaus_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdaus.Click
        Switch(VK_NUM, 0)
        Switch(VK_CAPS, 0)
        Switch(VK_SCROLL, 0)
    End Sub
 
nka

nka

Threadstarter
Mitglied seit
29.03.2010
Beiträge
699
Standort
Hamburg
Ok, jetzt funktioniert es, aber nicht vollständig. Er schafft es nur ein Licht an zu schalten, dann kommt die oben genannte Fehlermeldung. Vielleicht sollte ich mal probieren, ob eine alleine funktioniert.
 
nka

nka

Threadstarter
Mitglied seit
29.03.2010
Beiträge
699
Standort
Hamburg
Ich habe festgestellt, dass das ganze nur in der Entwicklungszeit auftritt, sobald das Programm erstellt ist ignoriert er den Fehler einfach Danke!
 
Thema:

Numlock, Cpslock-Lampen per Visual Basic

Numlock, Cpslock-Lampen per Visual Basic - Ähnliche Themen

  • Shift NumLock Verhalten abschalten?

    Shift NumLock Verhalten abschalten?: Hallo Community Ich wollte Fragen ob es eine Möglichkeit gibt das Shift NumLock Verhalten abzuschalten. Ich benutze nämlich eine Maus die...
  • Numlock

    Numlock: Auf meinem Laptop wird der Status der Numlock-Taste nicht angezeigt. Gibt es eine Möglichkeit den Zustand der Numlock-Taste in eimen Statusfeld in...
  • NumLock immer deaktiviert

    NumLock immer deaktiviert: Windows 10 numlock immer deaktivert trotz Änderung in registry HKEY_CURRENT_USER\Control Panel\Keyboard\InitialKeyboardIndicators auf 2. Nach...
  • Tastatur Numlock

    Tastatur Numlock: Hallo. Habe eine Frage zur PC Tastatur ohne (Fn) Taste. Wenn ich die Numlocktaste aktiviere schreibt der Zahlenblock Zahlen, was normal ist. Aber...
  • NumLock ein aus

    NumLock ein aus: Es wurde dieses Thema bereits des oefteren behandelt und ich habe daraus schon die haelfte meiner Probleme geloest, bis auf eins. Beim hochfahren...
  • Ähnliche Themen

    • Shift NumLock Verhalten abschalten?

      Shift NumLock Verhalten abschalten?: Hallo Community Ich wollte Fragen ob es eine Möglichkeit gibt das Shift NumLock Verhalten abzuschalten. Ich benutze nämlich eine Maus die...
    • Numlock

      Numlock: Auf meinem Laptop wird der Status der Numlock-Taste nicht angezeigt. Gibt es eine Möglichkeit den Zustand der Numlock-Taste in eimen Statusfeld in...
    • NumLock immer deaktiviert

      NumLock immer deaktiviert: Windows 10 numlock immer deaktivert trotz Änderung in registry HKEY_CURRENT_USER\Control Panel\Keyboard\InitialKeyboardIndicators auf 2. Nach...
    • Tastatur Numlock

      Tastatur Numlock: Hallo. Habe eine Frage zur PC Tastatur ohne (Fn) Taste. Wenn ich die Numlocktaste aktiviere schreibt der Zahlenblock Zahlen, was normal ist. Aber...
    • NumLock ein aus

      NumLock ein aus: Es wurde dieses Thema bereits des oefteren behandelt und ich habe daraus schon die haelfte meiner Probleme geloest, bis auf eins. Beim hochfahren...
    Oben