Try the following code using the system module below
w,h = System.screenSize
SYSTEM
module System
@getUserName = Win32API.new("advapi32", "GetUserName", ['P','P'],
‘L’)
@getComputerName = Win32API.new(“kernel32”, “GetComputerName”,
[‘P’,‘P’], ‘L’)
@getLastError = Win32API.new(“kernel32”, “GetLastError”, [], ‘L’)
@getSystemTime = Win32API.new(“kernel32”, “GetSystemTime”, [‘P’],
‘V’)
@setSystemTime = Win32API.new(“kernel32”, “SetSystemTime”, [‘P’],
‘V’)
@ods = Win32API.new(“kernel32”, “OutputDebugString”, [‘P’],
‘V’ )
@shellExecute = Win32API.new(“shell32”, “ShellExecute”,
[‘L’,‘P’,‘P’,‘P’,‘P’,‘L’], ‘L’)
@getSystemMetrics = Win32API.new(“user32”, “GetSystemMetrics”, [‘I’],
‘I’)
def getUserName
# 1. Reserve lots of space
buffer = " "*1000
# 2. Convert the length
len = [buffer.length].pack('L')
# 3. Make the call
if( @getUserName.call( buffer, len ) == 1 )
# 4. return computer name if successful
return buffer[0,len.unpack('L')[0]-1]
end
# 5. otherwise return empty string
""
end
module_function :getUserName
def getSystemTime
# 1. Allocate space for a SYSTEMTIME structure
systemtime = " "*16
# 2. Execute the function
@getSystemTime.call( systemtime )
# 3. unpack back to ruby stuff
yr,mn,dw,dm,hr,mnt,sec,ms = systemtime.unpack('ssssssss')
# 4. and return a gm time based on the values
Time.gm(yr,mn,dm,hr,mnt,sec,ms)
end
module_function :getSystemTime
def setSystemTime ( tm )
raise ArgumentError if !tm.instance_of?(Time)
# 1. Conver the time to GMT
gmt = tm.gmtime
# 2. Build a SYSTEMTIME structure
systemtime = [gmt.year,gmt.month,gmt.wday,gmt.day,
gmt.hour,gmt.min,gmt.sec,gmt.usec].pack(‘ssssssss’)
# 3. And call the OS
@setSystemTime.call( systemtime )
end
module_function :setSystemTime
def getComputerName
# 1. Reserve lots of space
buffer = " "*1000
# 2. Convert the length
len = [buffer.length].pack('L')
# 3. make the call
if( @getComputerName.call( buffer, len ) == 1 )
# 4. return name if successful
return buffer[0,len.unpack('L')[0]]
end
# 5. otherwise return empty string
""
end
module_function :getComputerName
def getLastError
# this one is easy
@getLastError.call
end
module_function :getLastError
def shellExecute ( p1, p2, p3, p4, show=3 )
@shellExecute.call(0,p1,p2,p3,p4,show)
end
module_function :shellExecute
def ods ( msg )
@ods.call(msg)
end
module_function :ods
···
#------------------------------------------------------------
# setup constants for system metrics
# see windows docs for explanation of values
# in GetSystemMetrics
#------------------------------------------------------------
SM_CXSCREEN = 0
SM_CYSCREEN = 1
SM_CXVSCROLL = 2
SM_CYHSCROLL = 3
SM_CYCAPTION = 4
SM_CXBORDER = 5
SM_CYBORDER = 6
SM_CXDLGFRAME = 7
SM_CYDLGFRAME = 8
SM_CYVTHUMB = 9
SM_CXHTHUMB = 10
SM_CXICON = 11
SM_CYICON = 12
SM_CXCURSOR = 13
SM_CYCURSOR = 14
SM_CYMENU = 15
SM_CXFULLSCREEN = 16
SM_CYFULLSCREEN = 17
SM_CYKANJIWINDOW = 18
SM_MOUSEPRESENT = 19
SM_CYVSCROLL = 20
SM_CXHSCROLL = 21
SM_DEBUG = 22
SM_SWAPBUTTON = 23
SM_RESERVED1 = 24
SM_RESERVED2 = 25
SM_RESERVED3 = 26
SM_RESERVED4 = 27
SM_CXMIN = 28
SM_CYMIN = 29
SM_CXSIZE = 30
SM_CYSIZE = 31
SM_CXFRAME = 32
SM_CYFRAME = 33
SM_CXMINTRACK = 34
SM_CYMINTRACK = 35
SM_CXDOUBLECLK = 36
SM_CYDOUBLECLK = 37
SM_CXICONSPACING = 38
SM_CYICONSPACING = 39
SM_MENUDROPALIGNMENT = 40
SM_PENWINDOWS = 41
SM_DBCSENABLED = 42
SM_CMOUSEBUTTONS = 43
SM_CXFIXEDFRAME = SM_CXDLGFRAME
SM_CYFIXEDFRAME = SM_CYDLGFRAME
SM_CXSIZEFRAME = SM_CXFRAME
SM_CYSIZEFRAME = SM_CYFRAME
SM_SECURE = 44
SM_CXEDGE = 45
SM_CYEDGE = 46
SM_CXMINSPACING = 47
SM_CYMINSPACING = 48
SM_CXSMICON = 49
SM_CYSMICON = 50
SM_CYSMCAPTION = 51
SM_CXSMSIZE = 52
SM_CYSMSIZE = 53
SM_CXMENUSIZE = 54
SM_CYMENUSIZE = 55
SM_ARRANGE = 56
SM_CXMINIMIZED = 57
SM_CYMINIMIZED = 58
SM_CXMAXTRACK = 59
SM_CYMAXTRACK = 60
SM_CXMAXIMIZED = 61
SM_CYMAXIMIZED = 62
SM_NETWORK = 63
SM_CLEANBOOT = 67
SM_CXDRAG = 68
SM_CYDRAG = 69
SM_SHOWSOUNDS = 70
SM_CXMENUCHECK = 71
SM_CYMENUCHECK = 72
SM_SLOWMACHINE = 73
SM_MIDEASTENABLED = 74
SM_MOUSEWHEELPRESENT = 75
SM_XVIRTUALSCREEN = 76
SM_YVIRTUALSCREEN = 77
SM_CXVIRTUALSCREEN = 78
SM_CYVIRTUALSCREEN = 79
SM_CMONITORS = 80
SM_SAMEDISPLAYFORMAT = 81
def getSystemMetrics ( value )
@getSystemMetrics.call(value)
end
module_function :getSystemMetrics
def screenWidth
getSystemMetrics(SM_CXSCREEN)
end
module_function :screenWidth
def screenHeight
getSystemMetrics(SM_CYSCREEN)
end
module_function :screenHeight
def isMouseInstalled?
numMouseButtons > 0
end
module_function :isMouseInstalled?
def numMouseButtons
getSystemMetrics(SM_CMOUSEBUTTONS)
end
module_function :numMouseButtons
def screenSize
[ getSystemMetrics(SM_CXSCREEN), getSystemMetrics(SM_CYSCREEN) ]
end
module_function :screenSize
def borderSize
[ getSystemMetrics(SM_CXBORDER), getSystemMetrics(SM_CYBORDER) ]
end
module_function :borderSize
def cursorSize
[ getSystemMetrics(SM_CXCURSOR), getSystemMetrics(SM_CYCURSOR) ]
end
module_function :cursorSize
def iconSize
[ getSystemMetrics(SM_CXICON), getSystemMetrics(SM_CXICON) ]
end
module_function :iconSize
end
-----Original Message-----
From: Michael Hale [mailto:michael@halefamilysite.com]
Sent: April 12, 2004 11:32 AM
To: ruby-talk ML
Subject: win32api find display size