none
Ziffernblock zur Laufzeit einschalten RRS feed

  • Frage

  • Hallo zusammen,

    in meinem Programm brauche ich Zugriff auf den Ziffernblock. Ich weiß aber, dass der bei manchen Anwendern gelegentlich ausgeschaltet ist. Mit:

    If My.Computer.Keyboard.NumLock Then
                MsgBox("NUM LOCK on")
            Else MsgBox("NUM LOCK off")
            End If
    prüfe ich erfolgreich ab, ob der Ziffernblock ein- oder ausgeschaltet ist. Nun möchte ich diesen einschalten, wenn er ausgeschaltet ist. Wie mache ich das?

    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Donnerstag, 30. August 2018 22:05

Antworten

  • Hallo Peter,

    danke für Deine Antwort.

    Ich habe jetzt noch eine Kurzlösung gefunden, die ggf. auch mal anderen Usern hilft.

    Dim WshShell As Object = CreateObject("WScript.Shell")
                WshShell.SendKeys("{NUMLOCK}")


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    • Als Antwort vorgeschlagen Florian Haupt Dienstag, 4. September 2018 06:56
    • Als Antwort markiert Giftzwockel Montag, 10. September 2018 18:14
    Sonntag, 2. September 2018 11:20
  • Hi Stefan,
    wenn SendKeys nicht funktioniert, dann musst Du die Tastenbedienung simulieren. Für Windows 10 funktioniert der folgende Code:

    Module Module01
        Private Declare Sub keybd_event Lib "user32" (bVK As Byte, bScan As Byte, dwFlags As Integer, dwExtraInfo As Integer)
    
        Private Const VK_NUMLOCK = &H90
        Private Const KEYEVENTF_EXTENDEDKEY = &H1
        Private Const KEYEVENTF_KEYUP = &H2
    
        Sub Main()
            Console.WriteLine(My.Computer.Keyboard.NumLock)
            'Simulate Key Press
            keybd_event(VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0)
            'Simulate Key Release
            keybd_event(VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
            Console.WriteLine(My.Computer.Keyboard.NumLock)
            Console.WriteLine("weiter mit Taste")
            Console.ReadKey()
        End Sub
    
    End Module


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Giftzwockel Sonntag, 2. September 2018 07:37
    Sonntag, 2. September 2018 07:33

Alle Antworten

  • Hi,
    hast Du es mal probiert mit:

    My.Computer.Keyboard.SendKeys("{NumLock}", True)


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Freitag, 31. August 2018 02:56
  • Hallo Peter,

    jetzt habe ich es versucht. Leider ohne Erfolg.

    Stefan


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Freitag, 31. August 2018 13:38
  • Hi Stefan,
    wenn SendKeys nicht funktioniert, dann musst Du die Tastenbedienung simulieren. Für Windows 10 funktioniert der folgende Code:

    Module Module01
        Private Declare Sub keybd_event Lib "user32" (bVK As Byte, bScan As Byte, dwFlags As Integer, dwExtraInfo As Integer)
    
        Private Const VK_NUMLOCK = &H90
        Private Const KEYEVENTF_EXTENDEDKEY = &H1
        Private Const KEYEVENTF_KEYUP = &H2
    
        Sub Main()
            Console.WriteLine(My.Computer.Keyboard.NumLock)
            'Simulate Key Press
            keybd_event(VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0)
            'Simulate Key Release
            keybd_event(VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
            Console.WriteLine(My.Computer.Keyboard.NumLock)
            Console.WriteLine("weiter mit Taste")
            Console.ReadKey()
        End Sub
    
    End Module


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Giftzwockel Sonntag, 2. September 2018 07:37
    Sonntag, 2. September 2018 07:33
  • Hallo Peter,

    danke für Deine Antwort.

    Ich habe jetzt noch eine Kurzlösung gefunden, die ggf. auch mal anderen Usern hilft.

    Dim WshShell As Object = CreateObject("WScript.Shell")
                WshShell.SendKeys("{NUMLOCK}")


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    • Als Antwort vorgeschlagen Florian Haupt Dienstag, 4. September 2018 06:56
    • Als Antwort markiert Giftzwockel Montag, 10. September 2018 18:14
    Sonntag, 2. September 2018 11:20