Fehler in der Programmiersprache Visual Basic??

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von MaxeStudios.

    Fehler in der Programmiersprache Visual Basic??

    Hai!

    Ich hatte spontan die Idee eine Art Quiz oder Spiel mit den "Capslock, Rollen und Num" Leds an meiner Tastatur, zu coden. Ich hatte erstmal probiert die Leds per "Befehl" an/abzuschalten, code siehe Dateianhang. Diese blinken ganz kurz auf, und gehen sofort wieder aus, manchmal, nachdem ich 10 mal den Knopf zum anschalten drücke, bleibt sie auch an. Danach das selbe spektakel. Ich habe wirklich nur den Code wie im Dateianhang, wieso funktioniert es aber nicht? ?( :sleeping: Ich hab mich auch informiert, finde aber nichts... Vielleicht ein Fehler in Visual Basic?
    Was denkt ihr?



    Hier nochmal der Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. SendKeys.Send("{CAPSLOCK}")
    4. End Sub
    5. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    6. SendKeys.Send("{NUMLOCK}")
    7. End Sub
    8. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    9. SendKeys.Send("{SCROLLLOCK}")
    10. End Sub
    11. End Class


    *Topic verschoben, unnötige Umfrage entfernt*
    Bilder
    • awdsfefseffs.png

      30,69 kB, 858×406, 281 mal angesehen

    ╔══╦═╦╦╦═╦══╦══╦╗╔╦═╦╦═╦══╗
    ║║║║╩╠..╣╦╬╗╚╬╗╔╣╚╝║╠║║║╠╗╚╣
    ╚╩╩╩╩╩╩╩═╩══╝╚╝╚══╩═╩╩═╩══╝

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ich habe mir nie angeschaut wie SendKeys arbeitet, aber für dieses Vorhaben würde ich keybd_event nehmen.

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. <DllImport("user32.dll")>
    4. Private Shared Sub keybd_event(ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As UInteger, ByVal dwExtraInfo As Integer)
    5. End Sub
    6. Const VK_CAPITAL = &H14
    7. Const KEYEVENTF_KEYUP = &H2
    8. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    9. keybd_event(VK_CAPITAL, 0, 0, 0)'drücken
    10. keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0)'wieder lösen
    11. End Sub
    12. End Class

    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Danke, probier ich morgen mal in Ruhe aus :)

    ╔══╦═╦╦╦═╦══╦══╦╗╔╦═╦╦═╦══╗
    ║║║║╩╠..╣╦╬╗╚╬╗╔╣╚╝║╠║║║╠╗╚╣
    ╚╩╩╩╩╩╩╩═╩══╝╚╝╚══╩═╩╩═╩══╝
    Zum Test:
    SendKeys funktioniert bei mir garnicht.
    keybd_event funktioniert bei mir einwandfrei.
    Aber testen kann ich das bei mir nur mit ScrollLock, da ich die NumLock- und CapsLock-Tasten deaktiviert habe.

    Zur Umfrage:
    Es ist definitiv kein Fehler in der Programmiersprache Visual Basic. Eher ein Fehler im .NET Framework oder in Windows; unwahrscheinlich (aber nicht unmöglich) ein Fehler im Treiber oder der Hardware.
    SendKeys.Send scheint generell sehr unzuverlässig zu sein.
    Ein Fehler in der Programmiersprache
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Hättest du mal kurz die MSDN bemüht wüsstest du wo der Fehler liegt.
    msdn.microsoft.com/de-de/libra…dkeys.send(v=vs.110).aspx
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Danke für eure hilfreichen Antworten! Falls jemand am funktionierenden Code Interesse hat, hier bitte:

    VB.NET-Quellcode

    1. ​Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    4. Private Const KEYEVENTF_KEYUP = &H2
    5. Const VK_NUMLOCK = &H90
    6. Private Const VK_SCROLL As Short = &H91
    7. Private Const KEYEVENTF_EXTENDEDKEY As Short = &H1
    8. Private Const KEYEVENTF_KEYUP3 As Short = &H2
    9. Const KEYEVENTF_EXTENDEDKEY3 = &H1
    10. Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal ByValnVirtKey As Integer) As Short
    11. <DllImport("user32.dll")>
    12. Private Shared Sub keybd_event(ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As UInteger, ByVal dwExtraInfo As Integer)
    13. End Sub
    14. Const VK_CAPITAL = &H14
    15. Const KEYEVENTF_KEYUP2 = &H2
    16. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    17. keybd_event(VK_CAPITAL, 0, 0, 0) 'drücken
    18. keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP2, 0) 'wieder lösen
    19. End Sub
    20. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    21. keybd_event(VK_NUMLOCK, 0, 0, 0)
    22. keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP2, 0)
    23. End Sub
    24. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    25. keybd_event(VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY3 Or 0, 0)
    26. keybd_event(VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY3 Or KEYEVENTF_KEYUP3, 0)
    27. End Sub
    28. End Class

    ╔══╦═╦╦╦═╦══╦══╦╗╔╦═╦╦═╦══╗
    ║║║║╩╠..╣╦╬╗╚╬╗╔╣╚╝║╠║║║╠╗╚╣
    ╚╩╩╩╩╩╩╩═╩══╝╚╝╚══╩═╩╩═╩══╝
    Also du solltest dir angewöhnen saubereren Source zu schreiben. Warum in Gottes Namen denn solch ein Gewürzgurkensalat mit Nutella? Merkst du das da was doppelt gemoppelt ist?

    VB.NET-Quellcode

    1. Private Const KEYEVENTF_KEYUP = &H2
    2. Private Const KEYEVENTF_EXTENDEDKEY As Short = &H1
    3. Private Const KEYEVENTF_KEYUP3 As Short = &H2
    4. Const KEYEVENTF_EXTENDEDKEY3 = &H1
    5. Const KEYEVENTF_KEYUP2 = &H2


    Noch dazu gib deinen Controls anständige Namen, habe ich zwar im Sample auch nicht gemacht, aber ich muss diesen Source auch nicht warten oder erweitern.

    So einfach sollte reichen:

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. <DllImport("user32.dll")>
    4. Private Shared Sub keybd_event(ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As UInteger, ByVal dwExtraInfo As Integer)
    5. End Sub
    6. Const VK_CAPITAL = &H14
    7. Const VK_NUMLOCK = &H90
    8. Const VK_SCROLL = &H91
    9. Const KEYEVENTF_KEYUP = &H2
    10. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    11. PushTheButton(VK_CAPITAL)
    12. End Sub
    13. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    14. PushTheButton(VK_NUMLOCK)
    15. End Sub
    16. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    17. PushTheButton(VK_SCROLL)
    18. End Sub
    19. Private Sub PushTheButton(ByVal bVk As Byte)
    20. keybd_event(bVk, 0, 0, 0)
    21. keybd_event(bVk, 0, KEYEVENTF_KEYUP, 0)
    22. End Sub
    23. End Class


    Edit: @MaxeStudios

    Habe den Source noch editiert, zu schönem Code gehöhrt auch redundanten Code zu vermeiden, daher nun die Methode "PushTheButton".
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „NoIde“ ()

    Ja, war auf die schnelle, hab jetzt nicht direkt darauf geachtet 8| :/ xD


    Aber herzlichen Dank dass du mich darauf hinweist :D

    ╔══╦═╦╦╦═╦══╦══╦╗╔╦═╦╦═╦══╗
    ║║║║╩╠..╣╦╬╗╚╬╗╔╣╚╝║╠║║║╠╗╚╣
    ╚╩╩╩╩╩╩╩═╩══╝╚╝╚══╩═╩╩═╩══╝