'Olá pessoal ! estou postando essa dica aqui no fórum pq a página de dicas está retornando erro HTTP 500 (erro interno do servidor). Peço a gentileza aos moderadores para moverem para a seção de dicas, ok ?
'Olá pessoal! Além de programador eu tenho uma web-rádio que funciona em rede, com locutores que fazem seus programas se conectando ao vivo de diversas partes do Brasil. Por isso a necessidade de que as máquinas de todos os locutores da rádio estejam perfeitamente sincronizadas (hora, minuto e segundo exatos), pra que não exista espaço em "branco" na programação ou "atropele" a programação corrente. Por essa razão bolei esse programinha muito útil, que sincroniza a hora do relógio do windows com o server da Microsoft. Ao iniciar o Windows e a cada meia hora o programa faz a sincronização.
'Uso o programa na minha web-rádio e distribuo pra todos os locutores colaboradores que fazem parte da rede, mas os colegas mais criativos poderão encontrar outros usos interessantes para esse programa.
'O programa é auto instalável na unidade de HD do sistema (qualquer que seja), bastando clicar sobre ele para que seja instalado e executado. Uma vez instalado, ele é iniciado junto com o windows. O form1 deve ser configurado de maneira que fique "invisível", enquanto que o form3 poderá ser um pequeno banner que mostra o texto "sincronizando..." sobre o relógio do windows. Na verdade usei apenas o control box deste form como "banner", no modo 4 - Fixed TollWindow.
'o código segue abaixo!
'em general declarations:***********************************************
Private Declare Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Const INFINITE = -1&
Private Const SYNCHRONIZE = &H100000
Dim lTEMPO As Long
Dim sincro As String
'restante:**********************************************************
Private Sub Form_Load()
Timer1.Interval = 1000 ' isto representa 1 segundo
lTEMPO = 0
sincro = Environ("windir") + "System32W32tm.exe /resync"
On Error GoTo instala
Open "C: ime.exe" For Input As #1
Close #1
GoTo continua
instala:
FileCopy App.Path + " ime.exe", Environ("systemdrive") + " ime.exe"
Dim Reg As Object
Set Reg = CreateObject("wscript.shell")
Reg.RegWrite "HKEY_LOCAL_MACHINESOFTWAREMICROSOFTWINDOWSCURRENTVERSIONRUN" & "Sincronizador de Hora", Environ("systemdrive") + " ime.exe"
Shell Environ("systemdrive") + " ime.exe"
End
continua:
Call sincronizar
End Sub
Private Sub Timer1_Timer()
lTEMPO = lTEMPO + 1
If lTEMPO >= 1800 Then ' AQUI 60 REPRESENTARÁ 60 SEGUNDOS OU 1 MINUTO
Call sincronizar
lTEMPO = 0
End If
End Sub
Private Sub sincronizar()
Form3.Visible = True
Dim iTask As Long, ret As Long, pHandle As Long
iTask = Shell(sincro, vbHide)
pHandle = OpenProcess(SYNCHRONIZE, False, iTask)
ret = WaitForSingleObject(pHandle, INFINITE)
ret = CloseHandle(pHandle)
Form3.Visible = False
End Sub
'Agradeço a todos os colegas pelas respostam as minhas dúvidas enviadas pelo fórum, e lembro que se não fosse a ajuda de vcs esse programa não seria possível.
'Os colegas que desejarem os arquivos form1 e form 3 ou o programa inteiro com o código fonte, terei o maior prazer em repassar. meu e-mail é:
dani-conrado@bol.com.br'É isso aí pessoal...Abraços !!!