vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.

Hinweis:
Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden!

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

Fragen zu Tipps & Tricks und Workshops im vb@rchiv
Tipp 1991: Tastatureingaben VOR Windows abfangen 
Autor: brandointheweb
 Tipp anzeigenDatum: 30.10.09 12:48

Hallo zusammen ich habe mit dem Tipp 1991 ein wenig rumprobiert!
Einfache Anwendung erstellt - Form mit angegebenen Code kompiliert und in der Funktion KeyboardHookProc ein Case Else eingefügt um die Tastatureingabe mal zu überprüfen:
Case Else
          MsgBox(lParam.vkCode.ToString(), MsgBoxStyle.Information, "Hit Key:")
Hierzu habe ich 2 Fragen:
1.
Kann mir jemand sagen, warum ich die Msgboxausgabe 2mal bekomme?
2.
Wie könnte ich der Anwendung TastaturKOMBINATIONEN übergeben und abspeichern bei deren Betätigung dann spezifischer Code ausgeführt wird?

Ich glaube nicht, dass Zitronenfalter wirklich Zitronen falten

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastatureingaben VOR Windows abfangen 
Autor: Guido Eisenbeis
Datum: 01.11.09 19:26

Hab jetzt gerade nur VB 6 zur Verfügung, versuche dir aber mal soweit zu helfen.

[Quote]1. Kann mir jemand sagen, warum ich die Msgboxausgabe 2mal bekomme?
[/Quote]
Ich vermute mal: KeyDown + KeyUp = 2


[Quote]2. Wie könnte ich der Anwendung TastaturKOMBINATIONEN übergeben und abspeichern bei deren Betätigung dann spezifischer Code ausgeführt wird?[/Quote]
Falls du wissen willst, wie man Tasten-Kombis auswertet: Du kannst den Zustand einer zweiten Taste per GetKeyState überprüfen.

Beispiel-Code in VB-6. Es wird geprüft, ob die Tasten-Kombi Shift+S gedrückt wird:
  'check if SHIFT-S is pressed
  If (GetKeyState(VK_SHIFT) And &HF0000000) And wParam = Asc("S") Then
      'show the result
      Form1.Print "Shift-S pressed ..."
  End If
Guido.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastatureingaben VOR Windows abfangen 
Autor: A2009W
Datum: 05.12.09 16:40

Hallo zusammen!

Genau die gleichen Problemchen habe ich auch gerade mit diesem Tipp

Ich erstelle gerade ein einfaches Screenshot-Tool, aber da das Ereignis anscheinend wie oben schon erklärt beim Drücken und Loslassen der Taste ermittelt wird, erhalte ich dementsprechend immer gleich 2 Screenshots, wenn ich 1x die Taste gedrückt habe...

Kann mir jemand einen Tipp geben, wie ich beispielsweise nur das Drücken abfange und das Loslassen ignorieren kann ?

Danke vorab !
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastatureingaben VOR Windows abfangen 
Autor: Guido Eisenbeis
Datum: 05.12.09 18:08

Hallo A2009W,

VB6-Code lautet:

If (wParam = WM_KEYDOWN) Then 
oder
If (wParam = WM_KEYUP) Then
Den musst du nur noch auf Dot-Net umsetzen.

Sag bitte Bescheid, obs funktioniert hat! Ich verliere nämlich langsam die Lust zu helfen, wenn die Fragensteller immer nur nehmen (die Antworten) und nicht einmal den Anstand haben zu sagen, obs geholfen hat! (Siehe Posting #1 von brandointheweb!)

Gruß,
Guido.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastatureingaben VOR Windows abfangen 
Autor: A2009W
Datum: 05.12.09 19:10

Hallo Guido!

Klar bekommst Du Feadback von mir

Ich komme leider morgen erst dazu, dass zu probieren - aber schon mal DANKE für Deine Antwort

Schönen Abend noch !!!

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

Re: Tastatureingaben VOR Windows abfangen 
Autor: Guido Eisenbeis
Datum: 05.12.09 20:22

Prima! *freu*
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastatureingaben VOR Windows abfangen 
Autor: A2009W
Datum: 06.12.09 00:04

Hallo Guido!

Danke, denn Dein Tipp war Gold wert

Ich habe einfach anstatt der letzten Zeile:

<...schnipp...>
    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
<...schnapp...>
Deinen Tipp eingebaut:

<...schnipp...>
    Private Function KeyboardHookProc(ByVal nCode As Integer, _
      ByVal wParam As IntPtr, _
      ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
 
        Dim fEatKeyStroke As Boolean
 
        If (wParam = WM_KEYDOWN) Then
<...schnapp...>
und nun wird nur noch 1 Screenshot erstellt, so lange nicht jemand auf der Taste einschläft. ;)

Danke Dir noch mal und schönen Abend noch !

Axel
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastatureingaben VOR Windows abfangen 
Autor: Guido Eisenbeis
Datum: 06.12.09 00:41

Hallo Axel,

so macht das Spaß!

Deshalb hier noch ein Tipp: Du solltest "If nCode = HC_ACTION Then" nicht ersetzen, sondern kombinieren (Wichtig!). Also:
<...schnipp...>
    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
          If (wParam = WM_KEYDOWN) Then
<...schnapp...>
Du kannst es natürlich auch "And"-verknüpfen, aber so dürfte der Code Ressourcen-schonender sein. Das Abfragen auf HC_Action ist wichtig: Siehe z. B. hier und gib dort HC_ACTION als Suchbegriff ein.

Der Konsens läuft auf Folgendes hinaus:

HC_ACTION: The wParam and lParam parameters contain information about a keystroke message.

Gruß,
Guido.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastatureingaben VOR Windows abfangen 
Autor: A2009W
Datum: 06.12.09 10:29

Hallo Guido!

Danke schön für den Tipp

Habe es wie folgt geändert und für die Nachwelt in diesem Beitrag noch mal komplett hinterlegt:

    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
            If (wParam = WM_KEYDOWN) Then
 
                Select Case lParam.vkCode
                    '(fEatKeyStroke = True)
                    Case Keys.PrintScreen
                        fEatKeyStroke = True
                        'Auszuführende Aktion:
                        btnScreenCapture_Click(Nothing, Nothing)
                End Select
 
                If fEatKeyStroke Then
                    Return New IntPtr(1)
                    Exit Function
                End If
 
                Return CallNextHookEx(mHandle, nCode, wParam, lParam)
            End If
        End If
    End Function
Schönen Sonntag noch !

Axel
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastatureingaben VOR Windows abfangen 
Autor: Guido Eisenbeis
Datum: 06.12.09 11:30

Gern geschehen!

Zitat:

Habe es wie folgt geändert und für die Nachwelt in diesem Beitrag noch mal komplett hinterlegt

So wünscht man sich das! *freu* Damit können dann auch andere was anfangen! Das Forum lebt und Dieter freut sich.


Guido.

Beitrag wurde zuletzt am 06.12.09 um 11:36:48 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastatureingaben VOR Windows abfangen 
Autor: danieljena
Datum: 21.08.12 22:13

Guten Abend,
diese Beiträge sind zwar schon etwas älter, möchte aber dennoch eine kleine Frage zum Tipp 1991 loswerden.
Kann ich einen Code-Schnipsel einfügen, der mir eine andere Taste an Windows weitergibt als gedrückt wurde?
z.B. Bild-nach-unten Taste wurde gedrückt, aber Windows soll denken Pfeil-rechts

mfg
danieljena
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastatureingaben VOR Windows abfangen 
Autor: timonator
Datum: 10.04.15 15:35

Hallo Leute

Ich möchte den code gerne nutzen, der funktioniert soweit auch, aber nur "Option Strict OFF", was nicht so dolle ist.
Ist nur ein Fehler, aber mit dem bin ich schon überfordert.
Folgende Zeile ...
If (wParam = WM_KEYDOWN) Then
... erzeugt folgenden Fehler:
Fehler bei der Überladungsauflösung, da keine zugreifbare "=" mit diesen Argumenten aufgerufen werden kann: "Public Shared Operator =(value1 As System.IntPtr, value2 As System.IntPtr) As Boolean": "Option Strict On" lässt keine impliziten Konvertierungen von Integer in System.IntPtr zu.

Also wer Zeit und Lust hat, kann ja mal drüber schauen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastatureingaben VOR Windows abfangen 
Autor: Manfred X
Datum: 11.04.15 14:26

Hallo!

If wParam = New System.IntPtr(WM_KEYUP) Then
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tastatureingaben VOR Windows abfangen 
Autor: timonator
Datum: 11.04.15 16:26

Oh man, so einfach ist das ! Einfach nur eine neue Instanz erzeugen !
Jetzt verstehe ich, was mir die Fehlermeldung eigentlich sagen will.

Danke für die Hilfe !
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um einen neuen Beitrag 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