funktioniert
Danke.
Beiträge von Harald654
-
-
Hallo,
Kennt jemand eine Möglichkeit die Überprüfung ob ein Prozess läuft/existiert auch nur mit einem teil des vollständigen Prozesssamens zu ermöglichen?
z.B wenn der Prozesse "Firefox.exe" vorhanden ist, würde ich diesen gerne auch finden wenn ich nur nach "Firefox" suche.
Ich hätte gerne eine Überprüfung ob ein Prozess vorhanden ist in welchem mein Suchwort vorkommt.
Ich hab es mal mit ProcessExists("Firefox*") versucht, das funktioniert aber nicht.Gruß,
-
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 , 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:
AutoIt
Alles anzeigen#include <TrayConstants.au3> ;Create Traymenü----------------------------------------- Opt("TrayMenuMode", 3) ; Default tray menu items (Script Paused/Exit) will not be shown. TraySetClick(16) $TShow = TrayCreateItem("Show Kodi") $THide = TrayCreateItem("Hide Kodi") TrayCreateItem("") $TKExit = TrayCreateItem("+K Exit") TrayCreateItem("") $TExit = TrayCreateItem("Exit") TraySetState() TraySetToolTip("Kodi.aHide - klick to show/hide it :)") Global $sRead, $iSpec Global $ix, $Itz, $iSmon = 0 Global $iAktiv = 1 ;sampling time-------------------------------------------- Global $itw = IniRead(@ScriptDir & "\Kodi-CS.ini", "Timings", "itw", "") ;polling time (-Kodi is still active? / Kodi want visible /Kodi want hide)-------------------- Global $its = IniRead(@ScriptDir & "\Kodi-CS.ini", "Timings", "its", "") $its = ($its/$itw) Global $it = $its ;Movimode------------------------------------------------ ;~ Global $KMMode = IniRead(@ScriptDir & "\Kodi-CS.ini", "Moviemode", "Kodi_Moviemode_aktiv", "") IniWrite(@ScriptDir & "\Kodi-CS.ini", "Moviemode", "Kodi_Moviemode_aktiv", 0) ;AutoHide------------------------------------------------- Global $KHideStart = IniRead(@ScriptDir & "\Kodi-CS.ini", "AutoHide", "Hide_Kodi_at_Start", "") ;Pfad von Kodi-------------------------------------------- Global $KodiPfad = IniRead(@ScriptDir & "\Kodi-CS.ini", "Verzeichnis", "Kodi_Pfad", "") Global $KGUISetPfad = IniRead(@ScriptDir & "\Kodi-CS.ini", "Verzeichnis", "Kodi_GUISet_Pfad", "") Global $sSearch = IniRead(@ScriptDir & "\Kodi-CS.ini", "Verzeichnis", 'sSearch', "") Global $sReplace = IniRead(@ScriptDir & "\Kodi-CS.ini", "Verzeichnis", 'sReplace', "") ;Shortcuts------------------------------------------------ Global $SCShow = IniRead(@ScriptDir & "\Kodi-CS.ini", "Shortcuts", "SCShow", "") Global $SCHide = IniRead(@ScriptDir & "\Kodi-CS.ini", "Shortcuts", "SCHide", "") ;Setzte Shortcuts---------------------------------------- If $SCHide = $SCShow Then HotKeySet($SCShow, "_SCSh") Else HotKeySet($SCShow, "_SCShow") HotKeySet($SCHide, "_SCHide") Endif ;Aufruf------------------------------------------------- If DllCall("user32.dll", "int", "GetSystemMetrics", "int", 80)[0] = 2 then $iSmon = 1 Local $sRead = FileRead($KGUISetPfad) If StringInStr($sRead, $sSearch) Then Local $fH = FileOpen($KGUISetPfad, 2) FileWrite($fH, StringReplace($sRead, $sSearch, $sReplace)) FileClose($fH) EndIf endif If $KHideStart = 0 then Global $Kodi = run ($KodiPfad) Global $WKodi = WinWait("[CLASS:Kodi]","", 20) ; Wait for start of Kodi (max 20s) _SCShow() else Global $Kodi = run ($KodiPfad) Global $WKodi = WinWait("[CLASS:Kodi]","", 20) ; Wait for start of Kodi (max 20s) _SCHide() endif ;Abfrageschleife--------------------------------------- While Sleep ($itw) ;TrayMenü---------------------------------------------- $msg = TrayGetMsg() Select Case $msg = $TKExit Winclose($WKodi, "") If $iSpec = 0 and $iAktiv = 0 then run ("C:\Windows\System32\DisplaySwitch.exe /external") endif For $it = 0 to 200 If not ProcessExists($Kodi) then ExitLoop endif Sleep (200) Next ProcessClose($Kodi) Exit Case $msg = $TExit Exit Case $msg = $THide _SCHide() Case $msg = $TShow _SCShow() Case $msg = $TRAY_EVENT_PRIMARYDOWN If $ix = 1 then _SCHide() Else _SCShow() endif EndSelect If $it >= $its Then $it = 0 ;Wenn Kodi beendet, auch TrayProg beenden------------------ If $Itz >= 8 then $Itz=0 If not ProcessExists($Kodi) then If not ProcessExists("Kodi.exe") then If $iSpec = 0 then run ("C:\Windows\System32\DisplaySwitch.exe /external") endif Exit endif endif Else $Itz = ($Itz+1) EndIf ;erweitern und Kodi auf diesem anzeigen------------------- If $iAktiv = 1 Then If IniRead(@ScriptDir & "\Kodi-CS.ini", "Moviemode", "Kodi_Moviemode_aktiv", "") = 1 then $iAktiv = 0 IniWrite(@ScriptDir & "\Kodi-CS.ini", "Moviemode", "Kodi_Moviemode_aktiv", 0) If $iSmon = 0 then If DllCall("user32.dll", "int", "GetSystemMetrics", "int", 80)[0] = 1 then $iSpec = 0 run ("C:\Windows\System32\DisplaySwitch.exe /extend") Sleep(1500) Else $iSpec = 1 endif endif _SCShow() If $iSmon = 0 then WinMove($WKodi, "", -1920, 0,1920, 1080) endif EndIf ;Minimieren und nach rechts verschieben------------------ elseif $iAktiv = 0 then If WinGetState ( $WKodi,"") = "23" Then $iAktiv = 1 If $iSmon = 0 Then WinMove($WKodi, "", 0, 0,1920, 1080) If $iSpec = 0 then run ("C:\Windows\System32\DisplaySwitch.exe /external") endif endif endif endif Else $it = ($it+1) EndIf WEnd ;___________________________________________________ Func _SCSh() If $ix = 1 then _SCHide() Else _SCShow() endif EndFunc Func _SCShow() $ix = 1 TraySetIcon("iShow.ico", 0) TraySetToolTip("Kodi is visible -click to hide it ;)") WinSetState($WKodi, "", @SW_MAXIMIZE) Local Const $sCLSID_TaskbarList = "{56FDF344-FD6D-11d0-958A-006097C9A090}" Local Const $sIID_ITaskbarList = "{56FDF342-FD6D-11d0-958A-006097C9A090}" Local Const $sTagITaskbarList = "HrInit hresult(); AddTab hresult(hwnd); DeleteTab hresult(hwnd); ActivateTab hresult(hwnd); SetActiveAlt hresult(hwnd);" ; Create the object. Local $oTaskbarList = ObjCreateInterface($sCLSID_TaskbarList, $sIID_ITaskbarList, $sTagITaskbarList) ; Initialize the iTaskbarList object. $oTaskbarList.HrInit() $oTaskbarList.AddTab($WKodi) $oTaskbarList = 0 ;WinMove($wnd, "", -1920, 0,1920, 1080) EndFunc Func _SCHide() $ix = 0 TraySetIcon("iHide.ico", 0) TraySetToolTip("Kodi is hidden :) -click to show it!") WinActivate("[CLASS:Shell_TrayWnd]") WinSetState($WKodi, "", @SW_MINIMIZE) Local Const $sCLSID_TaskbarList = "{56FDF344-FD6D-11d0-958A-006097C9A090}" Local Const $sIID_ITaskbarList = "{56FDF342-FD6D-11d0-958A-006097C9A090}" Local Const $sTagITaskbarList = "HrInit hresult(); AddTab hresult(hwnd); DeleteTab hresult(hwnd); ActivateTab hresult(hwnd); SetActiveAlt hresult(hwnd);" ; Create the object. Local $oTaskbarList = ObjCreateInterface($sCLSID_TaskbarList, $sIID_ITaskbarList, $sTagITaskbarList) ; Initialize the iTaskbarList object. $oTaskbarList.HrInit() $oTaskbarList.DeleteTab($WKodi) $oTaskbarList = 0 EndFunc
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 damitDanke für eure Hilfe,
-
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).Code
Alles anzeigenGlobal $wnd = "Kodi" WinSetState($wnd, "", @SW_MINIMIZE) _DelTab($wnd) ;Entfernt den Taskbar Eintrag ;~ WinSetState($wnd, "", @SW_RESTORE) ;~ _AddTab($wnd) ;Fügt einen neuen Taskbar Eintrag hinzu Func _AddTab($wnd) Local Const $sCLSID_TaskbarList = "{56FDF344-FD6D-11d0-958A-006097C9A090}" Local Const $sIID_ITaskbarList = "{56FDF342-FD6D-11d0-958A-006097C9A090}" Local Const $sTagITaskbarList = "HrInit hresult(); AddTab hresult(hwnd); DeleteTab hresult(hwnd); ActivateTab hresult(hwnd); SetActiveAlt hresult(hwnd);" ; Create the object. Local $oTaskbarList = ObjCreateInterface($sCLSID_TaskbarList, $sIID_ITaskbarList, $sTagITaskbarList) ; Initialize the iTaskbarList object. $oTaskbarList.HrInit() $oTaskbarList.AddTab($wnd) $oTaskbarList = 0 EndFunc Func _DelTab($wnd) Local Const $sCLSID_TaskbarList = "{56FDF344-FD6D-11d0-958A-006097C9A090}" Local Const $sIID_ITaskbarList = "{56FDF342-FD6D-11d0-958A-006097C9A090}" Local Const $sTagITaskbarList = "HrInit hresult(); AddTab hresult(hwnd); DeleteTab hresult(hwnd); ActivateTab hresult(hwnd); SetActiveAlt hresult(hwnd);" ; Create the object. Local $oTaskbarList = ObjCreateInterface($sCLSID_TaskbarList, $sIID_ITaskbarList, $sTagITaskbarList) ; Initialize the iTaskbarList object. $oTaskbarList.HrInit() $oTaskbarList.DeleteTab($wnd) $oTaskbarList = 0 EndFunc
-
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.
-
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ß,
-
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ß,
-
Vielen Dank,
funktioniert super -
Hallo,
ich würde gerne einen Wert in einer .xlm Datei abändern.
Ich glaube ich habe auch schon gefunden womit das geht, und zwar mit "StringRegExpReplace", nur leider werde ich aus dem Beispiel überhaupt nicht schlau wie das funktioniert.Konkret will ich in einer .xlm Datei (wo sehr viele Werte enthält) überprüfen ob als "screenmode" folgendes angegeben ist:
<screenmode>10192001080060.00000pstd</screenmode>
Fals bei "screenmode" etwas anderes steht, im normalfall:
<screenmode default="true">DESKTOP</screenmode>
soll das durch:
<screenmode>10192001080060.00000pstd</screenmode>
ersetzt werdenHat jemand eine Idee wie ich das am besten mache?
Gruß,
-
Hast recht, ist doch dabei.
Das ist genau was ich suche, vielen dankJezt muss ich es nur noch die GUID mit Autoit auslesen.
[autoit]
Ich habs mal mit:ShellExecuteWait('powercfg.exe',' -query [3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e]')
[/autoit]versucht, aber bekomme immer nur eine 1 zurück.
Weißt du vielleicht auch wie ich den Index:
Index der aktuellen Wechselstromeinstellung: 0x00001c20
mit Autoit auslesen kann? -
Hallo Bernd,
ich habe
[autoit]powercfg -query
[/autoit]mit CMD mal durchgeschaut, kann da aber leider keine Monitor-Ausschaltzeit finden.
Gruß,
-
Hallo,
ich würde gerne auslesen welche Zeit in den Energieoptionen bei "Bildschirm ausschalten" eingestellt ist.
zum verändern benutze ich diesen Befehl:
Funktioniert auch, ich würde nur gerne bevor ich eine neue Zeit einstelle zuerst die bisher eingestellt Zeit auslesen.
Mit "powercfg" und "-query" müsste man doch auch Einträge abfragen können (klick), aber ich kenne nicht die GUID von dem Registryeintrag wo der Wert gespeichert ist.Kennt jemand die passende GUID oder hat eine Idee wie ich die Zeit sonst noch auslesen könnte?
Gruß,
-
Hmmm,
hast du mir ein Beispiel wie ich den Dienst mit RunWait eingeben muss um ihn zu beenden?Gruß,
-
Konkret ist das bei dem Denktopclient für Pushbullet so (ist ein Programm um Android-Benachrichtigungen auf dem PC anzuzeigen), dort kann ich mit WinClose nur die geöffnete Anwendung/Fenster schließen, aber nicht den Dienst im Infobereich (was aber eine Super lösung für mein anderes Problem ist das Pushbullet immer als Fenster Startet )
Und ein Dienstprogramm für meine 3D Maus (3D Connection) lasst sich auch nicht mittels WinClose beenden (das mir aber auch nicht so wichtig)
Die Programmname dürften ja die gleichen sein wie für ProcessClose? (die hab ich mir die einfach aus dem Tankmanager geholt)
Gruß,
-
Danke für das Skript Oscar, das ist um einiges schöner wie meins
Mit WinClose (bzw. Winkill) lassen Sich leider einige Programme im Infobereich nicht ändern
Gibt es den noch ne alternative um die Proramme zu beenden wobei auch das Logo im Infobereich verschindet?Gruß,
-
-
Hallo,
ich konnte mich leider erst jezt wieder mit meinem Programm befassen.
Vielen dank für eure Hilfe.
( @funkey und Einexage mit den Beispielen muss ich mich mal an einem freien Abend beschäftigen, hab erst vor kurzem mit dem Programmieren angefangen )Ich hab es jetzt mal relativ einfach mit "GetIdleTime" umgesetzt.
Code
Alles anzeigen#include <Timers.au3> ;Variablen Bestimmung: $Display_off_time = 30*60*1000 ;Minuten $Abfrageintervall= 2*1000 ; Sekunden $Prog_Pfad1 = "C:\Program Files\3Dconnexion\3DxWare\3DxWinCore64\3DxService" $Prog_Pfad2 = "C:\Program Files\Logitech\GamePanel Software\LCD Manager\LCDMon" $Prog_Pfad3 = "C:\Program Files (x86)\Pushbullet\pushbullet" $Prog_Pfad4 = "C:\Program Files\Rainmeter\Rainmeter" ;Programm Start If ProcessExists("3DxService.exe") Then $Prog1 = "3DxService.exe" else $Prog1 = Run($Prog_Pfad1) EndIf If ProcessExists("LCDMone.exe") Then $Prog2 = "LCDMon.exe" else $Prog2 = Run($Prog_Pfad2) EndIf If ProcessExists("pushbullet.exe") Then $Prog3 = "pushbullet_app" else $Prog3 = Run($Prog_Pfad3) EndIf If ProcessExists("Rainmeter.exe") Then $Prog4 = "Rainmeter.exe" else $Prog4 = Run($Prog_Pfad4) EndIf ;Schleife While 1 Call ("Display_on") call ("Display_off") WEnd ;Unterprogramme Func Display_on() While 2 If _Timer_GetIdleTime() > $Display_off_time Then ProcessClose ($Prog1) ProcessClose ($Prog2) ProcessClose ($Prog3) ProcessClose ($Prog4) ExitLoop endif Sleep($Abfrageintervall*100) WEnd EndFunc Func Display_off() While 2 if _Timer_GetIdleTime() < $Display_off_time Then $Prog1 = Run($Prog_Pfad1) $Prog2 = Run($Prog_Pfad2) $Prog3 = Run($Prog_Pfad3) $Prog4 = Run($Prog_Pfad4) ExitLoop endif Sleep ($Abfrageintervall) WEnd EndFunc
funktioniert soweit ganz gut ( für Verbesserungsvorschläge bin ich natürlich immer offen ).
Nur startet das Programm "Pushbullet" nicht versteckt im Infobrechich (bzw. Systemtray oder wie man das auch immer nennt) sondern öffnet jedemal das Anwendungsfenster. Gibt es eine Möglichkeit das Programm gleich versteckt im Infobereich zu starten ober nach dem Start zu minimieren?Was auch noch relativ unschön ist, dass sich der Infobereich nach dem Beenden der Programme nicht automatisch aktualisiert und die Widgets noch angezeigt werden bis ich mit der Maus darüber fahre.[Blockierte Grafik: http://www.bilderbob.de/galerie/142064369020117/2e3eeaecf41e3597542fd186d439e1d4.jpg][Blockierte Grafik: http://www.bilderbob.de/galerie/142064369020117/2e3eeaecf41e3597542fd186d439e1d4.jpg]
Ist des möglich den Infobereich mit Autoit zu aktualisieren?Gruß,
-
Hallo,
Ich würde gerne ein Programm schreiben welches überprüft ob der Monitor (durch Windows) abgeschaltet wurde.
Wenn ja sollen ein paar Programme beendet werden.
Wenn der Moitor wieder aktiviert wird (z.B. druch drücken einer Maustaste) sollen die Programme wieder gestartet werden.
I
Das Programm an sich bekomme ich hin, ich weiß nur nicht wie ich überprüfen kann ob der Monitir an/ oder aus ist, hat jemand von euch ne Idee?Mein Betriebssystem: Win 8.1 pro
Hintergrund ist dass mein Rechner auch als Homeserver genutzt wird (24h), und ich die Programme (in der Taskbar) welche ich nur wärend ich vor dem Pc sitze benötigeauch nur dann laufen, um Ressourcen zu sparen.
Gruß,