djberg96 / hotmail.com (Daniel Berger) wrote in message news:<6e613a32.0401200913.266461a8 / posting.google.com>...
> Joel VanderWerf <vjoel / PATH.Berkeley.EDU> wrote in message news:<400C6835.1010203 / path.berkeley.edu>...
> > Some of the File#flock arguments do not work on Win95/Win98/WinME 
> > (namely LOCK_SH and LOCK_NB), so I'm looking for a way to detect what 
> > kind of windows the process is running on. RUBY_PLATFORM and rbconfig.rb 
> > do not seem to help.
> > 
> > Any ideas?
> 
> This is stolen from Moonwolf's "init.rb" file (part of the win32/winbase module).
> 
> require "Win32API"
> 
> buf = [148].pack("L")+"\0"*144
> b = Win32API.new('kernel32','GetVersionExA','P','I').call(buf)
> if b != 0
>    (size,major,minor,build,platform,version)=buf.unpack("LLLLLA128")
> 	WINVER        = (major << 8) | minor
> 	WINVER_MAJOR  = major
> 	WINVER_MINOR  = minor
> 	WINVER_BUILD  = build
> 	WIN32_WINDOWS = WINVER
> 	case platform
> 		when 0 #Win32s
> 			WINVER_OSNAME = "Win32s"
> 			WINPLATFORM   = "Win32s"
> 			UNICODE       = false
> 			WIN32_IE      = 0x000
> 		when 1 #Win95/98
> 			WINPLATFORM = "Win95"
> 			UNICODE     = false
> 			if minor==0 #Win95
> 				if build >= 1212 #Win95OSR2.5
> 					WINVER_OSNAME = "Win95OSR2.5"
> 					WIN32_IE      = 0x300
> 				elsif build >= 1111 #Win95OSR2
> 					WINVER_OSNAME = "Win95OSR2"
> 					WIN32_IE      = 0x300
> 				else #Win95
> 					WINVER_OSNAME = "Win95"
> 					WIN32_IE      = 0x200
> 				end
> 			else #Win98/98SE/Me
> 				case minor
> 				when 0x10 #98/98SE
> 					if build>=2222 #98SE
> 						WINVER_OSNAME = "Win98SE"
> 						WIN32_IE      = 0x400
> 					else #98
> 						WINVER_OSNAME = "Win98"
> 						WIN32_IE      = 0x400
> 					end
> 				when 0x90 #Me
> 					WINVER_OSNAME = "WinMe"
> 					WIN32_IE      = 0x500
> 				else
> 					WINVER_OSNAME = "Win98???"
> 					WIN32_IE      = 0x400
> 				end
> 			end
> 		when 2 #WinNT/2000
> 			WINPLATFORM = "WinNT"
> 			if major==4     #WinNT4
> 				WINVER_OSNAME = "WinNT4"
> 				UNICODE       = true
> 				WIN32_IE      = 0x300
> 			elsif major==5  #Win2000
> 				WINVER_OSNAME = "Win2000"
> 				UNICODE       = true
> 				WIN32_IE      = 0x400
> 			else #WinNT3.5
> 				WINVER_OSNAME = "WinNT3.x???"
> 				UNICODE       = true
> 				WIN32_IE      = 0x000
> 			end
> 	end
> else
> 	WINVER_OSNAME = "???"
> 	UNICODE       = false
> 	WINVER        = 0x400
> 	WIN32_WINDOWS = 0x400
> 	WIN32_IE      = 0x300
> end
> 
> puts WINVER_OSNAME
> 
 

What about XP?  I suspect it falls somewhere in the WinNT/2000 case.

Phil