module Graphics
  #取得窗口句柄
  HWND = Win32API.new('user32','GetActiveWindow',nil,'l').call
  def self.fullscreen?
    #取得窗口范围矩形
    window_rect = "\0" * 16
    Win32API.new('user32','GetWindowRect',['l','p'],'i').call(HWND,window_rect)
    wl,wt,wr,wb = window_rect.unpack('llll')
    #取得客户区矩形
    client_rect = "\0" * 16
    Win32API.new('user32','GetClientRect',['l','p'],'i').call(HWND,client_rect)
    cl,ct,cr,cb = client_rect.unpack('llll')
    wr - wl == cr
  end
end

使用时:

Graphics.fullscreen?    #当游戏处于全屏状态时返回true, 否则返回false

原理:使用GetWindowRect 和GetClientRect 分别取得游戏窗口的整个范围矩形和客户区矩形。游戏全屏后,由于不再存在边框,这两个矩形就是相等的。而在窗口模式下,客户区矩形会小一些。

分享到: