Hallo, ich hatte gestern schon auf einen alten Thread geantwortet, bin darauf hingewiesen worden, nen neuen aufzumachen.
Also folgende Geschichte: Ich möchte von einer Mediensteuerung (Crestron) aus bei einem Win 8 Rechner den Bildschirmschoner beenden über ein Script. Nun kam die Antwort, daß ich das doch mit Mausbewegung machen soll. Nun ist es aber so, daß die Mausbewegung tatsächlich verhindern kann, daß der Bildschirmschoner überhaupt angeht, wenn der Bildschirmschoner aber aktiv ist, hilft weder eine virtuelle Mausbewegung noch eine virtuelle Keyboardeingabe, der Bildschirmschoner muss offensichtlich durch eine hardwareseitig verbundene Maus oder Tastatur wieder beendet werden. Nach längerer Recherche im www habe ich herausgefunden, daß man wohl den Screensaver-Prozess beenden muss, damit die Sache funktionieren kann. Da ich aber beim Mediensteuerungs-Programmieren relativ fit bin, aber bezüglich Scripting praktisch noch nie was gemacht habe, bräuchte ich da etwas Hilfe.
Mit den Beispielen aus der Hilfe habe ich zumindest schon die Verbindung an den Start bekommen. Allerdings verstehe ich da noch manches nicht so ganz. Vielleicht kann mir da jemand weiterhelfen.
Func ScreensaverOFF()
TCPStartup() ; Start the TCP service.
; Register OnAutoItExit to be called when the script is closed.
OnAutoItExitRegister("OnAutoItExit")
; Assign Local variables the loopback IP Address and the Port.
Local $sIPAddress = "192.168.8.102" ; This IP Address only works for testing on your own computer.
Local $iPort = 61555 ; Port used for the connection.
Local $iListenSocket = TCPListen($sIPAddress, $iPort, 100)
Local $iError = 0
;Local $sReceived = TCPRecv($iSocket, 1024)
If @error Then
; Someone is probably already listening on this IP Address and Port (script already running?).
$iError = @error
MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Server:" & @CRLF & "Could not listen, Error code: " & $iError)
Return False
EndIf
; Assign a Local variable to be used by the Client socket.
Local $iSocket = 0
Do ; Wait for someone to connect (Unlimited).
; Accept incomming connexions if present (Socket to close when finished; one socket per client).
$iSocket = TCPAccept($iListenSocket)
; If an error occurred display the error code and return False.
If @error Then
$iError = @error
MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Server:" & @CRLF & "Could not accept the incoming connection, Error code: " & $iError)
Return False
EndIf
If GUIGetMsg() = $GUI_EVENT_CLOSE Then Return False
Local $sReceived = TCPRecv($iSocket, 14)
IF $sReceived="ScreensaverOFF" Then
If ProcessExists("scrnsave.scr") Then ; Check if the Screensaver process is running.
ProcessClose("scrnsave.scr")
Else
MsgBox($MB_SYSTEMMODAL, "", "Screensaver is not running")
EndIf
EndIf
Until $iSocket <> -1 ;if different from -1 a client is connected.
; Assign a Local variable the data received.
; Notes: If you don't know how much length will be the data,
$arMPos=MouseGetPos()
;Maus bewegen um 10 Pixel nach unten rechts
MouseMove($arMPos[0]+10,$arMPos[1]+10,1)
;Falls die Maus unten rechts war konnte sie nicht bewegt werden, bewegen wir sie nach oben links
MouseMove($arMPos[0]-10,$arMPos[1]-10,1)
;Maus zurücksetzen
MouseMove($arMPos[0],$arMPos[1],1)
; Close the Listening socket to allow afterward binds.
TCPCloseSocket($iListenSocket)
EndFunc ;==>ScreensaverOFF
Func OnAutoItExit()
TCPShutdown() ; Close the TCP service.
EndFunc ;==>OnAutoItExit
So wie es jetzt ist, funktioniert es mit der Mausgeschichte, ich öffne einfach eine TCP Verbindung und schon wird die Maus verschoben. Wie gesagt, hilft das allerdings nicht zur Beendigung des Screensavers. Dann habe ich im Do-Until Bereich eine Abfrage drin, die erkennen soll, was geschickt wurde, das fände ich ehrlich gesagt eleganter. Ich hatte testhalber auch schon ne Messagebox eingebaut, die mir die Sache auch ausgegeben hat, allerdings sehr unzuverlässig und natürlich habe ich momentan keine dauerhafte Überprüfung der Schnittstelle, nach einer Verbindung ist Schluß. Aber das ist ja dann zweitrangig und vermutlich eher kein Problem.
Kann mir jemand weiterhelfen?