G13 Tastaturabfrage - deutschsprachige UDF Übersicht - (war NomadMemory.au3)

  • Guten Morgen,

    im Beitrag "https://autoit.de/index.php/Thread/25392-LUA-script-G-series-AutoIT/" steht, dass man zur Nutzung der Tasten der Logitech G13 die NomadMemory.au3 braucht.

    Ich möchte die Tasten der Logitech G13 nutzen, um Funktionen mit Autoit auszuführen.

    Woher bekomme ich die aktuelle Version der NomadMemory.au3?

    Gibt es (hier im Forum) ein rar-Paket, in dem die UDFs aktuell enthalten sind?


    Auf welcher (deutschsprachigen) Seite gibt es eine gute Übersicht über alls UDFs und vor allem über "Neuerscheinungen"?

    Vielen Dank im voraus :)

  • Danke für den Hinweis mit der WinApi. Leider funktioniert das nicht.
    In der WinApi finde ich keine Funktionen, wie:

    _memoryopen
    _MemoryRead
    ...

    daher auch Fehler wie:

    $Open = _memoryopen(ProcessExists("LCore.exe"))
    oder
    $Open = _memoryopen(ProcessExists("LGDCore.exe"))

    $Open = ^ ERROR


    Vielleicht hat jemand noch einen Link zur "NomadMemory.au3" bzw. kann die hochladen?


    "Übrigens gibt es auch eine UDF, um direkt aus AutoIT auf das LCD der G-Serie zuzugreifen. Damit kannst du LUA ganz vergessen"

    Die ist nur für das LCD.

    Ich möchte nicht das LCD ansteuern, sondern "nur" die Tastendrücke der G-13 mit Autoit registrieren (als Hotkey).

    4 Mal editiert, zuletzt von AutoMit (9. Februar 2016 um 18:41)

  • Auch wenn ich vermute, dass es nicht zielführend ist...

    Zur WinAPI gehören wesentlich mehr Teile als nur die Hand voll Funktionen die in der WinAPI.au3 stecken. Die relevanten Operationen mit Speicherstellen finden sich in der Kernel32.dll wieder, der Wrapper dazu liegt in Memory.au3.

    Mit den Alloc-Funktionen kannst du dir einen Teil im Ram reservieren und anschließend mit _MemRead und _MemWrite und _MemMoveMemory darin herumwurschteln. Um in fremden Prozessen zu arbeiten muss man erstmal die Erlaubnis einholen (Sedebugprivilege).

    Diese inzwischen zehn Jahre alte UDF werde ich nicht verlinken und nicht hochladen, da damit zu 99% Unfug betrieben wird und soetwas möchte ich nicht unterstüzen. Ich frage mich echt wie dieser Müll es immer wieder schafft aufzutauchen. Die UDF ist über zehn jahre alt, unhandlich, und inzwischen vollständig in der Memory.au3 integriert.

    Edit: Außerdem glaube ich, dass es mit deinen AutoIt-Kenntnissen unmöglich ist ein Programm zu schreiben was die Software zur Steuerung der Tastatur imitiert und die G-Tasten mit Funktionen verlinkt. Versuche doch stattdessen das AutoIt-Programm OHNE irgendwelche Umwege zu schreiben und es dann einfach mit der Standard Logitech-Software mit der entsprechenden G-Taste zu verlinken.

    Also nochmal ganz langsam:
    - Schreibe ein Programm das eine MsgBox aufmacht in der HelloWorld steht.
    - Nenne das Programm "G05.exe"
    - Benutze die Logitechsoftware um das Programm mit der Taste "G5" zu verlinken. Guckst du hier
    - Drücke mit viel Liebe und Leidenschaft auf die Taste G5.
    - Geht jetzt eine HelloWorld MsgBox auf bist du fertig.
    - Mit deinem neu gewonnen Wissen kannst du jedes beliebige Programm in AutoIt schreiben und es auf jede beliebige Taste legen.
    - Obacht: Dein Programm muss sich automatisch beenden nachdem sein Job erfüllt ist, sonst hast du irgendwann tausende Programme laufen
    - Tipp: Schau dir _Singleton in der AutoIt-Hilfe an um das gleiche Programm nicht mehrfach auszuführen
    - Vorteil: Einfach
    - Nachteil: (Taste gedrückt -> kurze Wartezeit -> Programmstart) Die Reaktionszeit ist nicht die Bombe, da jedes Mal ein Programm gestartet- und beendet werden muss. (bei SSD gehts schnell, aber bei alten HDDs könnte das nerven)

    lg
    M

  • Ich stelle meine Frage mal anders.

    Wie kann ich folgendes Script zum Laufen bringen, ohne die erbetene

    #include <NomadMemory.au3>

    Es ist das Script, aus dem oben verlinkten Beitrag hier im Forum.


    Die "LGDCore.exe" heißt heute "Lcore.exe" - ansonsten sehe ich in dem Script keine Stolpersteine, warum ich das nicht mit
    #include <NomadMemory.au3>
    testen sollte, ob die Tasten der Logitech G13 Tastatur erkannt werden. Der Beitrag ist rund 4 Jahre alt. Auch wenn die NomadMemory.au3 schon älter sein sollte, basiert das Script auf dieser Datei.

    Vielleicht gibt es auch eine bessere Lösung, um die Tasten der Logitech G13 Tastatur zu erkennen?
    (es geht nicht um die LCD Ansteuerung - nur um die Tastenerkennung)

    Wenn ich das richtig sehe, brauche ich für obiges Script:

    $Open = _memoryopen(ProcessExists("LCore.exe"))
    ... kann ich dafür nehmen?: __Mem_OpenProcess (Memory.au3)

    $Read = _MemoryRead($Adresse , $Open, 'ubyte')
    ... kann ich dafür nehmen?: _MemRead (Memory.au3)

    Für beide herausgesuchten Ersatz-Funktionen (ist es wirklich ein Ersatz?) steht in der Memory.au3:

    #INTERNAL_USE_ONLY

    Und dennoch könnte das funktionieren?

    3 Mal editiert, zuletzt von AutoMit (9. Februar 2016 um 19:42)

  • Das kann ja nur ERROR bringen, mal geschaut, was ProcessExists zurückliefert?!

    Ergebnis: 1960
    ... und das ist laut Taskmanager die PID der lcore.exe

    BugFix, warum kann das nur Error bringen?

    Hier bringt es Error, weil die "#include <NomadMemory.au3>" wegen der auf meinem System fehlenden "NomadMemory.au3" nicht geht und damit fehlt die Funktion "_memoryopen".

  • Die "LGDCore.exe" heißt heute "Lcore.exe" - ansonsten sehe ich in dem Script keine Stolpersteine, warum ich das nicht mit
    #include <NomadMemory.au3>
    testen sollte,

    Bei dir reicht es nicht mal dazu, durch 20 Zeilen Code durchzublicken....
    Du hast noch nicht den Dunst vom Schimmer einer blassen Ahnung was der gecopypastete Code macht, aber "ich sehe keine Stolpersteine..." . Da fehlen mir ehrlich gesagt die Worte...
    Dein "Programm" liest aus der laufenden LGDCore.exe-Datei aus der Speicherstelle 0x0012F590 ein Byte aus, und interpretiert dieses als "letzte gedrückte G-Taste".
    Ist diese Speicherstelle bei der "neuen" der Datei Lcore.exe identisch? Niemals.... X/

  • Wer weiß, vielleicht stimmt "$Adresse = 0x0012F590" noch.

    Wohl nicht, nur die "$Adresse = 0x0012F590" muss ja irgendwie damals gefunden worden sein. Warum sollte das heute nicht möglich sein?

    Hier ist soviel Fachwissen versammelt, dass eine Adresse doch ermittelt werden kann.

    Andy, ich suche eine Lösung (edit), um das Script von damals wieder zum Laufen zu bringen - siehe Beitrag 1.

    Andy schreibt:
    "Du hast noch nicht den Dunst vom Schimmer einer blassen Ahnung was der gecopypastete Code macht, aber "ich sehe keine Stolpersteine..." . Da fehlen mir ehrlich gesagt die Worte..."

    Ehrlich gesagt, verwenden wir alle UDFs und UDFs sind auch nichts weiter als "gecopypastete Code", in den die meisten noch nicht einmal einen Blick geworfen - geschweige verstanden - haben, (Anwesende - außer mich natürlich ;) - ausgenommen).

    3 Mal editiert, zuletzt von AutoMit (9. Februar 2016 um 20:36)

  • Die "LGDCore.exe" heißt heute "Lcore.exe" - ansonsten sehe ich in dem Script keine Stolpersteine,

    Ich sehe da durchaus Stolpersteine. Die Exe wird nicht nur einen neuen Namen tragen, sondern evtl. auch andere Bereiche in ihrem reservierten Arbeitsspeicher nutzen ($Adresse = 0x0012F590;). Das obige Script würde also vermutlich nur Datenmüll liefern, selbst wenn du es technisch mit Hilfe der memory.au3 oder nomadmemory.au3 zum laufen bekommst. Im Speicher fremder Anwendungen rumzuwurschteln erfordert wesentlich mehr als "copy and paste" Programmierung.

    EDIT: Klar kann man diese Stelle im Speicher auch heute noch "problemlos" ermitteln und dann im Script hinterlegen, aber dafür muss man ein wenig Ahnung haben.

    Woher bekomme ich die aktuelle Version der NomadMemory.au3?

    Also mal ernsthaft. Auch wenn man der englischen Sprache nicht mächtig ist sollte man Google bemühen können.
    Google -> "nomadmemory.au3" -> 1. Treffer, 2. Posting

    Ob das die letzte und neueste Version ist kann ich dir nicht sagen, interessiert mich persönlich aber auch nicht, da du per Google ohne große Mühe mit Sicherheit jedemenge weitere und evtl. aktuellere Downloads finden kannst wenn du nur 5min deiner Zeit dafür opferst.


    Vielleicht gibt es auch eine bessere Lösung, um die Tasten der Logitech G13 Tastatur zu erkennen?

    Mars hat dir doch schon eine alternative Lösung genannt. Die Logitech Software erlaubt dir im Übrigen auch ganze Makros bzw. Tastenkombinationen für einzelne G-Tasten zu definieren. Du könntest in deinem Script also einfach eine "normale" Tastenkombination als Hotkey festlegen und dann durch Drücken der G-Taste diese komplexe Tastenkombination auslösen, worauf dein Script dann anspringen dürfte.

  • Ist es nicht möglich, dass ich dass - was vor 4 Jahren im Thread

    https://autoit.de/index.php/Thread/25392-LUA-script-G-series-AutoIT/?postID=206390#post206390']LUA-script G-series & AutoIT
    (Post 6)

    funktionierte, mit Eurer Hilfe und Eurem Fachwissen wieder zum Laufen bringe?

    Wenn ich das Programm richtig verstanden habe, werden die Tasten der G13 Tastatur registriert. Darunter eine Select-Abfrage und ein Funktionsaufruf. Ist das falsch gedacht?

    Die Hotkeys (die Tasten der G13 Tastatur) sollen auf Einzelfunktionen in einem umfangreichen Script (noch in Arbeit) verweisen (keine kleinen kompillierten Einzelprogramme).

    Es scheint doch "nur" an der Speicheradresse sowie 2 Funktionen zu liegen, die heute scheinbar in anderen UDF untergebracht sind.

    Klar ist das eine harte Nuss und bei weitem nicht einfach und ja - es übersteigt mein Wissen. Deswegen frage ich hier.


    Wie kann ich meine Bitte an Euch und mein Ziel formulieren, dass Ihr versteht, dass ich das Script von damals zum Leben erwecken möchte?

    Alternativlösungen bin ich aufgeschlossen (Sekundär-Ziel) - mein Primärziel ist es, das Script von vor 4 Jahren wieder nutzbar zu machen (edit), natürlich unter dem aktuellen System (Windows 8 / 10 / 64 bit) und den aktuellen Treibern.

    Und ich möchte mit Eurer Hilfe lernen, wie das möglich ist.

    4 Mal editiert, zuletzt von AutoMit (9. Februar 2016 um 20:15)

  • Kein Problem. Benutze Google und besorg dir darüber die 4 Jahre alten Versionen der Treibersoftware, von Autoit und der nomadmemory.au3
    Schon läuft das Script. (in der Theorie zumindestens)

  • Kein Problem. Benutze Google und besorg dir darüber die 4 Jahre alten Versionen der Treibersoftware, von Autoit und der nomadmemory.au3
    Schon läuft das Script. (in der Theorie zumindestens)

    Es kann nicht laufen, da der Treiber veraltet ist und unter Windows 8 / 10 nicht mehr funktioniert.

    Wie hier schon bemerkt wurde, hat sich die Speicheradresse bei den aktuellen Treibern geändert.

    Wie kann man die neue Speicheradresse herausfinden?

    Eine 4 Jahre alte Version der Treiberversion zu verwenden, macht keinen Sinn - die neue Version ist o.k. und auf Windows 8 / 10 optimiert - darauf soll das Script angepasst werden. Und dazu bat ich hier um Hilfe.

    • Offizieller Beitrag

    Mal ein paar Infos, um dich von der sinnfreien Suche nach "NomadMemory" abzubringen.
    - Nomad ist ein User im EN-Forum
    - vor langer, langer Zeit bastelte er die NomadMemory.au3
    - da auch AutoIt-Versionen sich weiterentwickeln, entstand daraus später die verbesserte Memory.au3 (derselbe Autor)

    Und deshalb gibt es keinen Grund mehr einer UDF nachzujagen, die schon lange von der Entwicklung überrollt wurde.

  • Mal ein paar Infos, um dich von der sinnfreien Suche nach "NomadMemory" abzubringen.


    @BugFix - danke für die Info. Jagd nach "NomadMemory" eingestellt :)

    Kurs Richtung Ziel: G13 Tastaturabfrage unter Windows 8 / 10 / 64 bit - aktuelle Treiber Logitech Lcore.exe

    ProcessExists("LCore.exe") = PID wird zurückgegeben, schon mal gut :)

    (1) Welche Funktionen aus der neuen "Memory.au3" kann ich für das Script aus Post 6 nehmen? Jene, die ich oben in Post 6 geschrieben habe?

    (2) Wie finde ich die neue Speicheradresse, um die Zeile "$Adresse = 0x0012F590" zu aktualisieren?

    (3) Muss ich noch etwas beachten, um das Script zu aktualisieren?

    Einmal editiert, zuletzt von AutoMit (9. Februar 2016 um 20:32)

  • (2) Wie finde ich die neue Speicheradresse, um die Zeile "$Adresse = 0x0012F590" zu aktualisieren?

    Ich verweise dich nochmals auf Google. Solange du noch nichtmal im Stande bist Google richtig zu nutzen brauchen wir dir erst garnicht erklären wie man die Speicheradresse findet.

    Letzter Tipp... "youtube nomadmemory.au3" -> 1. Treffer (sogar extra für dich in deutscher Sprache)

  • Ach misterspeed, ...


    misterspeed schrieb: "Letzter Tipp... "youtube nomadmemory.au3" -> 1. Treffer (sogar extra für dich in deutscher Sprache)"


    Lies doch bitte Post 14 und 15 - "nomadmemory.au3" ist dank Bugfix Geschichte. Daher neuer Kurs "Memory.au3" - siehe Post 15.

  • Du wolltest wissen wie man die Speicheradresse ermittelt oder etwa nicht? Die Vorgehensweise hat absolut nichts mit Autoit zu tun, somit ist die von mir vorgeschlagene Google Recherche auch dann die Antwort auf deine Frage wenn du die Daten mit anderen Mitteln oder Funktionen ausliest. Aber da du das Video nichtmal angesehen hast kannst du das natürlich nicht wissen, ganz klar mein Fehler was erwarte ich auch Eigeninitiative von dir.

    Davon ab sollten die beiden Funktionen aus der genannten UDF auch heute noch funktionieren, da sie lediglich die kernel32.dll von Windows nutzen. Ein Blick in die UDF hätte genügt um das selbst festzustellen, aber diese hast du dir ja vermutlich immernoch nicht heruntergeladen. Selbstverständlich könnte es sein, dass sich seit Windows XP/VISTA/7 so einiges geändert hat und die Funktion nicht mehr richtig arbeitet, aber das müsstest du schon selbst testen und ggf. mit der memory.au3 und MSDN abgleichen. (Stichwort Eigeninitiative)

  • Du wolltest wissen wie man die Speicheradresse ermittelt oder etwa nicht? Die Vorgehensweise hat absolut nichts mit Autoit zu tun

    Man kann mit Autoit nicht die Speicheradresse ermitteln?

    Das erstaunt mich. Wenn ich mir vorstelle, was man alles mit dlls etc. machen kann, dann sollte mit Autoit und der richtigen UDF bestimmt auch eine Speicheradresse ermittelt werden können.

    Der Verweis auf Google mag richtig sein - nur würde ich Dich sicherlich nicht, wenn Du mich fragst, wie komme ich zur nächsten Tankstelle in die nächste Buchhandlung schicken, damit Du Dir dort einen Stadtplan kaufst, um nachzusehen, wo die nächste Tankstelle ist. Obwohl das im Vergleich zu Google und Speicheradresse herausfinden noch eine leichte Aufgabe wäre :)

    Dennoch danke.

    Ich lege das Thema derzeit auf Eis, da es für mich zu schwierig ist. Und vielleicht stolpert jemand bei der G13 Suche über das Thema. Wobei die Chancen gering sind - im Forum kann man nur ab 4 Stellen suchen :)

    Allen ein schönes Wochenende.