标签: RMVX

  • 判断RM窗口是否处于全屏状态

    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 分别取得游戏窗口的整个范围矩形和客户区矩形。游戏全屏后,由于不再存在边框,这两个矩形就是相等的。而在窗口模式下,客户区矩形会小一些。