Kontextmenü verstecken

  • Hallo Leute, ich brauche mal eure Hilfe ..
    Ich versuche ein Programm zu automatisieren, möchte aber nicht, dass das weiter auffällt .. Im Zuge der Automatisierung muss auch einmal das Kontextmenü (also rechtklick-menü) benutzt werden. Das sieht natürlich nicht so geil aus, wenn da auf einmal so ein menü aufpopt, auch wenn es nur sehr kurz zu sehen ist.

    Aufgerufen wird das Menü durch Send-Befehle: Send("{APPSKEY}") z.B. für den Rechtsklick. Es werden insgesamt keine Clicks benutzt.
    Um das zu verstecken habe ich versucht ein Gui darüber zu legen, welches immer im Vordergrund ist.

    Code
    $winf7 = GUICreate("Test", 500, 500, 0, 0, BitOr($WS_BORDER, $WS_POPUP), BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))


    Das funktioniert aber leider nicht, das Gui ist leider doch nicht so "TOPMOST" wie ich es gerbe hätte.

    Habe auch diese Flags hier getestet:

    Code
    WinSetOnTop($winf7, "", 1)


    und diese Funktion hier, die ich beim googlen gefunden habe:


    Code
    Func SetAlwaysOnTop($hWnd)
       _WinAPI_SetWindowPos($hWnd, $HWND_TOP+$HWND_TOPMOST, 0, 0, 0, 0, BitOr($SWP_NOMOVE, $SWP_NOSIZE))
    EndFunc

    Das funktioniert aber alles leider nicht ..
    Das Kontextmenü steht über allem :/

    Eine Idee habe ich noch, aber ich glaube das die nicht umsetzbar ist, bzw wenn dann nur sehr schwer. :S
    Ich würde den Mauszeiger an eine Stelle schieben, an der er nicht sichtbar ist. Denn an der Stelle des Zeigers erstellt sich das Kontextmenü automatisch, wenn es über {APPSKEY} aufgerufen wird.
    Am liebsten wäre es mir wenn man den Mauszeiger außerhalb des Fensters schieben könnte, aber das geht ja leider nicht weil dort nichts ist. Man bräuchte also eine Art virtuellen Desktop und an der Stelle wird das dann leider etwas zu krass für autoit denke ich mal ... :D


    Vielleicht fällt euch ja noch was schlaues ein, ich weiß nämlich nicht ob das überhaupt möglich wäre ..

    Vielen Dank!

    lg
    Leo.1906

    • Offizieller Beitrag

    Poste mal einen Beispielscode zum testen.
    Btw, wlches Programm willst du automatisieren, welches das Contextmenü anzeigt.

  • Ah sorry, das hier ist iwie bei mir bisschen eingeschlafen :D
    Ich bin momentan auch wieder bei nem anderen Projekt angekommen xD

    Das Programm das ich automatisieren möchte ist ESRIs ArcMap. Hier mal ein paar der Funktionen inklusive der "freeze" funktion, welche den Inhalt des GUIs "freezed" :D

    Hier die freeze Funktio. Im vorangegangenen wird ein Child-Windows erstellt, welches normalerweise nur ein einzelner Button ist. Wenn freeze aktiviert wird, resized sich das Window auf die Größe des Inhaltes des Parent-GUIs, so das der Rahmen immer noch der des Originals ist :D
    Ich hoffe das ist verständlich erklärt :D

    Über eine Lösung meines Problems würde ich mich auf jeden Fall freuen, aber wie gesagt bin ich momentan wieder an was anderem dran und weiß überhaupt nicht ob ich das hier noch zuende bringen werde :D
    Interessant ist das Problem dennoch ;)

    lg
    Leo.1906

  • Lauffähig ist das ganze sowieso erst wenn man ArcMap installiert hat und ich glaube das das die wenigsten von euch haben.
    Aber ok, hier ist das ganze Script:

    Edit:
    hier noch der Code der "Kill.exe"


    AutoIt
    #NoTrayIcon
    WinKill("Python")

    Edit2:
    ArcMap verwendet durchgehend eigene GUI-Objekte und nicht die von Windows gegebenen. Ich glaube also nicht das man das Contextmenü von ArcMap mit dem von Windows vergleichen kann, aber ich denke das, wenn man das Contextmenü von Windows verstecken könnte, dann könnte man mit der gleichen Methode auch das von ArcMap verstecken.
    Also ein einfaches Beispielscript wäre, ein GUI zu erstellen, welches Always on Top ist und dann einen Rechtsklick irgendwo hinter dem Fenster zu machen. Das Ergebnis ist, dass das Contextmenü über dem Always on Top Gui gezeigt wird ... :/

    Einmal editiert, zuletzt von Leo.1906 (17. Juni 2016 um 12:41)