Что нового

Как изменить системную дату компа ?

bigarN

Новичок
Сообщения
50
Репутация
0
:smile:Приветствую всех. Ребята позаимстовал у вас код и составил для нужды скриптик , за что вам всем спасибо. Вопрос у меня такой. Как с помощью скрипта изменить системную дату компьютера и после возвратить текущую дату :scratch:. Плз, помогите пожалуйста реализовать данный скрипт.
1.- Надо выбрать с листов день, месяц, год и все это поместить в лейбл "Избранная дата".
2.- После выбора и кликания на "Изменить" изменить системную дату компа на избранную дату.
3.- При нажатии "Отмена", возвратить системную дату на текущую
Форма скрипта здесь.
Код:
#Include <Date.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>

$Gui = GUICreate("Изменяется системная дата", 410, 210)
$nListView = GUICtrlCreateListView('', 2, 2, 50, 200, $LVS_REPORT, $LVS_EX_GRIDLINES)
$hListView = GUICtrlGetHandle($nListView)
_GUICtrlListView_AddColumn($hListView, 'День', 45)

$ListItem1 = _GUICtrlListView_AddItem($hListView, "01",0)
$ListItem2 = _GUICtrlListView_AddItem($hListView, "02",1)
$ListItem3 = _GUICtrlListView_AddItem($hListView, "03",2)
$ListItem4 = _GUICtrlListView_AddItem($hListView, "08",3)
$ListItem5 = _GUICtrlListView_AddItem($hListView, "12",4)
$ListItem6 = _GUICtrlListView_AddItem($hListView, "14",5)
$ListItem7 = _GUICtrlListView_AddItem($hListView, "17",6)
$ListItem8 = _GUICtrlListView_AddItem($hListView, "20",7)
$ListItem9 = _GUICtrlListView_AddItem($hListView, "28",8)
$ListItem10 = _GUICtrlListView_AddItem($hListView, "29",9)
$ListItem11= _GUICtrlListView_AddItem($hListView, "30",10)
$ListItem12 = _GUICtrlListView_AddItem($hListView, "31",11)

$nListView2 = GUICtrlCreateListView('', 55, 2, 70, 200, $LVS_REPORT, $LVS_EX_GRIDLINES)
$hListView2 = GUICtrlGetHandle($nListView2)
_GUICtrlListView_AddColumn($hListView2, 'Месяц', 65)

$ListItem1 = _GUICtrlListView_AddItem($hListView2, "Январь",0)
$ListItem2 = _GUICtrlListView_AddItem($hListView2, "Февраль",1)
$ListItem3 = _GUICtrlListView_AddItem($hListView2, "Март",2)
$ListItem4 = _GUICtrlListView_AddItem($hListView2, "Апрель",3)
$ListItem5 = _GUICtrlListView_AddItem($hListView2, "Май",4)
$ListItem6 = _GUICtrlListView_AddItem($hListView2, "Июнь",5)
$ListItem7 = _GUICtrlListView_AddItem($hListView2, "Июль",6)
$ListItem8 = _GUICtrlListView_AddItem($hListView2, "Август",7)
$ListItem9 = _GUICtrlListView_AddItem($hListView2, "Сентябрь",8)
$ListItem10 = _GUICtrlListView_AddItem($hListView2, "Октябрь",9)
$ListItem11 = _GUICtrlListView_AddItem($hListView2, "Ноябрь",10)
$ListItem12 = _GUICtrlListView_AddItem($hListView2, "Декабрь",11)


$nListView3 = GUICtrlCreateListView('', 128, 2, 60, 200, $LVS_REPORT, $LVS_EX_GRIDLINES)
$hListView3 = GUICtrlGetHandle($nListView3)
_GUICtrlListView_AddColumn($hListView3, 'Год', 55)

$ListItem1 = _GUICtrlListView_AddItem($hListView3, "2011",0)
$ListItem2 = _GUICtrlListView_AddItem($hListView3, "2012",1)
$ListItem3 = _GUICtrlListView_AddItem($hListView3, "2013",2)
$ListItem4 = _GUICtrlListView_AddItem($hListView3, "2014",3)
$ListItem5 = _GUICtrlListView_AddItem($hListView3, "2015",4)
$ListItem6 = _GUICtrlListView_AddItem($hListView3, "2016",5)
$ListItem7 = _GUICtrlListView_AddItem($hListView3, "2017",6)
$ListItem8 = _GUICtrlListView_AddItem($hListView3, "2018",7)
$ListItem9 = _GUICtrlListView_AddItem($hListView3, "2019",8)
$ListItem10 = _GUICtrlListView_AddItem($hListView3, "2020",9)
$ListItem11 = _GUICtrlListView_AddItem($hListView3, "2021",10)
$ListItem12 = _GUICtrlListView_AddItem($hListView3, "2022",11)

$LabelTkData = GUICtrlCreateLabel("Текущая дата", 200, 15, 110, 30)
$LabelNow=GUICtrlCreateLabel(_Now(),290, 15, 110, 18,0x1000)

$LabelIzD=GUICtrlCreateLabel('Избранная дата',200, 40, 110, 30)
$LabelIzData=GUICtrlCreateLabel('01 Сентябрь 2001',290, 40, 110, 18,0x1000)

$ButtonChDate = GUICtrlCreateButton("Изменить", 300, 115, 100, 25)
$ButtonNow = GUICtrlCreateButton("Отмена", 300, 145 ,100, 25)
$ButtonExit = GUICtrlCreateButton("Выйти", 300, 175, 100, 25)

$tTime = _Date_Time_GetLocalTime()
ConsoleWrite(_Date_Time_SystemTimeToDateTimeStr($tTime) & @CR)
GUISetState()

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
Global $B_DESCENDING[_GUICtrlListView_GetColumnCount ($hListView) ]
_GUICtrlListView_RegisterSortCallBack($hListView)

While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE ,$ButtonExit
        ExitLoop
    Case $ButtonChDate

	Case $ButtonNow


EndSwitch

WEnd


;==============================================
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
;==================================================================
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView,$LblTextListView

    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    $hWndListView2 = $hListView2
    If Not IsHWnd($hListView2) Then $hWndListView2 = GUICtrlGetHandle($hListView2)
	$hWndListView3 = $hListView3
    If Not IsHWnd($hListView3) Then $hWndListView3 = GUICtrlGetHandle($hListView3)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndListView, $hWndListView2, $hWndListView3
            Switch $iCode
                Case $NM_CLICK
                    Global $aHit = _GUICtrlListView_SubItemHitTest($hWndFrom)
                    GUICtrlSetData($LabelIzData,_GUICtrlListView_GetItemText($hWndFrom, $aHit [0],$aHit [1]))
					$LblTextListView = GUICtrlRead($LabelIzData)


            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc ; ===> WM_NOTIFY
;==============================================
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Код:
#include <GUIConstantsEx.au3>

$Form1 = GUICreate("Test", 213, 109)
$Date1 = GUICtrlCreateDate("", 8, 45, 194, 21)
GUICtrlSendMsg(-1, 0x1032, 0, "dd.MM.yy")
$Label1 = GUICtrlCreateLabel("Текущая дата (" & @MDAY & "." & @MON & "." & @YEAR & "), вы можете " & @CRLF & " поменять. Выберите нужную дату:", 8, 8, 374, 35)
$Button1 = GUICtrlCreateButton("Поменять", 20, 72, 75, 25)
$Button2 = GUICtrlCreateButton("Отмена", 110, 72, 75, 25)
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			RunWait(@ComSpec & " /C date " & GUICtrlRead($Date1), "", @SW_HIDE)
			GUICtrlSetData($Label1, "Текущая дата (" & @MDAY & "." & @MON & "." & @YEAR & "), вы можете " & @CRLF & " поменять. Выберите нужную дату:")
		Case $Button2
			Exit
	EndSwitch
WEnd
 
Автор
B

bigarN

Новичок
Сообщения
50
Репутация
0
Zaramot
Спасибо.Класно :smile: А кнопка «Отмена» не возвращает настоящую дату. Может скрипт должен сперва как то запомнить настоящую текущую дату , а при выходе и при действии кн «Отмена» возвращает настоящую дату компьютеру. :scratch:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
bigarN,
Можно так попробовать.
Код:
#include <GUIConstantsEx.au3>
#include <Date.au3>

Global $sYEAR = @YEAR, $sMON = @MON, $sMDAY = @MDAY, $fChange, _
		$iStart = TimerInit()

GUICreate('Test', 213, 109)
$nDate = GUICtrlCreateDate('', 8, 45, 194, 21)
GUICtrlSendMsg(-1, 0x1032, 0, 'dd.MM.yyyy')
$nLabel = GUICtrlCreateLabel('Текущая дата (' & @MDAY & '.' & @MON & '.' & @YEAR & _
		'), вы можете ' & @CRLF & ' поменять. Выберите нужную дату:', 8, 8, 374, 35)
$nButton1 = GUICtrlCreateButton('Поменять', 20, 72, 75, 25)
$nButton2 = GUICtrlCreateButton('Отмена', 110, 72, 75, 25)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			If $fChange Then
				If MsgBox(33, 'Question', 'Вернуть начальную дату?') = 1 Then
					_Date_Back()
				EndIf
			EndIf
			Exit
		Case $nButton1
			$aDate = StringSplit(GUICtrlRead($nDate), '.')
			If $aDate[0] <> 3 Then ContinueLoop
			_SetDate($aDate[1], $aDate[2], $aDate[3])
			$fChange = True
			GUICtrlSetState($nButton2, $GUI_ENABLE)
			GUICtrlSetData($nLabel, 'Текущая дата (' & @MDAY & '.' & @MON & '.' & @YEAR & _
					'), вы можете ' & @CRLF & ' поменять. Выберите нужную дату:')
		Case $nButton2
			_Date_Back()
			GUICtrlSetData($nLabel, 'Текущая дата (' & @MDAY & '.' & @MON & '.' & @YEAR & _
					'), вы можете ' & @CRLF & ' поменять. Выберите нужную дату:')
			GUICtrlSetData($nDate, '')
	EndSwitch
WEnd

Func _Date_Back()
	Local $s_Date_Back, $a_Split, $i_Diff = Round(TimerDiff($iStart) / 1000)
	$s_Date_Back = _DateAdd('s', $i_Diff, $sYEAR & '/' & $sMON & '/' & $sMDAY)
	$a_Split = StringSplit($s_Date_Back, '/')
	If $a_Split[0] = 3 Then
		_SetDate($a_Split[3], $a_Split[2], $a_Split[1])
		$fChange = False
	EndIf
EndFunc   ;==>_Date_Back
 

StarEdik

Новичок
Сообщения
365
Репутация
4
madmasles
Zaramot
Отличное решение.
С вашего позволения я бы добавил в ваш код строку для страховки от случайного закрытия программы.(строка вашый)
Код:
Case $GUI_EVENT_CLOSE
             _SetDate($sMDAY, $sMON, $sYEAR) ; Страховка от случайного закрытия
            Exit
 
Автор
B

bigarN

Новичок
Сообщения
50
Репутация
0
Спасибо большое всем за решение проблемы ( для меня это была проблемой – каждый раз вызвать аплет и …..)

После нажатия кн «Отмена» в Дата боксе остается изменение, не отображается настоящая текущая дата.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
bigarN [?]
После нажатия кн «Отмена» в Дата боксе остается изменение, не отображается настоящая текущая дата.
Поменял это и не только это.
 
Автор
B

bigarN

Новичок
Сообщения
50
Репутация
0
madmasles
Изумительно.Спасибо вам,уважаемый.
Zaramot
Вам тоже благодарен.
StarEdik
Спасибо.

Тема решена.
 
Верх