vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Tastenkombination systemweit abfragen 
Autor: Spitzbube66
Datum: 14.02.18 12:22

Liebe Gemeinde, folgendes Problem:

ich möchte mit einer frei einstellbaren Tastenkombination, welche systemweit abgefangen werden soll, in meiner Anwendung etwas auslösen. Ich nutze dazu die hier von VBMichi 2006 dargestellte Funktion, etwas abgewandelt: (http://www.vbarchiv.net/forum/read.php?id=2&t=116602&i=116602&v=f)


Option Explicit
 
Private Declare Function GetAsyncKeyState Lib "user32" _
        (ByVal vKey As Long) As Integer
 
Private Sub Form_Load()
   Timer1.Interval = 10
End Sub
 
Private Sub Timer1_Timer()
    Dim X As Long
 
    For X = 48 To 90
        If CompKey(X, UCase(Chr$(X))) Then Exit Sub
        If CompKey(X + 48, UCase("NUM " & Chr$(X))) Then Exit Sub
    Next X
 
    If CompKey(8, " {Backspace} ") Then Exit Sub
    If CompKey(9, "    ") Then Exit Sub
    If CompKey(13, vbCrLf) Then Exit Sub
    If CompKey(32, " ") Then Exit Sub
    If CompKey(186, "Ü") Then Exit Sub
    If CompKey(192, "Ö") Then Exit Sub
    If CompKey(219, "?") Then Exit Sub
    If CompKey(220, "^") Then Exit Sub
    If CompKey(211, "`") Then Exit Sub
    If CompKey(222, "Ä") Then Exit Sub
 
    For X = 112 To 127
        If CompKey(X, "F" & CStr(X - 111)) Then Exit Sub
    Next X
 
End Sub
 
Private Function CompKey(KCode As Long, KText As String) As Boolean
    Dim Result As Integer
 
    Result = GetAsyncKeyState(KCode)
    If Result = -32767 Then
            Text1.Text = Text1.Text & KText
            Text1.SelStart = Len(Text1.Text)
            CompKey = True
    Else
        CompKey = False
    End If
End Function
Die Abfrage zum Beispiel mit "If CompKey(123) Then" (123 = F12; ich weiß es gibt auch vbKeyF12) funktioniert, auch auf zum Beispiel "If CompKey(vbKeyControl) And CompKey(vbKeyShift) And CompKey(164)" (164 = ALT), also Strg+Shift+Alt, reagiert das Programm, aber nicht auf z.B. Strg + F12, also "If CompKey(vbKeyControl) And CompKey(123)".

Ich komme hier gerade nicht weiter und hoffe auf einen guten Tipp von Euch.

Gruß Frank

Beitrag wurde zuletzt am 14.02.18 um 12:45:21 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastenkombination systemweit abfragen 
Autor: Franki
Datum: 19.02.18 02:28

Hallo,
bei den Funktionstasten musst du getrennt auswerten auf die Funktionstaste selbst bzw. deren Kombination mit ALT/STRG/SHIFT usw.

Schau dir mal dieses alte Beispiel an:


option Explicit
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal _
  hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, _
  ByVal cy As Long, ByVal wFlags As Long) As Long
 
Private Sub Form_Activate()
    Dim Top As Single
    Top = 0
    Line1(0).X1 = 0
    Line1(0).X2 = Me.ScaleWidth
    Line1(0).Y1 = Top
    Line1(0).Y2 = Top
 
    Top = Screen.TwipsPerPixelY
    Line1(1).X1 = 0
    Line1(1).X2 = Me.ScaleWidth
    Line1(1).Y1 = Top
    Line1(1).Y2 = Top
 
End Sub
 
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim I As Integer
 
    lblTT(0).Caption = ""
    lblTT(1).Caption = ""
    lblASC.Caption = ""
    lblTT(0).Caption = KeyCode
    KeyCode = 0
    For I = 0 To 2
        If (2 ^ I) And Shift Then
            lblShift(I).ForeColor = vbRed
        Else
            lblShift(I).ForeColor = &H80000011
        End If
    Next I
 
End Sub
 
Private Sub Form_KeyPress(KeyAscii As Integer)
    lblTT(1).Caption = KeyAscii
    lblASC.Caption = Chr$(KeyAscii)
End Sub
 
Private Sub Form_Load()
    lblASC.Caption = ""
End Sub
 
Private Sub mnuAnsItem_Click()
 
    Dim Switch As Long
    mnuAnsItem.Checked = Not mnuAnsItem.Checked
    If mnuAnsItem.Checked Then
       Switch = -1  'im Vordergrund
    Else
       Switch = -2  'nicht im Vordergrund
    End If
    'Switch:  - 1 = immer im Vordergrund ein / -2 = normal (nicht im 
    ' Vordergrund)
    Call SetWindowPos(Me.hwnd, Switch, 0, 0, 0, 0, &H53)
 
End Sub
Da siehst du, dass jede Funktionstaste immer den selbsn Wert liefert egal mit was zusätzlich aufgerufen. Aber dennoch hast du eine Denkanstoß wie du die Zusatztaste auswerten kannst. (Ist unten in rot jeweils hervorgehoben)

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastenkombination systemweit abfragen 
Autor: Spitzbube66
Datum: 19.02.18 09:38

Hallo Frank,

erstmal Danke für Deine Antwort. Im eigenen Programm mit dem KeyDown Ereignis auf der Form funktioniert das so, aber ich möchte die Tastenkombination systemweit, also außerhalb der eigenen Anwendung, abfragen. Hatte schonmal jemand das gleiche Problem, gibt es einen anderen Lösungsansatz, als über die "GetAsyncKeyState" Funktion alle paar Millisekunden die Tasten abzufragen? Ich verstehe halt nicht, warum z.B "STRG + ALT + SHIFT" sauber erkannt wird, aber nicht "STRG + F12".

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastenkombination systemweit abfragen 
Autor: markusxy
Datum: 20.02.18 19:28

http://www.vbarchiv.net/tipps/tipp_371-hotkey-systemweit-registrieren-und-abfragen.html

Beitrag wurde zuletzt am 20.02.18 um 19:29:36 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastenkombination systemweit abfragen 
Autor: Spitzbube66
Datum: 21.02.18 17:01

Hallo Markus,

herzlichen Dank für den Link, der hat mir tatsächlich sehr geholfen, bzw. der darin weiterführende Link zu http://www.vbarchiv.net/tipps/details.php?id=1021. Ich konnte die Funktionen perfekt für mich abändern und anpassen. Ich bin begeistert!

Gruß & Dank
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel