Problem mit Modernmenu / GUISetState() - funktion wirft mich auf den desktop

  • hallo leute, ich habe ein tool, welches im hintergrund läuft und das modernmenu benutzt (Wer es nicht kennt: es ist ein besseres traymenü als das herkömmliche).
    Das Problem ist, dass ich das Tool öfters automatisch neu starten lasse (muss auch so bleiben!), was zur folge hat, dass logischer weise das traymenu wieder neu erstellt wird.
    Das modernmenu muss GUISetState() aufrufen, sonst sind die menüpunkte nicht anklickbar. Leider wirft mich genau dieses Aufrufen der Funktion GUISetState() immer wieder auf den
    desktop, was in spielen natürlich oft total doof ist. Habt Ihr eine Idee wie ich GUISetState() so aufrufen kann, dass ich dadruch nicht auf dem desktop lande!?

    [autoit]

    ;**********************************************************************
    ; _TrayIconCreate([ToolTip [, IconFile [, IconID]]])
    ;**********************************************************************
    Func _TrayIconCreate($sToolTip = "", $sIconFile = @AutoItExe, $nIconID = 0, $sCallback = "", $nMsg = 0, $hIcon = 0)
    If $sToolTip = "" Then $sToolTip = $sDefaultTT

    $nIconID = _GetIconID($nIconID, $sIconFile)

    If $sIconFile = "" Then
    If $hIcon = 0 Then
    If $nIconID = 0 Then
    $sIconFile = @AutoItExe
    Else
    $hIcon = LoadIcon(0, $nIconID)
    EndIf
    EndIf
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If $sIconFile <> "" Then
    Local $stIcon = DllStructCreate("hwnd")

    If ExtractIconExW($sIconFile, $nIconID, 0, DllStructGetPtr($stIcon), 1) > 0 Then
    $hIcon = DllStructGetData($stIcon, 1)
    Else
    $hIcon = LoadIcon(0, 32516)
    EndIf
    EndIf

    If $TRAYMSGWND = 0 Then
    $TRAYMSGWND = GUICreate("", 1, 1, 9999, 9999, -1, 0x00000080)
    GUISetState() ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< hier das Problem!
    ShowWindow($TRAYMSGWND, @SW_HIDE)
    EndIf

    Local $nNID = _GetNewTrayIndex()
    If $nNID = 0 Then
    DestroyIcon($hIcon)
    Return 0
    EndIf

    $TRAYNOTIFYIDS[$nNID][0] = $nNID
    $TRAYNOTIFYIDS[$nNID][1] = $hIcon
    $TRAYNOTIFYIDS[$nNID][2] = 0
    $TRAYNOTIFYIDS[$nNID][3] = 9
    $TRAYNOTIFYIDS[$nNID][4] = $sToolTip
    $TRAYNOTIFYIDS[$nNID][5] = $sCallback
    $TRAYNOTIFYIDS[$nNID][6] = $nMsg
    $TRAYNOTIFYIDS[$nNID][7] = FALSE
    $TRAYNOTIFYIDS[$nNID][8] = FALSE

    $TRAYLASTID = $nNID

    Return $nNID
    EndFunc

    [/autoit]

    3 Mal editiert, zuletzt von WhiteLion (5. März 2013 um 20:46)

  • Zuerst einmal wäre die ganze UDF (wenn dies überhaupt ne UDF ist) ganz schön.
    Ich habe nämlich keine Ahnung was die Inhalte der Funktionen:
    _GetIconID()
    _LoadIcon()
    usw. Sind. Das erschwert das reproduzieren deines Problemes.

    Also:
    Gib bitte alle nötigen Funktionen und auch wenn möglich ein kurzes(!) Skript mit was dein Problem veranschaulicht.

  • zugegeben, ich habe bei der fragestellung weiter ausgeholt als notwendig.
    Im grunde hätte auch gereicht zu fragen: warum landet man beim aufruf der funktion GUISetState() immer auf dem desktop (egal ob mit modern menü oder ohne)?

    Allerdings konnte ich jetzt selber eine lösung finden, wie man die funktion ausführt, ohne dabei das fenster in den fokus zu setzen (was wohl diue ursache ist)
    hier die lösung:
    GUISetState(@SW_SHOWNOACTIVATE, $TRAYMSGWND)