Systemweit ermitteln, ob ein "(" per Tastatur eingegeben wurde - UNABHÄNGIG vom Tastaturlayout

  • Ein Code soll ausgeführt werden, wenn der User eine öffnende Klammer "(" per Tastatur eingibt, unabhängig vom Tastaturlayout und unabhängig davon, wo die Eingabe hingeht, also eine systemweite Erkennung.

    Wie kann man das erreichen?

    Edit: Beschreibung ergänzt um den kursiv geschriebenen Teil für systemweite Erkennung. Thread-Titel um "systemweit" ergänzt.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

    3 Mal editiert, zuletzt von Professor Bernd (6. Februar 2021 um 20:08)

  • "CallTip" war nur zur Erklärung, wofür die Lösung benutzt werden kann, aber es geht um eine reine AutoIt Lösung. Ein Script soll unabhängig vom Tastaturlayout ermitteln, ob ein "(" per Tastatur eingegeben wurde.

    Um die Misverständnissen vorzubeugen, habe ich den ersten Post geändert.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

    • Offizieller Beitrag

    aber es geht um eine reine AutoIt Lösung. Ein Script soll unabhängig vom Tastaturlayout ermitteln, ob ein "(" per Tastatur eingegeben wurde.

    Nur zur Klarheit: Die Eingabe erfolgt also in einem Input/Editfeld deines Skriptes und das möchtest du auswerten?

    Dann geht das so:

  • Die Situation: Es geht um eine systemweite Erkennung. Ein Au3-Script läuft im Hintergrund und wartet. Der User gibt irgendwann auf der Tastatur "(" ein, das Au3-Script soll das erkennen und einen Code ausführen.

    Dabei soll es unabhängig vom Tastaturlayout sein und unabhängig davon wo die Eingabe des Users hingeht. Es soll einfach festgestellt werden, wenn der User die Taste(n) für "(" drückt.

    Beispiel (das aber NICHT funktioniert, sobald ein anderes Tastaturlayout benutzt wird :!:) :

    AutoIt
        ; Wenn die Tasten Shift+8 gedrückt werden, ergibt das "(" bei DE Keyboard Layout.
        If _IsPressed("10", $hDLL) And _IsPressed("38", $hDLL) Then
        ...

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Professor Bernd 6. Februar 2021 um 20:08

    Hat den Titel des Themas von „Ermitteln, ob ein "(" per Tastatur eingegeben wurde - UNABHÄNGIG vom Tastaturlayout“ zu „Systemweit ermitteln, ob ein "(" per Tastatur eingegeben wurde - UNABHÄNGIG vom Tastaturlayout“ geändert.
    • Offizieller Beitrag

    Ich weiß immer noch nicht, was du nun willst.

    Im von mir gezeigten Bsp. ist das Layout egal. Wobei ich vermutet hatte, dass du eine Eingabe in ein Textfeld erwartest.

    Dein letzter Post legt nun nahe, dass du einen Hotkey auswerten willst. Falls ja:

    Ein Hotkey verwertet immer den Virtual Key Code - und dieser ist abhängig vom Layout. Um das "universal" zu gestalten muss eine Art Übersetzungstabelle bereitgestellt werden, die das ausgelesene Layout den gewünschten Codes zuordnet.

  • Ich weiß immer noch nicht, was du nun willst.

    Ok, dann hier mal ausführlicher. ;)

    Auf einem PC startet der User ein Script "Test.au3". Das Script läuft unsichtbar, ohne GUI, ohne Controls und wartet, bis der User auf seiner Tastatur die Tasten drückt, die bei seinem Keyboardlayout das Zeichen "(" ergeben. Dann zeigt Test.au3 eine MsgBox an: "Du hast eine öffnende runde Klammer "(" eingegeben."

    Was ich will ist eine Lösung, wie Test.au3 das erkennen kann, unabhängig vom Keyboardlayout.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Ah, noch was. Ich habe KEINEN Virtual Key Code für "(" finden können.

    Um ein "(" zu schreiben, drückt man die Taste(n) bei folgenden Tastaturlayouts:

    • DE: Shift+8
    • EN: Shift+9
    • FR: 5
    • ...

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Zur Veranschaulichung hier ein Lücken-Code.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Ah, noch was. Ich habe KEINEN Virtual Key Code für "(" finden können.

    Nur so als Info am Rande ;) :

    Zumindest nach https://docs.microsoft.com/en-us/windows/…rtual-key-codes scheint es auch keinen Virtual Key Code für "(" zu geben. Andy hat vor geraumer Zeit ein schönes Skript erstellt, welches sich an dem o.a. Link orientiert :

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Vielleicht stehe ich auf der Leitung, aber wie hilft das weiter. :/

    Was Dein spezielles Problem angeht, vermutlich wenig ;).

    Ich wollte nur auf die Möglichkeit hinweisen, dass es den von Dir erhofften Virtual Key Code, also :

    -> "(" hat auf allen Tastaturlayouts der Welt den Einheitscode XX

    so gar nicht gibt.

    warum wird denn nicht auf Char() geprüft?

    Etwas in der Art hatte ich mir nach dem Beitrag von BugFix auch bereits gedacht.

    Im Gegensatz zu Bernd haben wir uns aber nicht eine gefühlte Ewigkeit mit dieser Thematik auseinandergesetzt. Daher fehlt uns wahrscheinlich der tiefere Einblick.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • warum wird denn nicht auf Char() geprüft?

    Oder ändert sich dieser mit dem tastaturlayout?


    Ich glaub char(28) sollte doch der ( entsprechen?!

    Meinst du MsgBox(0, "", Chr(40)) ?

    Wie kriegst du den ASCII-Code, wenn der User die Tastatur drückt?

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • OK, letzter Post war vieleicht ungenau ausgedrückt, ist aber auch nicht einfach. Was ich meinte ist, wie sieht der Code denn dann aus, der die Tastatureingabe prüft, ob ein "(" geschrieben wurde? In Posting #9 habe ich einen Lücken-Code gepostet. Was wäre denn dann in die Funktion zu schreiben?

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

    • Offizieller Beitrag

    Es gibt von Haus aus keine Möglichkeit dafür.

    Du musst also zusammentragen, wie das gewünschte Zeichen in jedem existierenden KB-Layout dieser Welt gebildet wird. Dafür erstellst du ein Mapping.

    - Dein Programm liest beim Start das verwendete Layout aus.

    - Nun weißt Du durch Abgleichen mit deiner Map, welcher Code/Codesequenz in diesem Layout genutzt wird.

    - Im Hintergrund deines Skriptes muss ein Keyboard-Hook laufen. Dort wird dann entsprechend des Codes reagiert.

    Nicht umsonst liegen die Hotkeys in internationaler Software im Normalfall ausschließlich auf Tasten, die in allen Layouts gleich belegt sind. (a bis z, 0 bis 9, Strg, Umsch, Alt, AltGr, Win).

    Wer z. B. den Editor Sublime Text kennt, hat das Problem schon erlebt (Dort wurde das Thema nicht sauber angegangen). Dort wurden standardmäßig Hotkeys für die Mac-Tastatur verwendet. Man musste also erst mal einiges ummappen.

  • Deinen Vorschlag hatte ich auch schon im Sinn, aber das ist eine Schwei... Menge Arbeit, nur um 1 Zeichen zu überwachen.

    Die ander Idee, die ich hatte, lässt sich simple beschreiben, aber äußerst schwierig umsetzen: Mein Script mit einem Edit ausstatten, per Keyboard-Hook ständig die Eingaben an das eigene Edit senden und auswerten, wenn ein "(" geschrieben wird. Das habe ich soweit auch schon hingekriegt, aber dann wurde die Eingabe natürlich aus dem MsgQueue entfernt und kam nicht mehr beim Programm an, für das sie eigenltich gedacht war. Die Eingabe müsste also quasi verdoppelt werden: 1x ans eigene Edit + 1x ans ürsprünglich gedachte Programm.

    Jetzt gehen wahrscheinlich alle Alarmglocken an: "Das ist ja böser Code! :evil: Ohwe, ohwe!" Naja, mal sehen, vielleicht weiß ja jemand eine Lösung, die nicht so böse ist!?

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Jetzt gehen wahrscheinlich alle Alarmglocken an:

    Menschen, die allergisch auf Keylogger nahe Themen reagieren, dürften mittlerweile eh schon alle in's Koma gefallen sein :rofl:. Wahrscheinlich wäre die Auslagerung dieser Diskussion in eine (Gruppen-)Konversation, da dann nicht öffentlich zugängig, aber wirklich zu überdenken.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Lottich du bist ja "lustich"! :D

    Das grobe Vorgehen ist uns allen klar. Das "wie" ist die Frage! Wie kommt man von Tastaturdrücken zum Zeichen!?

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.