#!/usr/bin/env ruby #------ PhidgetSaver.rb: Phidgetでスクリーンセーバー-------# #------------------- By Koji Tsukada 2005/11 --------------# require "socket" require "dl/import" module Win32 extend DL::Importable typealias "DWORD", "unsigned long" typealias "BYTE", "unsigned char" typealias "ULONG", "unsigned long" KEYEVENTF_KEYUP = 0x02 VK_SHIFT = 0x10 dlload "user32.dll" extern "void keybd_event(BYTE, BYTE, DWORD, ULONG)" def send_keybd_event(bVk, dwFlags = 0) keybd_event(bVk, 0, dwFlags, 0) end module_function :send_keybd_event end module PhidgetApplication class PhidgetSaver def initialize(ip = "127.0.0.1", port = 4321, threshold = 200, file = "logon.scr") main(ip, port, threshold, file) end def main(ip, port, threshold, file) socket = TCPSocket.new(ip, port) while line = socket.gets level = parse(line.chomp) p level.to_s if(level != nil) if check_brightness?(level, threshold) start_screen_saver(file) else stop_screen_saver end end end socket.close end def check_brightness?(level, threshold) flag = false flag = true if level > threshold end def parse(line) args = line.split(",") if args[0] == "In" and args[1] == "InterfaceKit" and args[2] == "Analog" case args[3] when "0" level = args[4].to_i end end level end def start_screen_saver(file) if(!@saver_working) system "cygstart #{file}" @saver_working = true end end def stop_screen_saver if(@saver_working) Win32.send_keybd_event(Win32::VK_SHIFT) Win32.send_keybd_event(Win32::VK_SHIFT, Win32::KEYEVENTF_KEYUP) @saver_working = false end end end ############################################# #プログラム開始 ############################################# case ARGV.length when 0: puts "Usage: PhidgetSaver [ip] [port] [threshold] [saver_file]" PhidgetSaver.new() when 2: PhidgetSaver.new(ARGV[0], ARGV[1].to_i) when 3: PhidgetSaver.new(ARGV[0], ARGV[1].to_i, ARGV[2].to_i) when 4: PhidgetSaver.new(ARGV[0], ARGV[1].to_i, ARGV[2].to_i, ARGV[3]) else puts "Usage: PhidgetSaver [ip] [port] [threshold] [saver_file]" exit(0) end end