[.NET] VB Alt Key sperren

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von MasterJulian, 7. September 2009 .

Schlagworte:
  1. 7. September 2009
    VB Alt Key sperren

    Gibts ne möglichkeit die ALT Taste zu deaktivieren bzw zu sperren. Per google habe ich das hier gefunden:
    Disable Special Keys in Win App C#
    das funktioniert für die Wintaste auch super (nach VB convertiert) doch für ALT nicht. Zudem habe ich noch das hier gefunden: VB-Disable Ctrl Alt Del in XP, Hide TaskBar, Disable Windows keys-VBForums doch hier wird mit einer externen DLL (die nicht mehr auf dem Server ist) gearbeitet. Ich möchte gerne ohne auskommen.
    //Edit: Die Taste soll GLOBAL gesperrt werden.
     
  2. 8. September 2009
    AW: VB Alt Key sperren

    Hi,

    Du könntest versuchen, die Methode ProcessCmdKey zu überschreiben. Ich habe es nicht getestet, aber es könnte in etwa so aussehen:
    Code:
    Protected Overrides Function ProcessCmdKey( _
     ByRef msg As Message, ByVal keyData As Keys) As Boolean
     If keyData = Keys.Alt Then
     Return True
     Else
     Return MyBase.ProcessCmdKey(msg, keyData)
     End If
    End Function
    Falls nicht: vb.net disable alt key - Google-Suche

    Hoffe das hilft.

    BG MaxDev
     
  3. 8. September 2009
    AW: VB Alt Key sperren

    Gibt ne einfachere Lösung, gibt bei den Form1 Events das Event -> KeyDown


    die rufste auf, und dann kannste sagen
    Code:
    If e.keycode.alt = True then
    
    e.handled
    End if
    
    Diesem Keydown event kansnt du verschiedene Handles geben, also für deine Textbox, buttons, oder deine form

    hoffe mal das hilft dir weiter

    mfg

    Edit:
    Code:
     Private Sub KeyDownPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt.click
    
    
    End Sub
    
    So sollts ca aussehen, hinten bei deinem Handles kannst du alle sachen anfügen die du damit versehen möchtest, und den Keycode abprüfen möchtest
     
  4. 8. September 2009
    AW: VB Alt Key sperren

    @whenyouDIE:
    Darauf bin ich auch schon gekommen. Damit lassen sich jedoch nur Applikationsbedingte operationen (ala Alt+F4) blockieren. Alt+Tab etc... gehen immernoch.
    @MaxDev: Werde ich später mal testen
     
  5. 8. September 2009
    AW: VB Alt Key sperren

    Jo okey , du hattest oben nur geschrieben wie sichs handeln lässt, und wenn du dse natürlich auch für nicht Applicationen brauchst, okey , konnt ich oben nicht rauslesen.

    Aber soviel ich weiß kansnt du beim Keydown auch mehrere abfragen lassen d.h. wenn du sagst

    e.keydown.alt andalso e.keydown.tab oda so dürfte man es glaub ich abfangen können bin mir aber nicht sicher

    mfg
     
  6. 8. September 2009
    AW: VB Alt Key sperren

    Ja das hatte ich nicht dazu geschrieben. Ich editiers oben rein. Du kannst die Tastenkombination zwar abfangen, es wird auch die jeweilige Aktion (MSgbox o.ä.) ausgeführt, doch die Windows Funktion wird auch ausgeführt.
     
  7. 9. September 2009
    AW: VB Alt Key sperren

    Habe ich es richtig verstanden, dass Du einen globalen Keyhook haben willst? Das würde dann bedeuten, dass jeder Tastenanschlag, solange Dein Programm läuft, abgefangen wird.

    Sowas habe ich noch nicht gebaut, sollte aber möglich sein...

    VB - Globaler Keyhook

    [VB.net] Keyboard Hook Class | sim0n
    VS 2008 Hooks (except keyboard and mouse) in VB .Net - not working?-VBForums

    Falls Du das ganze nur in Deinem Programm so haben möchtest (Windows Form ?), dann könntest Du versuchen, auf das KeyDown-Event des Form zugreifen. Ich denke aber, dass das nicht den Programmwechsel mit Alt+Tab ausschalten wird, da Windows wohl auch globale KeyHooks verwenden wird...

    EDIT:
    Habe es mit einem Windows Form (Windows 7, Visual Studio 2008, .Net Framework 2.0) ausprobiert. So lässt sich der Alt-Key komplett sperren (in keinem Programm mehr benutzbar):
    Code:
    Public Class Form1
    
    #Region " KeyHoook implementation "
    
    #Region " Win Api "
    
     Private Declare Unicode Function GetModuleHandleW Lib "kernel32.dll" (ByVal lpModuleName As IntPtr) As IntPtr
    
     Private Delegate Function HOOKPROCDelegate( _
     ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
    
     Private Declare Unicode Function SetWindowsHookExW Lib "user32.dll" ( _
     ByVal idHook As Integer, ByVal lpfn As HOOKPROCDelegate, ByVal hMod As IntPtr, ByVal dwThreadId As UInteger) As IntPtr
    
     Private HookProc As New HOOKPROCDelegate(AddressOf KeyboardHookProc) 'dauerhafte Delegaten-Variable erzeugen
    
     Private Declare Unicode Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hhk As IntPtr) As UInteger
    
     Private Declare Unicode Function CallNextHookEx Lib "user32.dll" ( _
     ByVal hhk As IntPtr, ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
    
    #End Region
    
     Private Const WH_KEYBOARD_LL As Integer = 13
     Private Const HC_ACTION As Integer = 0
    
     Private mHandle As IntPtr
     Public PrevWndProc As Integer
    
     Public Structure KBDLLHOOKSTRUCT
     Public vkCode As Keys
     Public scanCode, flags, time, dwExtraInfo As UInteger
    
     Public Sub New(ByVal key As Keys, ByVal scancod As UInteger, ByVal flagss As UInteger, ByVal zeit As UInteger, ByVal extra As UInteger)
     vkCode = Keys.Alt
     scanCode = scancod
     flags = flagss
     time = zeit
     dwExtraInfo = extra
     End Sub
     End Structure
    
     Public Property KeyHookEnable() As Boolean
     Get
     Return mHandle <> IntPtr.Zero
     End Get
     Set(ByVal value As Boolean)
     If KeyHookEnable = value Then Return
     If value Then
     mHandle = SetWindowsHookExW(WH_KEYBOARD_LL, HookProc, GetModuleHandleW(IntPtr.Zero), 0)
     Else
     UnhookWindowsHookEx(mHandle)
     mHandle = IntPtr.Zero
     End If
     End Set
     End Property
    
     Private Function KeyboardHookProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
     Dim fEatKeyStroke As Boolean
    
     If nCode <> HC_ACTION Then GoTo Ende
    
     If wParam = 260 Then
     Return New IntPtr(1)
     Exit Function
     End If
    ende:
     If fEatKeyStroke Then
     Return New IntPtr(1)
     Exit Function
     End If
    
     Return CallNextHookEx(mHandle, nCode, wParam, lParam)
     End Function
    
    #End Region
    
     Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     Me.KeyHookEnable = True
     End Sub
    
    End Class
    
    Um andere Keys aubzufangen, kannst Du die folgende Stelle in der Methode KeyboardHookProc ändern.
    Code:
    If wParam = 260 Then
     Return New IntPtr(1)
     Exit Function
    End If
    wParam scheint der Code für die Taste zu sein (260 für Alt).

    Hoffe das hilft.

    BG MaxDev
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.