ruby 自动对时器 win32
ruby吧
全部回复
仅看楼主
level 9
sevk 楼主
#ruby 自动对时器 win32
require 'socket'
require 'time'
require "dl/import"
require "dl/struct"
module Kernel32
    extend DL::Importable
    dlload 'kernel32'
    SYSTEMTIME = struct [
      "WORD wYear",
      "WORD wMonth",
      "WORD wDayOfWeek",
      "WORD wDay",
      "WORD wHour",
      "WORD wMinute",
      "WORD wSecond",
      "WORD wMilliseconds",
    ]
    # These use GMT.
    extern "void GetSystemTime(SYSTEMTIME*)"
    extern "BOOL SetSystemTime(const SYSTEMTIME*)"
    # These use local time, like ruby's Time.now.
    extern "void GetLocalTime(SYSTEMTIME*)"
    extern "BOOL SetLocalTime(const SYSTEMTIME*)"
end
# +time+ is a Time
def set_clock(time)
    local_time = Kernel32::SYSTEMTIME.malloc
    local_time.wYear           = time.year
    local_time.wMonth          = time.month
    local_time.wDay            = time.day
    local_time.wHour           = time.hour
    local_time.wMinute         = time.min
    local_time.wSecond         = time.sec
    local_time.wMilliseconds   = time.usec/1000
    unless Kernel32.setLocalTime(local_time)
      raise "Could not set local time to #{time}."
      else
          puts 'set time ok'
    end
end
$geted = false
def g(s)
     exit if $geted
     sleep 0.5
     t=s.recv_nonblock(2000).grep(/date:/i)[0]
     $geted = true
     puts 'get time'
     ti= Time.parse t[5..-1]
     set_clock(ti)
end
#取服务器时间
TCPSocket.open("www.g.cn", 80) {|s|
     s.send "GET / HTTP/1.0\r\n\r\n", 0
     40.times{ g(s) rescue nil }
}

2011年06月11日 01点06分 1
level 9
sevk 楼主
2012年06月11日 02点06分 3
1