Hey habt ihr eine idee wie man einen Browser der nicht verwendet wird aber geöfnet ist bemerkt und schließt?
wie kann man das Formulieren das wenn man die Maus nicht bewegt, eine Aktion wie z.b Processclose ausgeführt wird?
mfG Black
Hey habt ihr eine idee wie man einen Browser der nicht verwendet wird aber geöfnet ist bemerkt und schließt?
wie kann man das Formulieren das wenn man die Maus nicht bewegt, eine Aktion wie z.b Processclose ausgeführt wird?
mfG Black
Da musst dir erstmal überlegen nach welchen Kriterien du "nicht verwendet" definierst. Wenn X Minuten nicht in das Fenster geklickt wurde? Wenn X Minuten überhaupt nichts am Rechner gemacht wurde? usw. Erstmal überlegen was du willst.
Ich glaub das einfachste ist wenn man x minuten die maus nicht bewegt und jedesmal wenn die maus bewegt wird wird der timer restetet
Hi,
Folgendermaßen kannst du überprüfen ob sich die Maus bewegt hat:
Global $aMPosNew = MouseGetPos()
Global $aMPosPrev = MouseGetPos()
While 1
$aMPosNew = MouseGetPos()
If $aMPosNew[0] <> $aMPosPrev[0] or $aMPosNew[1] <> $aMPosPrev[1] Then
MsgBox(0, "", "Maus wurde bewegt")
exit
EndIf
$aMPosPrev = $aMPosNew
Sleep(100)
Wend
Alles anzeigen
Sieh dir auch die Hilfe zu TimerInit() an, da wird erklärt wie man die Zeit messen kann.
WinClose() kannst du verwenden um das Fenster zu schließen.
mfg
Zeitriss
_WinAPI_GetIdleTime liefert Dir die Zeit in Millisekunden, seit der letzten Benutzeraktion.
Somit reicht eine einfache Abfrage, um irgendetwas zu tun:
#include <GUIConstantsEx.au3>
#include <WinAPISys.au3>
Global $hGui = GUICreate('Idle-Time', 300, 200)
Global $idMSec = GUICtrlCreateLabel('0', 10, 10, 280, 20)
GUISetState()
While True
If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
$iIdleTime = _WinAPI_GetIdleTime()
If $iIdleTime > 3000 Then MsgBox(0, 'Test', '3 Sekunden sind um.')
GUICtrlSetData($idMSec, $iIdleTime)
WEnd
Alles anzeigen
Mir würde sich allerdings die Frage stellen, warum Du einen nicht benutzten Browser schließen willst.
Als Anwender würde ich mir ziemlich bevormundet vorkommen, wenn ich so ein Programm benutzen würde.
Stattdessen sollte man wohl eher die komplette Anmeldesitzung nach x Minuten Inaktivität "sperren" oder Abmelden lassen. Das kann problemlos per Gruppenrichtlinie oder Registry fest für den Rechner eingestellt werden, da brauchts dann nichtmal ein permanent laufendes Autoitscript dafür. Je nach Rahmenbedingungen kann das durchaus Sinn machen und unbedarfte Anwender vor sich selbst schützen (z.B. öffentlicher Computer, der von beliebigen Personen genutzt wird).
Vielen Dank an alle, besonderst oscar das war genau das was ich brauchte. Ja es geht um ca 30-40 pcs die, die user offen lassen mit youtube videos oder streams und nicht mehr schließen und dadurch das internet belasten.
Ich hab noch 2 Fragen, wie kann ich die GUI im hintergrund laufen lassen ? Zweitens wie kann ich die exe nur 1 mal öffnen lassen und wieder zum start der schleife springen lassen. Durch die While schleife springt sie halt ned weiter mFG Black
#include <GUIConstantsEx.au3>
#include <WinAPISys.au3>
Global $hGui = GUICreate('Idle-Time', 300, 200)
Global $idMSec = GUICtrlCreateLabel('0', 10, 10, 280, 20)
GUISetState()
While True
If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
$iIdleTime = _WinAPI_GetIdleTime()
If $iIdleTime > 3000 Then Run("test1.exe") ;<----------ÖFFNET sich in einer schleife
GUICtrlSetData($idMSec, $iIdleTime)
WEnd
Alles anzeigen
#include <WinAPISys.au3>
local $oldTime=0,$time=3000;$Time=Zeit in Millisekunden die nichts gemacht wurde
local $bClosed=false
While sleep(100)
$iIdleTime = _WinAPI_GetIdleTime()
if $bClosed and $iIdleTime < $time then
$bClosed=false
endif
If (NOT $bClosed) and $iIdleTime > $time+$oldTime Then
WinClose("[active]")
$oldTime+=$time
$bClosed=true
endif
WEnd
Alles anzeigen
Das dürfte machen was du willst
Danke, leider hat das mein problem nicht gelöst in erster linie will ich nur das test1.exe einmal geöffnet wird durch die while schleife aber wird es dauerhaft geöffnet und nichts anderes passiert mehr. Ist es möglich nach einmaligen öfnen der test1.exe zum anfang der while schleife zu springen und wieder alles erneut zu machen?
mfg Black
#include <GUIConstantsEx.au3>
#include <WinAPISys.au3>
Global $hGui = GUICreate('Idle-Time', 300, 200)
Global $idMSec = GUICtrlCreateLabel('0', 10, 10, 280, 20)
GUISetState()
While True
If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
$iIdleTime = _WinAPI_GetIdleTime()
If $iIdleTime > 3000 Then Run("test1.exe")
GUICtrlSetData($idMSec, $iIdleTime)
WEnd
Alles anzeigen
Das war ja eigentlich auch nur ein Testscript, um zu verdeutlichen, wie man auf die fehlende Benutzeraktion reagieren kann.
Natürlich wird hier "immer" nach 3 Sekunden Idle-Time das andere Programm aufgerufen.
Wenn das aber nur dann passieren soll, wenn z.B. ein Browserfenster offen ist, dann musst Du diese zusätzliche Abfrage noch mit einbauen.
Wie schaut dann da der SourceCod aus, Entschuldigung ich versteh nicht wie ich das machen soll
Bspw. nach der Abfrage ob $iIdleTime größer als 3000 noch einen Timer starten, und wenn der dann eine bestimmte Größe hat, deine test1.exe starten. Danach den Timer wieder auch Null setzen und schon hast du deinen periodischen Aufruf deiner exe.
Ich verstehs leider nicht wie ichs schreiben soll
Ja es geht um ca 30-40 pcs die, die user offen lassen mit youtube videos oder streams und nicht mehr schließen und dadurch das internet belasten.
Da stellt sich mir die Frage, wie Du erkennen willst, ob der PC "unbenutzt" ist?
Wenn sich jemand ein Video anschaut, dann ist der PC während dessen doch auch "unbenutzt".
Das Script kann nicht erkennen, ob jemand vor dem PC sitzt oder nicht. Es sei denn, Du bastelst eine Hardware-Erweiterung (Bewegungsmelder/Kamera) davor.
Wenn der timer abgelaufen ist öffnet sich ein fentser wo die nachricht kommt das in 1 min alle broswer geschlossen werden.Da kann man abbrechen drücken und dann ist es abgebrochen.Alles schon fertig, aber ich weiß halt ned wie ich das schreiben soll das dieses programm nur 1 mal geöffnet wird und ned in einer schleife 1.exe soll nur 1 mal geöffnet werden und dann wieder zum start der schleife gehen wie bei batch mit goto
#include <GUIConstantsEx.au3>
#include <WinAPISys.au3>
Global $hGui = GUICreate('Idle-Time', 300, 200)
Global $idMSec = GUICtrlCreateLabel('0', 10, 10, 280, 20)
GUISetState()
While True
If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
$iIdleTime = _WinAPI_GetIdleTime()
If $iIdleTime > 3000 Then Run("1.exe")
GUICtrlSetData($idMSec, $iIdleTime)
WEnd
Alles anzeigen