赞 | 68 |
VIP | 0 |
好人卡 | 0 |
积分 | 65 |
经验 | 0 |
最后登录 | 2023-7-2 |
在线时间 | 119 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 6483
- 在线时间
- 119 小时
- 注册时间
- 2020-1-8
- 帖子
- 234
|
本帖最后由 RPGzh500223 于 2021-11-4 14:32 编辑
全屏……很早以前游戏是直接修改显示器的分辨率来全屏,现在的话,没玩过什么游戏,反正我试了RMVA,直接修改该游戏窗口的分辨率即可。
说明:以下脚本是修改显示器分辨率的,按F5全屏切换。(如果和ALT+ENTER混用造成显示不正常,连按2次F5或ALT+ENTER)
BUG:全屏后,万一其他程序弹窗什么的,效果……。其他程序的窗口分辨率会被限制成此时显示器的分辨率大小(比如浏览器1000*1000,用了该脚本全屏后,浏览器只有800*600了)
如果能找人改exe或找到有关的dll,请勿使用此脚本。这是我不得己的办法,因为前2个我不会……
- module RGSS_PLAYER
- GetForegroundWindow = Win32API.new('user32', 'GetForegroundWindow', 'V', 'L')
- GetWndThrProID = Win32API.new('user32', 'GetWindowThreadProcessId', 'LP','L')
- GetCurrentThreadID = Win32API.new('kernel32', 'GetCurrentThreadId', 'V', 'L')
- FindWindowEx = Win32API.new('user32', 'FindWindowEx', 'LLPP', 'L')
-
- ThreadID = GetCurrentThreadID.call()
- hwnd = GetForegroundWindow.call()
- while GetWndThrProID.call(hwnd, nil) != ThreadID
- hwnd = FindWindowEx.call(0, hwnd, "RGSS Player", nil)
- end
- HWnd = hwnd
- end
- module FullScreen
- # 必须得设备支持,比如 800 * 600,1024 * 768 ……
- FullScreen_W = 800
- FullScreen_H = 600
- #--------------------------------------------------------------------------
- # ● API
- #--------------------------------------------------------------------------
- GetSystemMetrics = Win32API.new('user32', 'GetSystemMetrics', 'I', 'I')
- GetWindowLongA = Win32API.new('user32', 'GetWindowLongA', 'LI', 'L')
- SetWindowLongA = Win32API.new('user32', 'SetWindowLongA', 'LIL', 'L')
- EnumDS = Win32API.new('user32', 'EnumDisplaySettings', 'PLP', 'I')
- ChangeDS = Win32API.new('user32', 'ChangeDisplaySettings', 'PL', 'L')
- GetWndPlacement = Win32API.new('user32', 'GetWindowPlacement', 'LP', 'I')
- SetWndPlacement = Win32API.new('user32', 'SetWindowPlacement', 'LP', 'I')
- #--------------------------------------------------------------------------
- # ● 常量
- #--------------------------------------------------------------------------
- SM_CXSCREEN = 0
- SM_CYSCREEN = 1
-
- WS_BORDER = 0x800_000
- WS_DLGFRAME = 0x400_000
- WS_SYSMENU = 0x80_000
-
- GWL_STYLE = -16
-
- ENUM_CURRENT_SETTINGS = -1
-
- # 个人自定义的常量
- DEVOMODE_FLAG = "A32S4L5s5A32SL*"
-
- DM_PW_INDEX = 18
- DM_PH_INDEX = 19
-
- ScreenW = GetSystemMetrics.call(SM_CXSCREEN)
- ScreenH = GetSystemMetrics.call(SM_CYSCREEN)
- buf = "\0" * 220
- EnumDS.call(nil, ENUM_CURRENT_SETTINGS, buf)
- CurrentDS = buf.unpack(DEVOMODE_FLAG)
- ChangeWS = WS_BORDER | WS_SYSMENU | WS_DLGFRAME
- HWnd = RGSS_PLAYER::HWnd
- BaseWS = GetWindowLongA.call(HWnd, GWL_STYLE)
-
- W_Sub = ScreenW - FullScreen_W
- H_Sub = ScreenH - FullScreen_H
-
- # 记录全屏状态的变量
- @@full = 0
- @@wndpt = "\0" * 44
- #--------------------------------------------------------------------------
- # ● 全屏化切换
- # bWork: (0 => 表示退出; 1 => 表示运行) 保证退出游戏时,屏幕分辨率正确
- #--------------------------------------------------------------------------
- def self.turn(bWork = 1)
- @@full = (@@full - 1) & bWork
- CurrentDS[DM_PW_INDEX] = ScreenW - W_Sub * @@full
- CurrentDS[DM_PH_INDEX] = ScreenH - H_Sub * @@full
- ChangeDS.call(CurrentDS.pack(DEVOMODE_FLAG), 0)
- SetWindowLongA.call(HWnd, GWL_STYLE, BaseWS ^ (ChangeWS * @@full))
- if @@full == 1
- GetWndPlacement.call(HWnd, @@wndpt)
- wndpt = @@wndpt.unpack('I3l8')
- wndpt[1], wndpt[2] = 2, 3
- SetWndPlacement.call(HWnd, wndpt.pack('I3l8'))
- return
- end
- SetWndPlacement.call(HWnd, @@wndpt)
- end
- end
- module Input
- class << self
- alias ori_update update unless method_defined?(:ori_update)
- def update
- ori_update
- if self.trigger?(F5)
- FullScreen.turn
- return
- end
- end
- end
- end
- #==============================================================================
- # ■ Main
- #------------------------------------------------------------------------------
- # 各定义结束后、从这里开始实际处理。
- #==============================================================================
- begin
- # 准备过渡
- # 设置系统默认字体
- Font.default_name = (["黑体"])
- Graphics.freeze
- # 生成场景对像 (标题画面)
- $scene = Scene_Title.new
- # $scene 为有效的情况下调用 main 过程
- while $scene != nil
- $scene.main
- end
- # 淡入淡出
- Graphics.transition(20)
- rescue Errno::ENOENT
- # 补充 Errno::ENOENT 以外错误
- # 无法打开文件的情况下、显示信息后结束
- filename = $!.message.sub("No such file or directory - ", "")
- print("找不到文件 #{filename}。 ")
- ensure
- FullScreen.turn(0)
- end
复制代码 |
评分
-
查看全部评分
|