Hallo
mal Testdisk ausprobiert?
Gesendet von meinem SM-G920F mit Tapatalk
Hallo
mal Testdisk ausprobiert?
Gesendet von meinem SM-G920F mit Tapatalk
Da ich momentan etwas langeweile habe, habe ich mich mal hingesetzt und dein Script etwas überarbeitet. Ich hoffe ich habe alle Bedingungen berücksichtigt und habe nichts vergessen.
Was ich an deinem Script nicht so ganz verstanden habe war, warum du in Zeile 27 und in Zeile 43 zweimal das neue Datum in die Registry schreibst. Des weiteren habe ich mich gefragt warum du in Zeile 45 prüfst ob der Counter in der Registry leer ist, du setzt doch in Zeile 26 den Wert 0 in die Registry.
Mein Script wird sicher nicht perfekt sein, deswegen bitte ich um Rückmeldung.
#NoTrayIcon
Global Const $sScriptPath = "G:\Projekte\AutoIt\Kindersicherung\"
Global $iShowInformation = 0
; Limits festlegen
Local $iWeekDay = @WDAY, $iDailyLimit = 45
If $iWeekDay = 1 OR $iWeekDay = 7 Then $iDailyLimit = 60
; Falls Limits in der Regestry festgelegt, verwende diese
$iDailyLimitReg = RegRead("HKEY_CURRENT_USER\Software\timer", @WDAY)
If $iDailyLimitReg <> "" Then $iDailyLimit = $iDailyLimitReg
While True
$iDate = RegRead("HKEY_CURRENT_USER\Software\timer", "Datum")
$iCounter = RegRead("HKEY_CURRENT_USER\Software\timer", "Counter")
; Neues Datum in die Registry schreiben
$iActuallyDate = @YEAR & "-" & @MON & "-" & @MDAY
If $iDate <> $iActuallyDate Then
RegWrite("HKEY_CURRENT_USER\Software\timer", "Datum", "REG_SZ", $iActuallyDate)
RegWrite("HKEY_CURRENT_USER\Software\timer", "Counter", "REG_SZ", 0)
EndIf
; Einmalige Zeitinformationen dem Benutzer anzeigen, z.B. beim ersten starten des Programms
If $iShowInformation = 0 Then
$iShowInformation = 1
_Information()
EndIf
; Wenn Counter leer ist, auf 0 setzen ansonsten hochzählen
If $iCounter = "" Then
RegWrite("HKEY_CURRENT_USER\Software\timer", "Counter", "REG_SZ", 0)
Else
; 1 Minute warten
Sleep(60000)
$iCounter = $iCounter + 1
RegWrite("HKEY_CURRENT_USER\Software\timer", "Counter", "REG_SZ", $iCounter)
EndIf
If $iCounter = $iDailyLimit - 5 Then
_Information()
ElseIf $iCounter = $iDailyLimit - 2 Then
Run($sScriptPath & "_warning.exe " & $iDailyLimit & " 2")
ElseIf $iCounter >= $iDailyLimit Then
Run($sScriptPath & "_exit.exe")
Shutdown(0)
EndIf
WEnd
Func _Information()
;~ MsgBox(4096 + 64, "Hinweis zum Zeitlimit", "Heute stehen ingesamt " & $iDailyLimit & " Minuten zur Verfügung." & @CRLF & "Davon sind noch " & $iDailyLimit - $iCounter & " Minuten übrig.", 20)
Run($sScriptPath & "_information.exe " & $iDailyLimit & " " & $iDailyLimit - $iCounter)
EndFunc
Alles anzeigen
In Zeile 48 muss lediglich der Shutdown angepasst werden.
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=_information.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#NoTrayIcon
MsgBox(262144 + 65536 + 4096 + 64, "Hinweis zum Zeitlimit", "Heute stehen ingesamt " & $cmdline[1] & " Minuten zur Verfügung." & @CRLF & @CRLF & "Davon sind noch " & $cmdline[2] & " Minuten übrig.")
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=_warning.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#NoTrayIcon
Beep(500, 500)
Sleep (80)
Beep(500, 500)
MsgBox(262144 + 65536 + 4096 + 48, "Vorsicht!", "Die Zeit für heute (" & $cmdline[1] & " Minuten) ist fast abgelaufen!" & @CRLF & "Bitte die Programme beenden." & @CRLF & "Der PC fährt in " & $cmdline[2] & " Minuten herunter!!!")
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=_exit.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#NoTrayIcon
Beep(500, 500)
Sleep (80)
Beep(500, 500)
MsgBox(262144 + 65536 + 4096 + 16, "Vorsicht!", "Die Zeit für heute ist abgelaufen!" & @CRLF & @CRLF & "Der PC wird JETZT heruntergefahren")
Viel Spaß mit den Scripten.
LG
Ich würde so vielleicht so anfangen:
#include <File.au3>
Global $sFilePath = @UserProfileDir & "\AppData\Local\Officeline\time.txt"
If (Not FileExists($sFilePath)) Then _FileCreate($sFilePath)
; Schreibe aktuelle Uhrzeit in die Datei
If (Not FileWriteLine($sFilePath, @HOUR & ":" & @MIN)) Then Exit
_CheckOnlineTime()
Func _CheckOnlineTime()
$sFileLine = FileReadLine($sFilePath, 1)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sFileLine = ' & $sFileLine & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
EndFunc
Alles anzeigen
Wobei mir die Lösung mit der erstellten Datei noch nicht so 100%ig gefällt.
Hab aber im Moment auch keine brauchbare Idee wie man das anders machen könnte.
LG
Eine weitere Möglichkeit wäre eventuell EnvGet und EnvSet zu benutzen. Vielleicht reicht das ja?!
Wenn ich mal an meine Jugend zurück denke, wäre es mir nie in den Sinn gekommen mal in die Umgebungsvariablen zu schauen.
Ansonsten gibt es aber fertige Programme für eine Kindersicherung am PC. Sollte meiner Schwester sowas auch mal auf ihrem PC installieren.
War ein geniales Tool, komme aber nicht mehr auf den Namen. Kostete aber ein paar Euro.
Hallo.
Ich habe hier eine Lösung gezeigt, wie man den Zeitpunkt des Starts herausbekommt. Eventuell kannst du damit was anfangen. Dann müsstest du keine Dateien oder Regestry-Schlüssel erstellen.
LG
Hallo.
Ich selbst habe die Tage erst mit WinActivate gearbeitet und kann dir sagen, dass ich keine Probleme unter Windows 10 hatte.
Welche AutoIt-Version hast du denn installiert?
LG
Hallo.
Ich hab mal etwas weiter geforscht und gesehen, dass man das auch mittels WMI lösen kann.
Hier hast du mal ein entsprechendes Script.
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.14.2
Author: Philip G.
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
_GetLogonTime()
Func _GetLogonTime()
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$Output = ""
$Output = $Output & "Computer: " & $strComputer & @CRLF
$Output = $Output & "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_LogonSession", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
$Output = $Output & "AuthenticationPackage: " & $objItem.AuthenticationPackage & @CRLF
$Output = $Output & "Caption: " & $objItem.Caption & @CRLF
$Output = $Output & "Description: " & $objItem.Description & @CRLF
$Output = $Output & "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
$Output = $Output & "LogonId: " & $objItem.LogonId & @CRLF
$Output = $Output & "LogonType: " & $objItem.LogonType & @CRLF
$Output = $Output & "Name: " & $objItem.Name & @CRLF
$Output = $Output & "StartTime: " & WMIDateStringToDate($objItem.StartTime) & @CRLF
$Output = $Output & "Status: " & $objItem.Status & @CRLF
If MsgBox(1, "WMI Output", $Output) = 2 Then ExitLoop
$Output = ""
Next
Else
MsgBox(0, "WMI Output", "No WMI Objects Found for class: " & "Win32_LogonSession")
EndIf
EndFunc ;==>_GetLogonTime
Func WMIDateStringToDate($dtmDate)
Return (StringMid($dtmDate, 5, 2) & "/" & _
StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
& " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))
EndFunc ;==>WMIDateStringToDate
Alles anzeigen
Ich hoffe das hilft dir weiter.
LG
Hallo,
anstatt die ganzen Send()-Befehle zu nutzten, könntest du die _IE-Funktionen nutzen.
Hier ist mal die Hilfe dazu.
Ohne das Programm zu kennen, wird es schwierig für weiterzuhelfen.
Es gibt in der Hilfe aber ein Tutorial, wo es um die Automation von Notepad geht. Wenn du dir das anschaust, solltest du eigentlich weiter kommen.
Gesendet von iPhone mit Tapatalk
Wenn du den Inhalt einer Variable angezeigt haben möchtest, kannst du das z. B. mit ConsoleWrite($var) oder mit MsgBox(64, "Titel", $var) machen.
Ich empfehle dir mal diese Seite: Tutorial zu Variablen, damit du dir die Grundlagen mal ansehen kannst.
LG
Ohne es 100%ig zu wissen, denke ich das der Unterschied in der Ausführlichkeit der Ausgabe liegt.
Hab mal ein kurzen Test zusammengebastelt, welcher es etwas veranschaulicht.
#include <WinAPI.au3>
#include <WinAPIDiag.au3>
#include "MS_ErrorCodes.au3"
Global $iMouseSpeed
Global Const $SPI_GETMOUSESPEED = 112
_WinAPI_SystemParametersInfo($SPI_GETMOUSESPEED, 0, $iMouseSpeed, 0)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : _WinAPI_GetLastError = ' & _WinAPI_GetLastError() & @LF)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : _WinAPI_GetErrorMessage = ' & _WinAPI_GetErrorMessage(_WinAPI_GetLastError()) & @LF)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : _WinAPI_GetLastError_Description = ' & _WinAPI_GetLastError_Description() & @LF)
ConsoleWrite("var: $iMouseSpeed --> " & $iMouseSpeed & @LF)
Alles anzeigen
Wieso benutzt du für die Befehle nicht die PowerShell von Windows?
Gesendet von iPhone mit Tapatalk
Du könntest deine Funktion so umbauen:
Func _StringSearchFQDN($sText)
Local $aResult[1]
Local $aTEMP
Local $aTEMP2
Local $aTEMP3
Local $sPattern = "(?x)\b((?=[a-zA-Z0-9-]{1,63}\.)(xn--)?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+[a-zA-Z]{2,63}\b "
;im Text nach FQDNs suchen
$aTEMP = StringRegExp($sText, $sPattern, 4)
;Ergebnis verarbeiten
If IsArray($aTEMP) = 1 Then
$aResult[0] = 0
For $i=0 To UBound($aTEMP)-1
$aTEMP2 = $aTEMP[$i]
$var = StringSplit($aTEMP2[0], ".")
If $var[0] >= "3" Then _ArrayAdd($aResult, $aTEMP2[0])
$aResult[0] = $aResult[0]+1
Next
Return($aResult)
Else
Return 0 ;Nix gefunden
EndIf
EndFunc
Alles anzeigen
Das geht bestimmt auch noch eleganter, aber ich habe keine Ahnung wie
@AspirinJunkie
Danke für den Hinweis. Dachte das es falsch ist, weil es in der Hilfe auch ohne = yes steht.
Vielleicht benötigt dein Script ja ein "#RequireAdmin" um den Vorgang auszuführen
Gesendet von iPhone mit Tapatalk
Edit:
Hab mir dein Script grade mal am PC angeschaut.
Du hast zwar ein "#RequireAdmin" drin, aber das ist falsch.
Dein sieht so aus:
Es muss aber so aussehen:
Hallo,
ich weiß nicht ob du es mittlerweile selbst gelöst hast.
Aber die '&' Dinger müssen durch ein '&' ersetzt werden.
Das sollte das Problem lösen.
LG
Du könntest dir selber was kleines dafür basteln. Bin grade unterwegs deswegen kann ich dir kein Beispiel geben. Könntest es aber mal mit "case inputbox" versuchen und dann halt "guictrlsettext = '' " müsste eigentlich klappen wenn ich mich nicht irre
Ich wäre auch dafür das man hilfreiche Kommentare auch als hilfreich markieren kann. Eine Dislike Funktion fände ich persönlich nicht so schön.