Project1

标题: 请问有没有窗口改高分辨率的办法? [打印本页]

作者: 闇を照らす者    时间: 2014-6-16 22:05
标题: 请问有没有窗口改高分辨率的办法?
听说改dll也是一个办法,但无论如何也求一个变大的方法,544放到高分辨率的电脑就是个小窗口,游戏体验不好。
作者: VIPArcher    时间: 2014-6-16 22:11
把这个
  1. Graphics.resize_screen(640,480)#窗口大小改成640*480
复制代码
在Main里
作者: 闇を照らす者    时间: 2014-6-16 22:19
VIPArcher 发表于 2014-6-16 22:11
把这个插♂在Main里

我早就知道这个了,还是太小了,开始的时候还要闪一下
作者: tseyik    时间: 2014-6-17 01:18
本帖最后由 tseyik 于 2014-6-17 01:49 编辑

出自
http://cacaosoft.web.fc2.com/tkool/script/rgss3/wndsz.html
在下面改SIZE_LIST = [ [544,416], [640,480], [800,600], [1088,832], [0,0] ]
0.0是全画面,画面大於屏幕也全画面
如你只用800x600可改成SIZE_LIST = [ [544,416],[800,600], [0,0] ]
按快速鍵(F5)就順次序改変画面大小
INPUT_KEY = :F5是這句nil則不用快速鍵
可在脚本調用SetGameWindowSize(width, height)用條件分支
可讓玩者自己選画面大小[也可加入main脚本中]
實際画面還是544x416,只是放大了,會紀憶設定,不用毎回按F5
  1. #******************************************************************************
  2. #
  3. #    * エセフルスクリーン
  4. #
  5. #  --------------------------------------------------------------------------
  6. #    バージョン :  1.0.1
  7. #    対      応 :  RPGツクールVX : RGSS2
  8. #    制  作  者 :  CACAO
  9. #    配  布  元 :  http://cacaosoft.web.fc2.com/
  10. #  --------------------------------------------------------------------------
  11. #   == 概    要 ==
  12. #
  13. #   : ウィンドウのサイズを変更する機能を追加します。
  14. #
  15. #  --------------------------------------------------------------------------
  16. #   == 使用方法 ==
  17. #
  18. #    ★ WLIB::SetGameWindowSize(width, height)
  19. #     ウィンドウを中央に移動し、指定されたサイズに変更します。
  20. #     引数が負数、もしくはデスクトップより大きい場合はフルサイズで表示されます。
  21. #     処理が失敗すると false を返します。
  22. #
  23. #
  24. #******************************************************************************


  25. #==============================================================================
  26. # ◆ ユーザー設定
  27. #==============================================================================
  28. module WND_SIZE
  29.   #--------------------------------------------------------------------------
  30.   # ◇ サイズ変更キー
  31.   #--------------------------------------------------------------------------
  32.   #     nil .. サイズ変更を行わない
  33.   #--------------------------------------------------------------------------
  34.   INPUT_KEY = :F5
  35.   #--------------------------------------------------------------------------
  36.   # ◇ サイズリスト
  37.   #--------------------------------------------------------------------------
  38.   #     [ [横幅, 縦幅], ... ] のような二次元配列で設定します。
  39.   #     幅を 0 にするとデスクトップサイズになります。
  40.   #--------------------------------------------------------------------------
  41.   SIZE_LIST = [ [544,416], [640,480], [800,600], [1088,832], [0,0] ]
  42.   #--------------------------------------------------------------------------
  43.   # ◇ セーブファイル
  44.   #--------------------------------------------------------------------------
  45.   #   ウィンドウサイズの状況を保存するファイル名を設定します。
  46.   #   nil にすると、サイズを保存しません。
  47.   #--------------------------------------------------------------------------
  48.   FILE_SAVE = "System/test"
  49. end


  50. #/////////////////////////////////////////////////////////////////////////////#
  51. #                                                                             #
  52. #                下記のスクリプトを変更する必要はありません。                 #
  53. #                                                                             #
  54. #/////////////////////////////////////////////////////////////////////////////#


  55. module WLIB
  56.   #--------------------------------------------------------------------------
  57.   # ● 定数
  58.   #--------------------------------------------------------------------------
  59.   # SystemMetrics
  60.   SM_CYCAPTION  = 0x04                    # タイトルバーの高さ
  61.   SM_CXDLGFRAME = 0x07                    # 枠の幅
  62.   SM_CYDLGFRAME = 0x08                    # 枠の高さ
  63.   # SetWindowPos
  64.   SWP_NOSIZE     = 0x01                   # サイズ変更なし
  65.   SWP_NOMOVE     = 0x02                   # 位置変更なし
  66.   SWP_NOZORDER   = 0x04                   # 並び変更なし
  67.   #--------------------------------------------------------------------------
  68.   # ● Win32API
  69.   #--------------------------------------------------------------------------
  70.   @@FindWindow =
  71.     Win32API.new('user32', 'FindWindow', 'pp', 'l')
  72.   @@GetDesktopWindow =
  73.     Win32API.new('user32', 'GetDesktopWindow', 'v', 'l')
  74.   @@SetWindowPos =
  75.     Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')
  76.   @@GetClientRect =
  77.     Win32API.new('user32', 'GetClientRect', 'lp', 'i')
  78.   @@GetWindowRect =
  79.     Win32API.new('user32', 'GetWindowRect', 'lp', 'i')
  80.   @@GetWindowLong =
  81.     Win32API.new('user32', 'GetWindowLong', 'li', 'l')
  82.   @@GetSystemMetrics =
  83.     Win32API.new('user32', 'GetSystemMetrics', 'i', 'i')
  84.   @@SystemParametersInfo =
  85.     Win32API.new('user32', 'SystemParametersInfo', 'iipi', 'i')
  86.   #--------------------------------------------------------------------------
  87.   # ● ウィンドウの情報
  88.   #--------------------------------------------------------------------------
  89.   GAME_TITLE  = load_data("Data/System.rvdata2").game_title.encode('SHIFT_JIS')
  90.   GAME_HANDLE = @@FindWindow.call("RGSS Player", GAME_TITLE)
  91.   # GAME_HANDLE = Win32API.new('user32', 'GetForegroundWindow', 'v', 'l').call
  92.   GAME_STYLE   = @@GetWindowLong.call(GAME_HANDLE, -16)
  93.   GAME_EXSTYLE = @@GetWindowLong.call(GAME_HANDLE, -20)
  94.   HDSK = @@GetDesktopWindow.call

  95. module_function
  96.   #--------------------------------------------------------------------------
  97.   # ● GetWindowRect
  98.   #--------------------------------------------------------------------------
  99.   def GetWindowRect(hwnd)
  100.     r = [0,0,0,0].pack('l4')
  101.     if @@GetWindowRect.call(hwnd, r) != 0
  102.       result = Rect.new(*r.unpack('l4'))
  103.       result.width -= result.x
  104.       result.height -= result.y
  105.     else
  106.       result = nil
  107.     end
  108.     return result
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● GetClientRect
  112.   #--------------------------------------------------------------------------
  113.   def GetClientRect(hwnd)
  114.     r = [0,0,0,0].pack('l4')
  115.     if @@GetClientRect.call(hwnd, r) != 0
  116.       result = Rect.new(*r.unpack('l4'))
  117.     else
  118.       result = nil
  119.     end
  120.     return result
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● GetSystemMetrics
  124.   #--------------------------------------------------------------------------
  125.   def GetSystemMetrics(index)
  126.     @@GetSystemMetrics.call(index)
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● SetWindowPos
  130.   #--------------------------------------------------------------------------
  131.   def SetWindowPos(hwnd, x, y, width, height, z, flag)
  132.     @@SetWindowPos.call(hwnd, z, x, y, width, height, flag) != 0
  133.   end

  134.   #--------------------------------------------------------------------------
  135.   # ● ウィンドウのサイズを取得
  136.   #--------------------------------------------------------------------------
  137.   def GetGameWindowRect
  138.     GetWindowRect(GAME_HANDLE)
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● ウィンドウのクライアントサイズを取得
  142.   #--------------------------------------------------------------------------
  143.   def GetGameClientRect
  144.     GetClientRect(GAME_HANDLE)
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● デスクトップのサイズを取得
  148.   #--------------------------------------------------------------------------
  149.   def GetDesktopRect
  150.     r = [0,0,0,0].pack('l4')
  151.     if @@SystemParametersInfo.call(0x30, 0, r, 0) != 0
  152.       result = Rect.new(*r.unpack('l4'))
  153.       result.width -= result.x
  154.       result.height -= result.y
  155.     else
  156.       result = nil
  157.     end
  158.     return result
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● ウィンドウのフレームサイズを取得
  162.   #--------------------------------------------------------------------------
  163.   def GetFrameSize
  164.     return [
  165.       GetSystemMetrics(SM_CYCAPTION),   # タイトルバー
  166.       GetSystemMetrics(SM_CXDLGFRAME),  # 左右フレーム
  167.       GetSystemMetrics(SM_CYDLGFRAME)   # 上下フレーム
  168.     ]
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● ウィンドウの位置を変更
  172.   #--------------------------------------------------------------------------
  173.   def MoveGameWindow(x, y)
  174.     SetWindowPos(GAME_HANDLE, x, y, 0, 0, 0, SWP_NOSIZE|SWP_NOZORDER)
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● ウィンドウの位置を中央へ
  178.   #--------------------------------------------------------------------------
  179.   def MoveGameWindowCenter
  180.     dr = GetDesktopRect()
  181.     wr = GetGameWindowRect()
  182.     x = (dr.width - wr.width) / 2
  183.     y = (dr.height - wr.height) / 2
  184.     SetWindowPos(GAME_HANDLE, x, y, 0, 0, 0, SWP_NOSIZE|SWP_NOZORDER)
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● ウィンドウのサイズを変更
  188.   #--------------------------------------------------------------------------
  189.   def SetGameWindowSize(width, height)
  190.     # 各領域の取得
  191.     dr = GetDesktopRect()         # Rect デスクトップ
  192.     wr = GetGameWindowRect()      # Rect ウィンドウ
  193.     cr = GetGameClientRect()      # Rect クライアント
  194.     return false unless dr && wr && cr
  195.     # フレームサイズの取得
  196.     frame = GetFrameSize()
  197.     ft = frame[0] + frame[2]      # タイトルバーの縦幅
  198.     fl = frame[1]                 # 左フレームの横幅
  199.     fs = frame[1] * 2             # 左右フレームの横幅
  200.     fb = frame[2]                 # 下フレームの縦幅
  201.     if width <= 0 || height <= 0 || width >= dr.width || height >= dr.height
  202.       w = dr.width + fs
  203.       h = dr.height + ft + fb
  204.       SetWindowPos(GAME_HANDLE, -fl, -ft, w, h, 0, SWP_NOZORDER)
  205.     else
  206.       w = width + fs
  207.       h = height + ft + fb
  208.       SetWindowPos(GAME_HANDLE, 0, 0, w, h, 0, SWP_NOMOVE|SWP_NOZORDER)
  209.       MoveGameWindowCenter()
  210.     end
  211.   end
  212. end

  213. class Scene_Base
  214.   #--------------------------------------------------------------------------
  215.   # ●
  216.   #--------------------------------------------------------------------------
  217.   @@screen_mode = 0
  218.   #--------------------------------------------------------------------------
  219.   # ●
  220.   #--------------------------------------------------------------------------
  221.   def self.screen_mode=(index)
  222.     @@screen_mode = index % WND_SIZE::SIZE_LIST.size
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ●
  226.   #--------------------------------------------------------------------------
  227.   def self.screen_mode
  228.     @@screen_mode
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ○ フレーム更新
  232.   #--------------------------------------------------------------------------
  233.   alias _cao_update_wndsize update
  234.   def update
  235.     _cao_update_wndsize
  236.     if Input.trigger?(WND_SIZE::INPUT_KEY) && WLIB::GAME_HANDLE != 0
  237.       Scene_Base.screen_mode += 1
  238.       if WLIB::SetGameWindowSize(*WND_SIZE::SIZE_LIST[@@screen_mode])
  239.         if WND_SIZE::FILE_SAVE
  240.           save_data(Scene_Base.screen_mode, WND_SIZE::FILE_SAVE)
  241.         end
  242.       else
  243.         Sound.play_buzzer
  244.       end
  245.     end
  246.   end
  247. end

  248. module WND_SIZE
  249.   #--------------------------------------------------------------------------
  250.   # ● 大きいサイズを除去
  251.   #--------------------------------------------------------------------------
  252.   def self.remove_large_window
  253.     dr = WLIB::GetDesktopRect()
  254.     WND_SIZE::SIZE_LIST.reject! do |wsz|
  255.       wsz.size != 2 || dr.width < wsz[0] || dr.height < wsz[1]
  256.     end
  257.     if WND_SIZE::SIZE_LIST.empty?
  258.       WND_SIZE::SIZE_LIST << [Graphics.width, Graphics.height]
  259.     end
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 初期サイズの設定
  263.   #--------------------------------------------------------------------------
  264.   def self.init_window_size
  265.     if WND_SIZE::FILE_SAVE && File.file?(WND_SIZE::FILE_SAVE)
  266.       Scene_Base.screen_mode = load_data(WND_SIZE::FILE_SAVE)
  267.       WLIB::SetGameWindowSize(*WND_SIZE::SIZE_LIST[Scene_Base.screen_mode])
  268.     end
  269.   end
  270. end

  271. WND_SIZE.remove_large_window
  272. WND_SIZE.init_window_size
复制代码

作者: 不是马甲    时间: 2014-6-17 10:46
用OD修改EXE和DLL(DLL首先要是不限制分辨率的DLL) ,搜索 PUSH XXX (XXX为原始长或高的二进制) 修改XXX为你想要分辨率的二进制
作者: 闇を照らす者    时间: 2014-6-17 10:54
tseyik 发表于 2014-6-17 01:18
出自
http://cacaosoft.web.fc2.com/tkool/script/rgss3/wndsz.html
在下面改SIZE_LIST = [ [544,416], [64 ...

INPUT_KEY = :F5是這句nil則不用快速鍵
这句是什么意思?
作者: 闇を照らす者    时间: 2014-6-17 11:01
不是马甲 发表于 2014-6-17 10:46
用OD修改EXE和DLL(DLL首先要是不限制分辨率的DLL) ,搜索 PUSH XXX (XXX为原始长或高的二进制) 修改XXX ...

OD是什么?二进制我怎么算出来
作者: 闇を照らす者    时间: 2014-6-17 19:57
不是马甲 发表于 2014-6-17 10:46
用OD修改EXE和DLL(DLL首先要是不限制分辨率的DLL) ,搜索 PUSH XXX (XXX为原始长或高的二进制) 修改XXX ...

ODBG又是什么?




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1