vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 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
Re: Komma als Punkt im Nummernblock per Tool erzeugen 
Autor: Blackbox
Datum: 25.02.12 10:33

Hallo,

es ist schon mal erstaunlich, dass der Systemhook überhaupt in einer Exe funktioniert. Normalerweise funktioniert das nur in einer DLL. Das lässt einen tiefen Einblick darauf zu,
was der VB-Compiler da eigentlich zusammenwurstelt.

PostMessage vertragen nicht alle Programme.

Desweiteren gibt es sicher Programme die einen KeyDown plus KeyUp als eindeutiges Indiz für
die Betätigung des Keyboards am PC angeschlossen auswerten, bzw. den Keyup überhaupt nicht
auswerten. Das Tool, das diese Action ausführt sollte meiner Meinung nach Prüfen ob KeyDown
zum Erfolg führte und wenn nicht dann KeyUP. Dein Beispielscode macht es sich da ziemlich einfach.

Eine Möglichkeit der Lösung wäre aber mal zunächst, das asynchrone PostMessage durch SendMessage auszutauschen.

' Tastatureingabe auswerten
Public Function LowLevelKeyboardProc(ByVal nCode As Long, _
                                     ByVal wParam As Long, _
                                     ByVal lParam As Long) As Long
    Static kbDllhs As KBDLLHOOKSTRUCT
    Dim blnKeyBlocked As Boolean
    Dim test As Long
 
    If nCode = HC_ACTION Then
        Call CopyMemory(kbDllhs, ByVal lParam, Len(kbDllhs))
        blnKeyBlocked = False
 
        ' key down
        If kbDllhs.flags = 0 Then
 
            ' virtueller Tastencode = 110 (Komma)
            If kbDllhs.vkCode = 110 Then
 
                ' Nachricht an aktives Fenster schicken
                ' (Tastatureingabe, keydown) hat auch mit
                ' Senkeys funktioniert (ist aber meiner
                ' Meinung nach nicht so toll)
                SendMessage GetControl, WM_KEYDOWN, ByVal VK_OEM_PERIOD, 0&
 
                'ursprüngliche Tastatureingabe nicht weitergeben
                LowLevelKeyboardProc = 1
 
            Else
                'ursprüngliche Tastatureingabe weitergeben
                LowLevelKeyboardProc = CallNextHookEx(kbHookRet, nCode, wParam, _
                  lParam)
            End If
        End If
 
        ' key up
        If kbDllhs.flags = 128 Then
            ' virtueller Tastencode = 110 (komma)
 
            If kbDllhs.vkCode = 110 Then
                ' Nachricht an aktives Fenster schicken
                ' (Tastatureingabe, keyup) hat auch mit
                ' Senkeys funktioniert (ist aber meiner
                ' Meinung nach nicht so toll)
 
                'Anmerkung von Jochen Wierum (JoWi@ActiveVB.de):
                '  Ich habe die Zeile deaktiviert, da sonst bei einem
                '  Tastendruck immer 2 Punkte erzeugt wurden. Falls es
                '  in dieser Konfiguration Probleme geben sollte, bitte
                '  den Kommentar vor der folgenden Zeile entfernen:
 
                'PostMessage GetControl, WM_KEYUP, ByVal VK_OEM_PERIOD, 0&
 
                'ursprüngliche Tastatureingabe nicht weitergeben
                LowLevelKeyboardProc = 1
            Else
                'ursprüngliche Tastatureingabe weitergeben
                LowLevelKeyboardProc = CallNextHookEx(kbHookRet, nCode, wParam, _
                  lParam)
            End If
        End If
    End If
End Function
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Komma als Punkt im Nummernblock per Tool erzeugen1.321ThomasA24.02.12 10:51
Re: Komma als Punkt im Nummernblock per Tool erzeugen929Blackbox25.02.12 10:33
Re: Komma als Punkt im Nummernblock per Tool erzeugen770ThomasA26.02.12 21:25

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