| |
| 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! | Fragen zu Tipps & Tricks und Workshops im vb@rchivRe: 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. | |
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 ! | |
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. | |
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 | |
Re: Tastatureingaben VOR Windows abfangen | | | Autor: Guido Eisenbeis | Datum: 05.12.09 20:22 |
| Prima! *freu* | |
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 | |
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. | |
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 | |
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. | |
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 | |
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. | |
Re: Tastatureingaben VOR Windows abfangen | | | Autor: Manfred X | Datum: 11.04.15 14:26 |
| Hallo!
If wParam = New System.IntPtr(WM_KEYUP) Then
| |
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 ! | |
| Sie sind nicht angemeldet! Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|