Consolen Fenster hooken

  • Ich suche nach einer Möglichkeit das Systemmenu eines Consolen Fensters (CMD Box) zu hooken, um ein Menu Eintrag, das ich angelegt habe, zu kontrollieren.

    D.h., wenn ich z.B. ein Menü Eintrag "About" hinzufüge und dieser selektiert wird, soll dann ein Prozess starten.

    Leider habe ich kein Weg gefunden, um diesen Event zu kontrollieren, wie er normalerweise über WM_NOTIFY möglich wäre.

    Hat jemand eine Idee?


    Edit: dies scheint zu funzen.

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    6 Mal editiert, zuletzt von UEZ (5. Mai 2021 um 22:31)

  • Das Maus Hooking verursacht ein laggen der Mausbewegung. Habt ihr das auch? Falls ja, wie kann man das abstellen?

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Es könnte helfen, wenn du beim Eintritt in die Maus-Hook Funktion zuerst auf die Bedingungen prüfst, bei denen die Funktion nicht arbeiten soll und sie sofort wieder verlässt.

    iCode < 0 Or wParam <> LDown

    Hmm, leider immer noch gleich. Hast du nicht den Effekt?

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Das Maus Hooking verursacht ein laggen der Mausbewegung. Habt ihr das auch?

    Bei mir laggt nichts (Win7 SP1 64-Bit, AutoIt 3.3.14.0)

    EDIT : UEZ

    Würde es ggf. helfen, wenn ich Dir mal eine mit meiner AutoIt-Version kompilierte .exe poste ?

    EDIT2 : UEZ

    Was soll's, hier die Datei (als .zip) ;)

  • UEZ Kann leider nicht testen, bin bis Freitag auf Dienstreise.

    Kein Problem. Dienstreise in der Pandemie Zeit...krass.

    Musashi das ist kein reines Autoit Problem, sondern tritt auch mit FB auf. Vielleicht hast du es geahnt, dass ich dies für den Radio Station Player benötige, da es ein Consolen Proggy ist.

    Ich habe den Hook bereits in FB implementiert und dort habe ich auch das Problem, wie bereits geschrieben. Komisch ist nur, dass der Hook nicht immer in FB greift. Das merke ich daran, dass die Maus wie gewohnt sich bewegen lässt. Wenn dies der Fall ist, dann funktioniert auch der Check, ob der Menu Eintrag selektiert wurde, nicht.

    Ich werde es mal in der VM testen, ob dies vielleicht ein Win10 Ding ist.

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Vielleicht hast du es geahnt, dass ich dies für den Radio Station Player benötige, da es ein Consolen Proggy ist.

    Ja, habe ich - war naheliegend ^^.

    Dass es sich um ein AutoIt-Problem (bzw. AutoIt-Versions-Problem) handelt, hatte ich auch nicht erwartet. Trotzdem konnte ein kleiner Test, quasi als Ausschlussverfahren, nicht schaden. Es soll ja bereits vorgekommen sein, dass sich neuere AutoIt-Versionen anders verhalten als ältere.

    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."

    • Offizieller Beitrag

    Dienstreise in der Pandemie Zeit...krass.

    Eigentlich ist es ein temporärer Wechsel des Arbeitsorts. Einmal im Monat bin ich für eine Woche in der Firmenzentrale. Und wenn ich das Gesülze der Politiker zu "Home Office" höre, wird mir klar, dass die noch nie gearbeitet haben.

    Der Anteil an Dienstleistungstätigkeit liegt sicher deutlich über 50 %. Und wenn du nicht gerade Telefonseelsorger bist kannst du Home Office knicken.

    Ganz zu schweigen von der super-duper digitalen Infrastruktur in DE. Wenn ich an einer Video Konferenz teilnehme ist das im Endeffekt nur Audio - Video habe ich als Standbild, mehr gibt die Bandbreite nicht her. :Face:

  • Wir wechseln uns immer alle 2 Wochen mit meinem Kollegen ab, d.h. eine Personen ist dann immer im Büro.


    Zurück zum Thema: warum kann ich kein Icon dem Menu Eintrag zuweisen?

    In FB habe ich einfach den Maus Hook als Thread laufen und die Maus macht seit dem keine Mucken mehr. In Autoit läuft das noch nicht mit dem Threading...

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Bei mir passiert folgendes, wenn ich das Skript kompiliere und die .exe starte :

    Im Menü der Konsole gibt es den Punkt 'Test' , der aber nichts weiter macht.

    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."

  • Ok, mein Fehler. AutoIt ist bei mir in einem anderen Pfad installiert, da kann er die .gif natürlich nicht finden :whistling:. So sieht es jetzt aus :


    (Edit) UEZ :

    Ich weiß, Du hast die 'Merlin.gif' hier nur zu Demozwecken genommen. Wäre es im Rahmen der Tests aber nicht trotzdem sinnvoll, folgenden Parameter zu verwenden ?

    AutoIt
    $hImage = _GDIPlus_ImageLoadFromFile(StringRegExpReplace(@AutoItExe, "(?i)AutoIt3.exe$", "") & "Examples\GUI\Merlin.gif")

    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."

    Einmal editiert, zuletzt von Musashi (8. Mai 2021 um 12:50)

    • Offizieller Beitrag

    Alternative:

    Verwende doch eine eigene Konsole, die kannst du dann nach Lust und Laune gestalten und mit ihr interagieren.

    Zu dem Thema Eigene Konsole hatten wir vor Jahren hier schon etwas gepostet (ProgAndy und ich). Leider wurden die Links bei der Forenaktualisierung nicht umgestellt und somit sind die Posts unauffindbar. 8|

  • Wenn ich deinen Code ausführe passiert bei mir rein gar nichts. :rolleyes:

    - ich öffne eine Konsole

    - dann starte ich dein Skript

    - in der Konsole ist das Menü unverändert

    Wenn du das Skript von Post#1 kompiliert und gestartet hast, dann sollte nur in die CMD Box "Test selected" erscheinen, wenn du den Menu Eintrag "Test" selektiert hast. In dem nächsten Problem geht das darum, dem Test Eintrag ein Icon zu verpassen.

    Alternative:

    Verwende doch eine eigene Konsole, die kannst du dann nach Lust und Laune gestalten und mit ihr interagieren.

    Zu dem Thema Eigene Konsole hatten wir vor Jahren hier schon etwas gepostet (ProgAndy und ich). Leider wurden die Links bei der Forenaktualisierung nicht umgestellt und somit sind die Posts unauffindbar. 8|

    Primär geht es mir nicht um die Consolen Funtionalität, sondern um die Interaktion mit dem Menu. Eigentlich benötige ich diese Funktionalität eher für mein FB Programm "Radio Station", aber dies kann man vielleicht auch in Autoit gebrauchen, da im Prinzip die WinAPI angezapft wird und die Programmiersprache ist eher Nebensache.

    In FB speichere ich die Menus, danach lösche ich die letzen 4 und am Ende stelle ich sie wieder her. Das funktioniert auch soweit, aber das Icon z.B. für "Close" / "Schließen" wird nicht gesetzt. Ferner würde ich auch gerne für meinen Eintrag ein Icon haben.

    Ok, mein Fehler. AutoIt ist bei mir in einem anderen Pfad installiert, da kann er die .gif natürlich nicht finden :whistling:. So sieht es jetzt aus :


    (Edit) UEZ :

    Ich weiß, Du hast die 'Merlin.gif' hier nur zu Demozwecken genommen. Wäre es im Rahmen der Tests aber nicht trotzdem sinnvoll, folgenden Parameter zu verwenden ?

    AutoIt
    $hImage = _GDIPlus_ImageLoadFromFile(StringRegExpReplace(@AutoItExe, "(?i)AutoIt3.exe$", "") & "Examples\GUI\Merlin.gif")

    Eigentlich wollte ich ein Base64 eingebettes Icon benutzen, aber im Prinzip ist das für diesen Test egal, wo die Quelle ist, sondern die Frage, wie bekomme ich das Icon dorthin.

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • In der ModernMenu UDF macht der Ersteller lustige Dinge mit dem Menü.

    Ich habe beim schnellen drüber hinweg fliegen nur gesehen, dass er SetOwnerDrawn verwendet. Möglicherweise ist das ein Ansatz.

    Bei einem kleinen Versuch konnte ich aber nur den bkcolor eines Items grün färben in deinem Konsolen Fenster.

    hier noch die aktualisierte Version von LarsJ im autoitscript.com Forum: Link

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Einmal editiert, zuletzt von Schnuffel (15. Mai 2021 um 17:48)

  • Schnuffel danke für den Hinweis, aber in diesem Fall geht es um ein externes Fenster (CMD Box) und ich weiß nicht, ob ModernMenu auch für externe Fenster gültig ist. Mal sehen...

    Btw, wenn ich das Default Icon vom Close / Schließen verwende, dann erscheint das Icon (X).

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • ich habe die Funktionen soweit ich das verstanden hatte auf dein ConsolenFenster angewendet.

    Ich bekam aber nur einen grünen Strich hin.

    Mir sagte das aber, dass es grundsätzlich möglich ist auf das SystemMenu einzuwirken.

    Ob SystemOwnerDrawn da nicht "oversized" ist kann ich nicht beurteilen.

    In diversen Diskussionen wird diese Methode als "overloaded" betitelt.

    Ob die Zuweisung eines Icons das wert ist musst du entscheiden.

    Ich würde aber auch eher sagen, bau dir dein eigenes Console Fenster, dann hast du volle Kontrolle und musst nicht fremde Fenster hooken ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • den hab ich wieder gelöscht als ich nicht weiterkam.

    Ich werde versuchen dass nochmal hinzukriegen. ^^

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)