Stand-alone kase - sinhronizacija vremena

Dec 1, 2012 at 11:50 PM

Točno vrijeme na računalu postalo je bitno. Prazna baterija na motherboard-u znači da sat stoji kad se isključi napajanje računala. Mehanizam ugrađen u Windowse radi sihronizaciju jednom tjedno. Razne time-servere koji se spominju na net-u nisam znao/mogao iskoristiti.

To su razlozi zbog kojih sam smislio vlastito rješenje i nadam se da ću ovime nekom pomoći.

Na server koji hosta moju web stranicu (koji je vremenski sinhroniziran sa Carnet-ovim time serverom) postavio sam asp-skriptu sljedećeg sadržaja pod imenom TimeSync.asp (pretpostavljam da slično izgleda i odgovarajući PHP)


<%response.write(now())%>


Na stand-alone kasama, prilikom pokretanja aplikacije pokrenem i VB-skriptu sljedećeg sadržaja (napravite copy-paste u Notepad, ljepše će izgledati uz neproporcionalni font)


Option Explicit                                          ' Testirano na WinXP Pro SP3
Dim Upit, MojeVrijeme, Datum, Vrijeme, Komanda, WshShell
Const TimeServer="http://www.MyHomePage.hr/TimeSync.asp" ' URL skripte koja vraća vrijeme servera
                                                         ' Umjesto imena MyServer može biti i IP adresa
if Ping("MyServer.hr")="DOSTUPNO" then                   ' Ako je server dostupan,
  'Set Upit=CreateObject ("MSXML2.XMLHTTP.3.0")          ' Kreiram objekt koji će "dovući" sadržaj
  Set Upit=CreateObject ("MSXML2.ServerXMLHTTP")         ' (source) "web stranice"
  'Set Upit=CreateObject ("Microsoft.XMLHTTP")           ' <- Ovaj odradi jednom i poslije vraća
                                                         '    uvijek isto. Zašto?
  Upit.Open "GET",TimeServer,False                       ' Složim upit
  Upit.Send                                              ' Pošaljem
  MojeVrijeme=Upit.ResponseText                          ' Zapamtim odgovor
  Set Upit=Nothing                                       ' Ubijem objekt

  Vrijeme=Mid(MojeVrijeme, 12, 8)                        ' Rastavim MojeVrijeme na Datum i Vrijeme
  Datum=Mid(MojeVrijeme, 1, 2) & "-" & Mid(MojeVrijeme, 4, 2) & "-" & Mid(MojeVrijeme, 7, 4)

  Set WshShell=WScript.CreateObject("WScript.Shell")     ' Postavi vrijeme i datum. Koristim RUN
  Komanda="cmd.exe /c time "&Vrijeme                     ' jer omogućuje da odradi bez prozora (0)
  WshShell.Run Komanda, 0, TRUE                          ' TRUE omogućuje da vrati return kod, ali
                                                         ' CMD.EXE uvijek vraća 0, pa to ne mogu
  Komanda="cmd.exe /c date "&Datum                       ' provjeriti. Ako vrijeme ili datum nisu
  WshShell.Run Komanda, 0, TRUE                          ' legalni, naprosto ne odradi promjenu
  Set WshShell=Nothing                                   ' Ubijem objekt
  ' WScript.echo MojeVrijeme &vbcrlf& Datum & " " & Vrijeme  'Samo za testiranje
else
  ' WScript.echo "Server nedostupan"                         'Samo za testiranje
end if
WScript.quit

'==============================================================================='
Function Ping(myHostName)                                ' Ovu funkciju sam našao na net-u, stvarno
Dim colPingResults, objPingResult, strQuery              ' više ne znam gdje, isprika autoru,
                                                         ' ne mogu mu navesti ime.
strQuery = "SELECT * FROM Win32_PingStatus WHERE Address = '" & myHostName & "'"
Set colPingResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )

For Each objPingResult In colPingResults
  If Not IsObject( objPingResult ) Then
    Ping = "NEDOSTUPNO"
  ElseIf objPingResult.StatusCode = 0 Then
    Ping = "DOSTUPNO"
  Else
    Ping = "NEDOSTUPNO"
  End If
Next
Set colPingResults = Nothing
End Function


U gore navedenoj VB-skripti trebate samo zamijeniti "MyServer" i "MyHomePage" svojim podacima. Iz svoje DOS aplikacije pozivam ju kao "CScript.exe /NoLogo TimeSync.vbs"

Happy New Year!

Dec 2, 2012 at 8:35 PM

ISPRAVKA: U prethodnom postu sam "pejstao" krivu asp-skriptu. Umjesto: <%response.write(now())%>

treba stajati:

<%response.write(Right("0"&Day(now()),2)&"."&Right("0"&Month(now()),2)&"."&Year(now())&" "&Right("0"&Hour(now()),2)&":"&Right("0"&Minute(now()),2)&":"&Right("0"&Second(now()),2))%>

Sorry!