Tasten-Code-Konstanten

Hallo,
es gibt doch in VB 6 etliche dieser Tasten-code-Konstanten, mittels derer ich Tastatureingaben auswerten kann. Z.B. "vbkeyBack " wenn die
Backspace (Rücklösch)-Taste gedrückt wurde.
Aber wie ist es mit Tastenkombinationen? Wer kann mir sagen, wie ich z.b. die Kombinationen für strg-c oder strg-v ermitteln kann?

Herzlichen Dank
alex

Hallo Alex

wo wertest du denn die Tastureingaben aus?
Wenn du auf der Form zum Bsp. die KeyPreview Eigenschaft auf True setzt, so löst du jedesmal beim Druck einer Taste das Ereigniss Form_KeyDown aus wobei du als Parameter Shift und Keycode erhaelst.

Du hast folgende Tasten unter VB definiert

Tasten-Codes

Konstante Wert Beschreibung
vbKeyLButton &H1 Linke Maustaste
vbKeyRButton &H2 Rechte Maustaste
vbKeyCancel &H3 ABBRECHEN-TASTE
vbKeyMButton &H4 Mittlere Maustaste
vbKeyBack &H8 RÜCKTASTE
vbKeyTab &H9 TAB-TASTE
vbKeyClear &HC ENTF-TASTE
vbKeyReturn &HD EINGABETASTE
vbKeyShift &H10 UMSCHALTTASTE
vbKeyControl &H11 STRG-TASTE
vbKeyMenu &H12 MENÜ-TASTE
vbKeyPause &H13 PAUSE-TASTE
vbKeyCapital &H14 FESTSTELLTASTE
vbKeyEscape &H1B ESC-TASTE
vbKeySpace &H20 LEERTASTE
vbKeyPrior &H21 BILD AUF-TASTE
vbKeyNext &H22 BILD AB-TASTE
vbKeyEnd &H23 ENDE-TASTE
vbKeyHome &H24 POS1-TASTE
vbKeyLeft &H25 NACH-LINKS-TASTE
vbKeyUp &H26 NACH-OBEN-TASTE
vbKeyRight &H27 NACH-RECHTS-TASTE
vbKeyDown &H28 NACH-UNTEN-TASTE
vbKeySelect &H29 AUSWAHLTASTE
vbKeyPrint &H2A DRUCK-TASTE
vbKeyExecute &H2B AUSFÜHREN-TASTE
vbKeySnapshot &H2C SNAPSHOT-TASTE
vbKeyInsert &H2D EINFG-TASTE
vbKeyDelete &H2E ENTF-TASTE
vbKeyHelp &H2F HILFE-TASTE
vbKeyNumlock &H90 NUM-FESTSTELL-TASTE
KeyA bis KeyZ entsprechen den jeweiligen ASCII-Zeichen 'A' bis 'Z'

Konstante Wert Beschreibung
vbKeyA 65 A-TASTE
vbKeyB 66 B-TASTE
vbKeyC 67 C-TASTE
vbKeyD 68 D-TASTE
vbKeyE 69 E-TASTE
vbKeyF 70 F-TASTE
vbKeyG 71 G-TASTE
vbKeyH 72 H-TASTE
vbKeyI 73 I-TASTE
vbKeyJ 74 J-TASTE
vbKeyK 75 K-TASTE
vbKeyL 76 L-TASTE
vbKeyM 77 M-TASTE
vbKeyN 78 N-TASTE
vbKeyO 79 O-TASTE
vbKeyP 80 P-TASTE
vbKeyQ 81 Q-TASTE
vbKeyR 82 R-TASTE
vbKeyS 83 S-TASTE
vbKeyT 84 T-TASTE
vbKeyU 85 U-TASTE
vbKeyV 86 V-TASTE
vbKeyW 87 W-TASTE
vbKeyX 88 X-TASTE
vbKeyY 89 Y-TASTE
vbKeyZ 90 Z-TASTE
Key0 bis Key9 entsprechen den jeweiligen ASCII-Zeichen '0' bis '9'

Konstante Wert Beschreibung
vbKey0 48 0-TASTE
vbKey1 49 1-TASTE
vbKey2 50 2-TASTE
vbKey3 51 3-TASTE
vbKey4 52 4-TASTE
vbKey5 53 5-TASTE
vbKey6 54 6-TASTE
vbKey7 55 7-TASTE
vbKey8 56 8-TASTE
vbKey9 57 9-TASTE
Tasten auf der Zehnertastatur

Konstante Wert Beschreibung
vbKeyNumpad0 &H60 0-TASTE
vbKeyNumpad1 &H61 1-TASTE
vbKeyNumpad2 &H62 2-TASTE
vbKeyNumpad3 &H63 3-TASTE
vbKeyNumpad4 &H64 4-TASTE
vbKeyNumpad5 &H65 5-TASTE
vbKeyNumpad6 &H66 6-TASTE
vbKeyNumpad7 &H67 7-TASTE
vbKeyNumpad8 &H68 8-TASTE
vbKeyNumpad9 &H69 9-TASTE
vbKeyMultiply &H6A MULTIPLIKATIONSZEICHEN (\*)
vbKeyAdd &H6B PLUSZEICHEN (+)
vbKeySeparator &H6C EINGABETASTE
vbKeySubtract &H6D MINUSZEICHEN (-)
vbKeyDecimal &H6E DEZIMALZEICHEN (.)
vbKeyDivide &H6F DIVISIONSZEICHEN (/)
Funktionstasten

Konstante Wert Beschreibung
vbKeyF1 &H70 F1-TASTE
vbKeyF2 &H71 F2-TASTE
vbKeyF3 &H72 F3-TASTE
vbKeyF4 &H73 F4-TASTE
vbKeyF5 &H74 F5-TASTE
vbKeyF6 &H75 F6-TASTE
vbKeyF7 &H76 F7-TASTE
vbKeyF8 &H77 F8-TASTE
vbKeyF9 &H78 F9-TASTE
vbKeyF10 &H79 F10-TASTE
vbKeyF11 &H7A F11-TASTE
vbKeyF12 &H7B F12-TASTE
vbKeyF13 &H7C F13-TASTE
vbKeyF14 &H7D F14-TASTE
vbKeyF15 &H7E F15-TASTE
vbKeyF16 &H7F F16-TASTE

um nun noch herauszufinden ob die Taste Alt oder Strg gedrueckt wurde, mache dich dem Parameter Shift zu nutze

 shift = 1 --\> Shift Taste wurde gedrueckt
 shift = 2 --\> Strg Taste wurde gedrueckt
 shift = 4 --\> ALT Taste wurde gedrueckt

Wie du nun unschwer erkennen kannst, du somit ziemlich jede Tastenkombination erkennen!

Beispiel:

Private Sub Form\_KeyDown(KeyCode As Integer, Shift As Integer)
 If Shift = 2 And KeyCode = vbKeyC Then MsgBox "STRG + C wurde gedrueckt"
 If Shift = 2 And KeyCode = vbKeyV Then MsgBox "STRG + V wurde gedrueckt"
 If Shift = 6 And KeyCode = vbKeyV Then MsgBox "STRG + ALT + V wurde gedrueckt"
End Sub

MFG Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Anno,
viele Dank für die ausführliche Übersicht der Tasten-Codes…
Zur Auswertung: die gedrückten Tasten werden im KeyPress-Ereignis ausgewertet. Wie also kann ich dort ermitteln ob, z.B. ein Einfügevorgang mittels Strg-V erfolgen soll?
Dank für Deine Mühe,

alex

Hallo, Alex!

viele Dank für die ausführliche Übersicht der Tasten-Codes…
Zur Auswertung: die gedrückten Tasten werden im
KeyPress-Ereignis ausgewertet. Wie also kann ich dort
ermitteln ob, z.B. ein Einfügevorgang mittels Strg-V erfolgen
soll?

Generell könntest Du Dir einfach folgende Zeile ins KeyPress schreiben: Msgbox "Taste: "& KeyAscii. Dann drückst Du einfach die Tasten, die Du gerne hättest, und bekommst die ASCII-Codes, die Du auswerten kannst, in der Message Box angezeigt.

Weiterhin generell solltest Du aber eher KeyDown verwenden, weil Du hier wirklich jede Taste genau incl. möglicher Zusatztasten abfangen kannst; KeyAscii = 13 könnte z. B. die Return-Taste sein oder Strg+M, was u. U. (D)einer Programmlogik nach unterschiedliche Bedeutung haben kann (z. B. „normaler“ Zeilenumbruch bei Return, Strg+M als Hotkey für irgendwas anderes).

Zuguterletzt: Wenn es nur um die standardmäßigen Windows-Tastaturkürzel (Kopieren, Einfügen) geht, würde ich so was gar nicht per Code behandeln, sondern einfach das funktionierende und bestehende nehmen.

Gruß, Manfred

Hallo Manfred,
Danke für Deine Tips
Mir geht es ganz konkret um folgendes,
ich muss verhindern, das bestimmte Eingaben in eine Textbox erfolgen können. Über das Key-Press-Ereignis habe ich exakt definiert, welche Tastatureingaben akzeptiert und welche abgelehnt werden.
Nun möchte ich zusätzlich verhindern, dass die abzuweisenden Eingaben durch das Einfügen aus der Zwischenablage in die Textbox gelangen können.
Daher meine Frage nach den Tasten-Code-Konstanten für Tastenkombinationen.

Zuguterletzt: Wenn es nur um die standardmäßigen
Windows-Tastaturkürzel (Kopieren, Einfügen) geht, würde ich so
was gar nicht per Code behandeln, sondern einfach das
funktionierende und bestehende nehmen.

Genau das habe ich vor.

herzliche Grüße
alex

Hallo, Alex!

Danke für Deine Tips
Mir geht es ganz konkret um folgendes,
ich muss verhindern, das bestimmte Eingaben in eine Textbox
erfolgen können. Über das Key-Press-Ereignis habe ich exakt
definiert, welche Tastatureingaben akzeptiert und welche
abgelehnt werden.
Nun möchte ich zusätzlich verhindern, dass die abzuweisenden
Eingaben durch das Einfügen aus der Zwischenablage in die
Textbox gelangen können.
Daher meine Frage nach den Tasten-Code-Konstanten für
Tastenkombinationen.

Wie gesagt, bau Dir die Messagebox rein, die die Codes ausgibt. Mache ich auch immer so.
Achte aber dann auch darauf, dass bestimmte Aktionen auch mit der Maus ausgeführt werden können (Kontextmenüs rechte Maustaste) etc.

Gruß, Manfred

Hallo Alex,

ok das habe ich verstanden. Aber generell würde es so klappen.
Mit dem Keypress Ereigniss kannst du in dem Fall nichts anfangen! da du dort nicht die CTRL Taste abfragen kannst.
Mache dir das Ereigniss KeyDown zu nutzen. Dort kannst du abfragen ob auch die CTRL Taste gedrueckt wurde.

Aber nun mal ein bsp :smile:

Du hast eine text in der zwischenablage. Du drueckst nun STRG+V zum einfügen! Du kannst dies abfangen und irgendwelchen Quelltext fortsetzen, aber zu dem Zeitpunkt wurde der text noch nicht eingefuegt!
Erst nach verlassen des Ereignisses wird der text eingefuegt, durch Windows.
Um das vorhaben zu realsieren poste ich dir ein kleines Demo, wie du es verhindern kannst.
Desweiteren hat Manfred auch gesagt das du an das Kontexmenu denken musst.( rechte Maustaste ins textfeld)
Aber dieses abzuschalten bedarf keiner grossen muehe :smile:

so nun ein bsp. wie du STRG+V unterbindest

Dim delete As Boolean 'Flag ob der text gelöscht werden soll
Dim oldtext As String 'Alter text wird gespeichert

Private Sub Text1\_Change()
 If delete Then 'wenn gelöscht werden soll
 delete = Not (delete) 'Delete auf false setzen
 Text1.Text = oldtext 'Alten Text zuweisen
 Text1.SelStart = Len(Text1) 'Cursor ans textende setzen
 End If
End Sub

Private Sub Text1\_KeyDown(KeyCode As Integer, Shift As Integer)
 If Shift = 2 And KeyCode = vbKeyV Then 'Wenn STRG +V dann
 delete = True 'Delete auf true setzen
 oldtext = Text1.Text 'Den Inhalt von text1 in oldtext speichern
 End If
End Sub

MFG Alex

Hallo Alex,

ok das habe ich verstanden. Aber generell würde es so klappen.
Mit dem Keypress Ereigniss kannst du in dem Fall nichts
anfangen! da du dort nicht die CTRL Taste abfragen kannst.

Hallo Anno-Alex :wink:,
noch einmal Dank für deine Anregungen, aber warum kann ich STRG-V nicht im KeyPress -Ereignis abfangen? STRG allein geht nicht, das stimmt schon. Aber ich habe, so wie Manfred es auch vorgeschlagen hatte, mir den Ascii-Wert für Strg-V anzeigen lassen, und dieser ist „22“ und im Vergleich dazu hat „v“ den Wert „118“. Also sollte das auch so möglich sein?
Dein Tipp mit dem Sichern des alten Textes ist übrigens klasse gewesen.

LG Alex

Hallo Manfred,
Danke für die Hinweise mit der MsgBox und dem Kontextmenü.
Allerdings darf dieses in meiner Anwendung nicht abgeschaltet
werden. Der Nutzer soll nämlich in seinem gewohnten Look - And-Feel
keineswegs eingeschränkt werden.

LG,
Alex

Hallo Alex,

ok das wusste ich nicht. Ich daechte das du dort nur den ersten Tastendruck mitgeteilt bekommst. also entweder das v oder die strg taste. Aber ich habe es gerade mal probiert und gesehen das es klappt.
Wieder was dazu gelernt :wink:
Sicher kannst du das nun auch über dieses ereigniss machen.
Welchen Weg du nun nimmst, liegt an dir :smile:

MFG Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo, Alex!

Danke für die Hinweise mit der MsgBox und dem Kontextmenü.
Allerdings darf dieses in meiner Anwendung nicht abgeschaltet
werden. Der Nutzer soll nämlich in seinem gewohnten Look -
And-Feel keineswegs eingeschränkt werden.

Du kannst das ggf. auch nur für einzelne Steuerelemente abschalten, in dem Du eigene (auch leere) Kontextmenüs erzeugst und denen zuweist. Andernfalls kommt halt das Abfangen der Einfügeoperation per Maus, wenn es nicht erlaubt sein soll. Wobei das Verbieten vom Einfügen dann ja auch nicht „Look-and-feel“ wäre :wink:

Gruß, Manfred