logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Autoit] Ustawienie samej daty - modyfikacja skryptu.

admirators 05 Wrz 2011 10:07 2422 12
REKLAMA
  • #1 9896560
    admirators
    Poziom 18  
    Posty: 486
    Pomógł: 13
    Ocena: 59
    Witam
    Proszę o wskazówkę którą zmienną należy wykasować / zmodyfikować aby skrypt ustawiał sama datę bez zmiany czasu.
    Czy wystarczy usunąć zmienną ; Create GU aby skrypt zadziałał w tle.
    PS.Czy ciężkim tematem jest wstawienie przycisku który z powrotem dokona synchronizacji daty z serwerem czasu.
    Z góry dziękuje za pomoc
    Pozdrawiam

    
    #include <GuiConstantsEx.au3>
    #include <Date.au3>
    #include <WindowsConstants.au3>
    
    ; Under Vista the  Windows API "SetSystemTime" may be rejected due to system security
    
    Global $iMemo
    
    _Main()
    
    Func _Main()
        Local $hGUI, $tCur, $tNew
    
        ; Create GUI
        $hGUI = GUICreate("Time", 400, 300)
        $iMemo = GUICtrlCreateEdit("", 2, 2, 396, 296, $WS_VSCROLL)
        GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
        GUISetState()
    
        ; Get current system time
        $tCur = _Date_Time_GetSystemTime()
        MemoWrite("Current system date/time .: " & _Date_Time_SystemTimeToDateTimeStr($tCur))
    
        ; Set new system time
        $tNew = _Date_Time_EncodeSystemTime(8, 19, @YEAR, 3, 10, 45)
        If Not _Date_Time_SetSystemTime(DllStructGetPtr($tNew)) Then
            MsgBox(4096, "Error", "System clock cannot be SET" & @CRLF & @CRLF & _WinAPI_GetLastErrorMessage())
            Exit
        EndIf
        $tNew = _Date_Time_GetSystemTime()
        MemoWrite("New system date/time .....: " & _Date_Time_SystemTimeToDateTimeStr($tNew))
    
        ; Restore system time
        _Date_Time_SetSystemTime(DllStructGetPtr($tCur))
    
        ; Get current system time
        $tCur = _Date_Time_GetSystemTime()
        MemoWrite("Current system date/time .: " & _Date_Time_SystemTimeToDateTimeStr($tCur))
    
        ; Loop until user exits
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
    
    EndFunc   ;==>_Main
    
    ; Write a line to the memo control
    Func MemoWrite($sMessage)
        GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
    EndFunc   ;==>MemoWrite
    
    
    
    
  • REKLAMA
  • #2 9896681
    markonedj
    Poziom 22  
    Posty: 374
    Pomógł: 60
    Ocena: 1
    admirators napisał:
    Witam
    Proszę o wskazówkę którą zmienną należy wykasować / zmodyfikować aby skrypt ustawiał sama datę bez zmiany czasu.

    Nie bardzo rozumiem

    admirators napisał:

    Czy wystarczy usunąć zmienną ; Create GU aby skrypt zadziałał w tle.

    ; Create GUI jest komentarzem. Funkcją odpowiedzialną za wyświetlenie okna jest GUISetState - usunięcie tej funkcji powinno spowodować że okno się nie wyświetli

    admirators napisał:

    Czy ciężkim tematem jest wstawienie przycisku który z powrotem dokona synchronizacji daty z serwerem czasu.

    Wstawienie przycisku nie jest problemem, problemem będzie napisanie funkcji która to wykona

    Najlepiej byłoby żebyś napisał co chcesz tym skryptem osiągnąć dokładnie, bo z tego co widzę to jest on żywcem wzięty z dokumentacji funkcji _Date_Time_GetLocalTime i służy pokazaniu jak odczytać czas z lokalnej maszyny na której skrypt jest uruchomiony.
  • #3 9896710
    admirators
    Poziom 18  
    Posty: 486
    Pomógł: 13
    Ocena: 59
    markonedj napisał:
    (...)wzięty z dokumentacji funkcji _Date_Time_GetLocalTime i służy pokazaniu jak odczytać czas z lokalnej maszyny na której skrypt jest uruchomiony.
    Zgadza się.

    W tej postaci skrypt odczytuje datę i czas lokalny, ustanawia nowy czas/ datę, następnie reset.
    W jaki sposób odczytać / zapisać tylko datę czyli dzień miesiąc rok (bez ustawiania - deklarowania godziny tj 3, 10, 45 czyli 3:10:45).
    Z synchonizacją czasu z serwera NTP sobie poradziłem.
  • REKLAMA
  • #5 9896748
    admirators
    Poziom 18  
    Posty: 486
    Pomógł: 13
    Ocena: 59
    Pozwoliłem sobie zilustrować zamierzony efekt.

    [Autoit] Ustawienie samej daty - modyfikacja skryptu.
  • Pomocny post
    #6 9896818
    markonedj
    Poziom 22  
    Posty: 374
    Pomógł: 60
    Ocena: 1
    Jak masz fragment
    
        ; Get current system time 
        $tCur = _Date_Time_GetSystemTime() 
        MemoWrite("Current system date/time .: " &   _Date_Time_SystemTimeToDateTimeStr($tCur)) 
    


    To zamiast funkcji _Date_Time_SystemTimeToDateTimeStr użyj funkcji _Date_Time_SystemTimeToDateStr tak:
    
       ; Get current system time 
        $tCur = _Date_Time_GetSystemTime() 
        MemoWrite("Current system date/time .: " &  _Date_Time_SystemTimeToDateStr($tCur)) 
    


    Ta funkcja zwraca tylko samą datę, bez czasu. Tak samo w pozostałych częściach programu pozamieniaj te funkcje

    Tu masz kod po modyfikacjach tych funkcji:
    
    
    #include <GuiConstantsEx.au3> 
    #include <Date.au3> 
    #include <WindowsConstants.au3> 
    
    ; Under Vista the  Windows API "SetSystemTime" may be rejected due to system security 
    
    Global $iMemo 
    
    _Main() 
    
    Func _Main() 
        Local $hGUI, $tCur, $tNew 
    
        ; Create GUI 
        $hGUI = GUICreate("Time", 400, 300) 
        $iMemo = GUICtrlCreateEdit("", 2, 2, 396, 296, $WS_VSCROLL) 
        GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New") 
        GUISetState() 
    
        ; Get current system time 
        $tCur = _Date_Time_GetSystemTime() 
        MemoWrite("Current system date/time .: " &  _Date_Time_SystemTimeToDateStr($tCur)) 
    
        ; Set new system time 
        $tNew = _Date_Time_EncodeSystemTime(8, 19, @YEAR, 3, 10, 45) 
        If Not _Date_Time_SetSystemTime(DllStructGetPtr($tNew)) Then 
            MsgBox(4096, "Error", "System clock cannot be SET" & @CRLF & @CRLF & _WinAPI_GetLastErrorMessage()) 
            Exit 
        EndIf 
        $tNew = _Date_Time_GetSystemTime() 
        MemoWrite("New system date/time .....: " & _Date_Time_SystemTimeToDateStr($tNew)) 
    
        ; Restore system time 
        _Date_Time_SetSystemTime(DllStructGetPtr($tCur)) 
    
        ; Get current system time 
        $tCur = _Date_Time_GetSystemTime() 
        MemoWrite("Current system date/time .: " & _Date_Time_SystemTimeToDateStr($tCur)) 
    
        ; Loop until user exits 
        Do 
        Until GUIGetMsg() = $GUI_EVENT_CLOSE 
    
    EndFunc   ;==>_Main 
    
    ; Write a line to the memo control 
    Func MemoWrite($sMessage) 
        GUICtrlSetData($iMemo, $sMessage & @CRLF, 1) 
    EndFunc   ;==>MemoWrite 
    

    i efekt końcowy:
    [Autoit] Ustawienie samej daty - modyfikacja skryptu.
  • REKLAMA
  • #7 9896865
    admirators
    Poziom 18  
    Posty: 486
    Pomógł: 13
    Ocena: 59
    Dziękuję bardzo. Dokładnie o to mi chodziło.
    Nie mogłem doszukać się funkcji _Date_Time_SystemTimeToDateStr
    Pozdrawiam

    Dodano po 53 [minuty]:

    Pojawił się kolejny problem
    W momencie pominięcia linijki resetu daty, "szaleje" godzina. Ustawia się na 5: z minutami
    ; _Date_Time_SetSystemTime(DllStructGetPtr($tCur))
  • #8 9897055
    markonedj
    Poziom 22  
    Posty: 374
    Pomógł: 60
    Ocena: 1
    Hmm nie wiem czy rozumiem. Linijka
    _Date_Time_SetSystemTime(DllStructGetPtr($tCur)) 

    Odpowiada za przywrócenie czasu systemowego do wartości odczytanej za pierwszym razem. Pomienięcie tej linii powoduje że ustawienia czasu na lokalnej maszynie się zmieniają na wartości podane ręcznie pod komentarzem "Set new system time". Dlatego przy próbie ponownego odczytu pokazują się te minuty o których piszesz.
  • #9 9897072
    admirators
    Poziom 18  
    Posty: 486
    Pomógł: 13
    Ocena: 59
    Zamierzony efekt.
    [Autoit] Ustawienie samej daty - modyfikacja skryptu.
  • #10 9897084
    markonedj
    Poziom 22  
    Posty: 374
    Pomógł: 60
    Ocena: 1
    Usuń ten kod:
    
        ; Restore system time 
        _Date_Time_SetSystemTime(DllStructGetPtr($tCur)) 
    
        ; Get current system time 
        $tCur = _Date_Time_GetSystemTime() 
        MemoWrite("Current system date/time .: " & _Date_Time_SystemTimeToDateStr($tCur)) 
    
  • #11 9897115
    admirators
    Poziom 18  
    Posty: 486
    Pomógł: 13
    Ocena: 59
    Niestety ciągle 5:10. Pojęcia nie mam co się dzieje z tą godziną.

    Pomogło: @HOUR-2
  • REKLAMA
  • #12 9897131
    markonedj
    Poziom 22  
    Posty: 374
    Pomógł: 60
    Ocena: 1
    Wklej kod bo u mnie po usunięciu tej linii efekt jest taki jak na Twoim screenie
  • #13 10000996
    admirators
    Poziom 18  
    Posty: 486
    Pomógł: 13
    Ocena: 59
    Pomogło: @HOUR-2

Podsumowanie tematu

✨ Użytkownik poszukiwał wskazówek dotyczących modyfikacji skryptu w Autoit, aby ustawić tylko datę bez zmiany czasu. W odpowiedziach wyjaśniono, że usunięcie funkcji GUISetState spowoduje, że okno nie będzie się wyświetlać, a do uzyskania samej daty można użyć funkcji _Date_Time_SystemTimeToDateStr zamiast _Date_Time_SystemTimeToDateTimeStr. Użytkownik zrealizował synchronizację czasu z serwerem NTP, ale napotkał problem z "szalejącą" godziną po pominięciu linii resetującej czas. Ostatecznie rozwiązaniem okazało się dostosowanie wartości @HOUR.
Wygenerowane przez model językowy.
REKLAMA