Monitor schaltet sich nicht mehr ab bei "@SW_hide"

  • Hallo,

    Da ich gewisse Funktionen eines Programms (Kodi) gerne immer verfügbar haben möchte, hab ich mir ein kleines Skript geschrieben, um das Programm versteckt zu starten run ($KodiPfad, "", @SW_HIDE) und per Tastenkombination zwischen sichtbar und unsichtbar umzuschalten WinSetState($WKodi,"",@SW_SHOW) bzw. WinSetState($WKodi,"",@SW_HIDE).

    Funktioniert im Prinzip alles super (sogar das GUI-Rendering des Programmes schaltet sich ab, wodurch die CPU Auslastung kaum wahrnehmbar ist :) ),
    nur schaltet sich der Monitor nicht mehr nach der eingestellten Zeit ab, wenn ich das Programm mit "@SW_HIDE" in den Hintergund verschiebe.
    Wenn das Programm Angezeigt wird bzw. im Vollbild läuft (ist keine echte Vollbildanwendung, wird als Fenster ohne Rand dargestellt), oder ich das Programm mit "@SW_MINIMIZE" minimiert habe, funktioniert das Abschalten des Monitors ohne Probleme. Nur mit "@SW_HIDE" nicht! ?(
    Ich kann in dem Programm auch eine Zeit einstellen, nachdem der Bildschirm bei Inaktivität abgeschaltet wird, aber auch das funktioniert nicht bei @SW_HIDE.
    (Ich könnte das Programm natürlich auch nur mit "@SW_MINIMIZE" minimieren, aber da es immer ausgeführt werden soll stört mich es mich doch sehr, wenn immer die Anzeige von dem Programm in der Taskleiste ist.)


    Kennt jemand dieses Problem bzw. hat jemand eine Lösung dafür?

    Es kann gut sein dass an dem Programm selbst liegt (es unterdrückt ja auch das Abschalten des Bildschirms wenn z.B. ein Video läuft),
    kann man dem Programm vielleicht die Berechtigung entziehen wodurch es den Bildschirm aktiv hält, oder das aktiv Halten irgendwie verhindern?


    Gruß,

  • Anstatt das Verhalten mit Autoit zu beeinflussen würde ich einfach den Programmierer dieser Software anschreiben. Laut deinem Link wird die Software noch aktiv entwickelt (letzte Beta erst vor einer Woche). Schreib ihm einfach was dir fehlt und was du gerne erreichen willst und ich bin mir sicher er baut das entsprechend ein, sofern er Zeit dafür findet.

  • Hallo misterspeed,

    ich habe so etwas ähnliches schon im Forum von Kodi angefragt, das Programm ist nicht für Multitasking oder als Hintergrunddienst entwickelt oder gedacht. Ich könnte natürlich eine Feature Request Anfrage aufmachen, aber ich denke nicht das mein spezielles Problem für viele Andere von nutzen sein wird.
    Zudem unterstützt das Programm ja das Abschalten des Monitor wenn es geöffnet oder minimiert ist, nur mit "@SW_HIDE" wird das Abschalten des Monitors verhindert.

    Ich habe auch mal das Programm RTray ausprobiere, was eigentlich das gleiche macht wie der "@SW_HIDE" Befehl (ist glaube ich sogar mit Autoit geschrieben). Damit tritt das Problem nicht auf, der Monitor schaltet wie gewohnt ab, obwohl ich das Programm mit RTray in den Hintergrund verschoben habe (wenn ich danach zusätzlich noch @SW_HIDE" ausführe schaltet der Monitor wieder nicht ab).

    Ich hab mal versucht die angegeben Codes auf der sourceforge Seite von RTray zu durchsuchen, um zu verstehen was das Programm anders macht. Leider finde ich weder die Codezeilen dafür, noch sieht es für mich nach Autoit aus^^

    Versteht vielleicht jemand den Code und kann mir sagen wie RTray das macht, oder weiß jemand noch eine andere Möglichkeit um Programme zu "verstecken"?


    Gruß,

    • Offizieller Beitrag

    Hallo,

    hast schon mal probiert @SW_MINIMIZE und @SW_HIDE zu kombinieren, bzw. @SW_SHOW und @SW_RESTORE.

    AutoIt: verstecken
    WinSetState("$WKodi", "", @SW_MINIMIZE)
    WinSetState("$WKodi", "", @SW_HIDE)
    AutoIt: wiederherstellen
    WinSetState("$WKodi", "", @SW_SHOW)
    WinSetState("$WKodi", "", @SW_RESTORE)
  • Hallo bernd670,

    hab ich auch schon versucht, aber auch wenn ich das Programm zuerst mit @SW_MINIMIZE minimiere und dann erst mit @SW_HIDE  verstecke, habe ich das Problem das sich mein Bildschirm nicht mehr abschaltet. :(

  • RBTray ist in C++ geschrieben.
    Wenn das Programm minimiert funktioniert dann mach folgendes:

    Spoiler anzeigen
  • Für $wnd setzt ich mein Programm ein oder? Brauch ich für dein Code sonst noch irgendwelche Konstanten?
    Bei mir minimiert/wiederherstellt der Code das Programm, aber in der Taskbar wird es noch angezeigt (also wie bei @SW_MINIMIZE alleine, _DelTab($wnd) scheint keine Auswirkungen zu haben, ist das vielleicht Betriebssystem abhängig? ich nutze Win 8.1).

  • Ne mit $wnd wird das Handle des zu minimierenden Fensters gemeint.
    Kriegst du mit WinGetHandle().

  • Super,

    dein Script zum verstecken der Anwendung in der Taskleiste funktioniert :)

    Ich hab nur fast die Krise bekommen weil das Programm auf einmal auch minimiert das ausschalten des Bildschirms verhinderte :cursing: , bis ich festgestellt habe dass nur wenn ich vor dem Minimieren das Programm(Fenster) nicht mehr im Fokus habe (nennt man das so?), die Monitorabschaltung funktioniert^^. Ist wirklich komisch, wenn ich das Programm offen/maximiert habe funktioniert das Abschalten, nur versteckt oder minimiert nicht bzw. nicht richtig, wenn dann hätte ich mit dem gegenteiligen Verhalten gerechnet.

    Ich hab mir nun mit WinActivate("[CLASS:Shell_TrayWnd]") vor  WinSetState($WKodi, "", @SW_MINIMIZE) beholfen, ist nicht gerade schön und etwas umständlich aber es funktioniert jetzt wenigstens :)

    Mein ganzes Programm:


    Falls jemand noch etwas einfällt um das Ganze eleganter zu lösen,
    oder allgein Verbesserungsvorschläge zu meinem Programm/Programmierstil hat (vorallem um die CPU belastung zu veringern),
    immer her damit ;)


    Danke für eure Hilfe,