EXE与源码.rar
(64.99 KB, 下载次数: 163)
Custom RGSS Player.rar
(2.97 MB, 下载次数: 320)
module WND WM_ACTIVATE=0x0006 WM_ACTIVATEAPP=0x001C WM_AFXFIRST=0x0360 WM_AFXLAST=0x037F WM_APP=0x8000 WM_APPCOMMAND=0x0319 WM_ASKCBFORMATNAME=0x030C WM_CANCELJOURNAL=0x004B WM_CANCELMODE=0x001F WM_CAPTURECHANGED=0x0215 WM_CHANGECBCHAIN=0x030D WM_CHANGEUISTATE=0x0127 WM_CHAR=0x0102 WM_CHARTOITEM=0x002F WM_CHILDACTIVATE=0x0022 WM_CLEAR=0x0303 WM_CLOSE=0x0010 WM_COMMAND=0x0111 WM_COMMNOTIFY=0x0044 WM_COMPACTING=0x0041 WM_COMPAREITEM=0x0039 WM_CONTEXTMENU=0x007B WM_COPY=0x0301 WM_COPYDATA=0x004A WM_CREATE=0x0001 WM_CTLCOLORBTN=0x0135 WM_CTLCOLORDLG=0x0136 WM_CTLCOLOREDIT=0x0133 WM_CTLCOLORLISTBOX=0x0134 WM_CTLCOLORMSGBOX=0x0132 WM_CTLCOLORSCROLLBAR=0x0137 WM_CTLCOLORSTATIC=0x0138 WM_CUT=0x0300 WM_DEADCHAR=0x0103 WM_DELETEITEM=0x002D WM_DESTROY=0x0002 WM_DESTROYCLIPBOARD=0x0307 WM_DEVICECHANGE=0x0219 WM_DEVMODECHANGE=0x001B WM_DISPLAYCHANGE=0x007E WM_DRAWCLIPBOARD=0x0308 WM_DRAWITEM=0x002B WM_DROPFILES=0x0233 WM_ENABLE=0x000A WM_ENDSESSION=0x0016 WM_ENTERIDLE=0x0121 WM_ENTERMENULOOP=0x0211 WM_ENTERSIZEMOVE=0x0231 WM_ERASEBKGND=0x0014 WM_EXITMENULOOP=0x0212 WM_EXITSIZEMOVE=0x0232 WM_FONTCHANGE=0x001D WM_GETDLGCODE=0x0087 WM_GETFONT=0x0031 WM_GETHOTKEY=0x0033 WM_GETICON=0x007F WM_GETMINMAXINFO=0x0024 WM_GETOBJECT=0x003D WM_GETTEXT=0x000D WM_GETTEXTLENGTH=0x000E WM_HANDHELDFIRST=0x0358 WM_HANDHELDLAST=0x035F WM_HELP=0x0053 WM_HOTKEY=0x0312 WM_HSCROLL=0x0114 WM_HSCROLLCLIPBOARD=0x030E WM_ICONERASEBKGND=0x0027 WM_IME_CHAR=0x0286 WM_IME_COMPOSITION=0x010F WM_IME_COMPOSITIONFULL=0x0284 WM_IME_CONTROL=0x0283 WM_IME_ENDCOMPOSITION=0x010E WM_IME_KEYDOWN=0x0290 WM_IME_KEYLAST=0x010F WM_IME_KEYUP=0x0291 WM_IME_NOTIFY=0x0282 WM_IME_REQUEST=0x0288 WM_IME_SELECT=0x0285 WM_IME_SETCONTEXT=0x0281 WM_IME_STARTCOMPOSITION=0x010D WM_INITDIALOG=0x0110 WM_INITMENU=0x0116 WM_INITMENUPOPUP=0x0117 WM_INPUT=0x00FF WM_INPUTLANGCHANGE=0x0051 WM_INPUTLANGCHANGEREQUEST=0x0050 WM_KEYDOWN=0x0100 WM_KEYFIRST=0x0100 WM_KEYLAST=0x0109 WM_KEYUP=0x0101 WM_KILLFOCUS=0x0008 WM_LBUTTONDBLCLK=0x0203 WM_LBUTTONDOWN=0x0201 WM_LBUTTONUP=0x0202 WM_MBUTTONDBLCLK=0x0209 WM_MBUTTONDOWN=0x0207 WM_MBUTTONUP=0x0208 WM_MDIACTIVATE=0x0222 WM_MDICASCADE=0x0227 WM_MDICREATE=0x0220 WM_MDIDESTROY=0x0221 WM_MDIGETACTIVE=0x0229 WM_MDIICONARRANGE=0x0228 WM_MDIMAXIMIZE=0x0225 WM_MDINEXT=0x0224 WM_MDIREFRESHMENU=0x0234 WM_MDIRESTORE=0x0223 WM_MDISETMENU=0x0230 WM_MDITILE=0x0226 WM_MEASUREITEM=0x002C WM_MENUCHAR=0x0120 WM_MENUCOMMAND=0x0126 WM_MENUDRAG=0x0123 WM_MENUGETOBJECT=0x0124 WM_MENURBUTTONUP=0x0122 WM_MENUSELECT=0x011F WM_MOUSEACTIVATE=0x0021 WM_MOUSEFIRST=0x0200 WM_MOUSEHOVER=0x02A1 WM_MOUSELAST=0x020D WM_MOUSELAST=0x0209 WM_MOUSELAST=0x020A WM_MOUSELEAVE=0x02A3 WM_MOUSEMOVE=0x0200 WM_MOUSEWHEEL=0x020A WM_MOVE=0x0003 WM_MOVING=0x0216 WM_NCACTIVATE=0x0086 WM_NCCALCSIZE=0x0083 WM_NCCREATE=0x0081 WM_NCDESTROY=0x0082 WM_NCHITTEST=0x0084 WM_NCLBUTTONDBLCLK=0x00A3 WM_NCLBUTTONDOWN=0x00A1 WM_NCLBUTTONUP=0x00A2 WM_NCMBUTTONDBLCLK=0x00A9 WM_NCMBUTTONDOWN=0x00A7 WM_NCMBUTTONUP=0x00A8 WM_NCMOUSEHOVER=0x02A0 WM_NCMOUSELEAVE=0x02A2 WM_NCMOUSEMOVE=0x00A0 WM_NCPAINT=0x0085 WM_NCRBUTTONDBLCLK=0x00A6 WM_NCRBUTTONDOWN=0x00A4 WM_NCRBUTTONUP=0x00A5 WM_NCXBUTTONDBLCLK=0x00AD WM_NCXBUTTONDOWN=0x00AB WM_NCXBUTTONUP=0x00AC WM_NEXTDLGCTL=0x0028 WM_NEXTMENU=0x0213 WM_NOTIFY=0x004E WM_NOTIFYFORMAT=0x0055 WM_NULL=0x0000 WM_PAINT=0x000F WM_PAINTCLIPBOARD=0x0309 WM_PAINTICON=0x0026 WM_PALETTECHANGED=0x0311 WM_PALETTEISCHANGING=0x0310 WM_PARENTNOTIFY=0x0210 WM_PASTE=0x0302 WM_PENWINFIRST=0x0380 WM_PENWINLAST=0x038F WM_POWER=0x0048 WM_POWERBROADCAST=0x0218 WM_PRINT=0x0317 WM_PRINTCLIENT=0x0318 WM_QUERYDRAGICON=0x0037 WM_QUERYENDSESSION=0x0011 WM_QUERYNEWPALETTE=0x030F WM_QUERYOPEN=0x0013 WM_QUERYUISTATE=0x0129 WM_QUEUESYNC=0x0023 WM_QUIT=0x0012 WM_RBUTTONDBLCLK=0x0206 WM_RBUTTONDOWN=0x0204 WM_RBUTTONUP=0x0205 WM_RENDERALLFORMATS=0x0306 WM_RENDERFORMAT=0x0305 WM_SETCURSOR=0x0020 WM_SETFOCUS=0x0007 WM_SETFONT=0x0030 WM_SETHOTKEY=0x0032 WM_SETICON=0x0080 WM_SETREDRAW=0x000B WM_SETTEXT=0x000C WM_SETTINGCHANGE=0x001A WM_SHOWWINDOW=0x0018 WM_SIZE=0x0005 WM_SIZECLIPBOARD=0x030B WM_SIZING=0x0214 WM_SPOOLERSTATUS=0x002A WM_STYLECHANGED=0x007D WM_STYLECHANGING=0x007C WM_SYNCPAINT=0x0088 WM_SYSCHAR=0x0106 WM_SYSCOLORCHANGE=0x0015 WM_SYSCOMMAND=0x0112 WM_SYSDEADCHAR=0x0107 WM_SYSKEYDOWN=0x0104 WM_SYSKEYUP=0x0105 WM_TABLET_FIRST=0x02C0 WM_TABLET_LAST=0x02DF WM_TCARD=0x0052 WM_THEMECHANGED=0x031A WM_TIMECHANGE=0x001E WM_TIMER=0x0113 WM_UNDO=0x0304 WM_UNICHAR=0x0109 WM_UNINITMENUPOPUP=0x0125 WM_UPDATEUISTATE=0x0128 WM_USER=0x0400 WM_USERCHANGED=0x0054 WM_VKEYTOITEM=0x002E WM_VSCROLL=0x0115 WM_VSCROLLCLIPBOARD=0x030A WM_WINDOWPOSCHANGED=0x0047 WM_WINDOWPOSCHANGING=0x0046 WM_WININICHANGE=0x001A WM_WTSSESSION_CHANGE=0x02B1 WM_XBUTTONDBLCLK=0x020D WM_XBUTTONDOWN=0x020B WM_XBUTTONUP=0x020C API_CWP=Win32API.new('user32.dll','CallWindowProc','llill','l') API_SWL=Win32API.new('user32.dll','SetWindowLong','lil','l') API_RMM=Win32API.new('kernel32.dll','RtlMoveMemory','lpi','v') module_function def bind const_set(:ADDR_OWP,API_SWL.call(hWnd,-4,ADDR_NWP)) API_RMM.call(ADDR_AOWP,[ADDR_OWP].pack('L'),4) instance_eval{undef :bind} end def origWndProc(hwnd,message,wParam,lParam) return API_CWP.call(ADDR_OWP,hwnd,message,wParam,lParam) end def WndProc(hwnd,message,wParam,lParam) return WND.origWndProc(hwnd,message,wParam,lParam) end def __call_wndproc(ptr_ret,ptr_state,hwnd,message,wParam,lParam) ret=WND.WndProc(hwnd,message,wParam,lParam) ret=ret.eql?(true)?1:ret.eql?(false)?0:ret API_RMM.call(ptr_ret,[ret.to_i].pack('L'),4) API_RMM.call(ptr_state,[1].pack('i'),1) end end
module WND
WM_ACTIVATE=0x0006
WM_ACTIVATEAPP=0x001C
WM_AFXFIRST=0x0360
WM_AFXLAST=0x037F
WM_APP=0x8000
WM_APPCOMMAND=0x0319
WM_ASKCBFORMATNAME=0x030C
WM_CANCELJOURNAL=0x004B
WM_CANCELMODE=0x001F
WM_CAPTURECHANGED=0x0215
WM_CHANGECBCHAIN=0x030D
WM_CHANGEUISTATE=0x0127
WM_CHAR=0x0102
WM_CHARTOITEM=0x002F
WM_CHILDACTIVATE=0x0022
WM_CLEAR=0x0303
WM_CLOSE=0x0010
WM_COMMAND=0x0111
WM_COMMNOTIFY=0x0044
WM_COMPACTING=0x0041
WM_COMPAREITEM=0x0039
WM_CONTEXTMENU=0x007B
WM_COPY=0x0301
WM_COPYDATA=0x004A
WM_CREATE=0x0001
WM_CTLCOLORBTN=0x0135
WM_CTLCOLORDLG=0x0136
WM_CTLCOLOREDIT=0x0133
WM_CTLCOLORLISTBOX=0x0134
WM_CTLCOLORMSGBOX=0x0132
WM_CTLCOLORSCROLLBAR=0x0137
WM_CTLCOLORSTATIC=0x0138
WM_CUT=0x0300
WM_DEADCHAR=0x0103
WM_DELETEITEM=0x002D
WM_DESTROY=0x0002
WM_DESTROYCLIPBOARD=0x0307
WM_DEVICECHANGE=0x0219
WM_DEVMODECHANGE=0x001B
WM_DISPLAYCHANGE=0x007E
WM_DRAWCLIPBOARD=0x0308
WM_DRAWITEM=0x002B
WM_DROPFILES=0x0233
WM_ENABLE=0x000A
WM_ENDSESSION=0x0016
WM_ENTERIDLE=0x0121
WM_ENTERMENULOOP=0x0211
WM_ENTERSIZEMOVE=0x0231
WM_ERASEBKGND=0x0014
WM_EXITMENULOOP=0x0212
WM_EXITSIZEMOVE=0x0232
WM_FONTCHANGE=0x001D
WM_GETDLGCODE=0x0087
WM_GETFONT=0x0031
WM_GETHOTKEY=0x0033
WM_GETICON=0x007F
WM_GETMINMAXINFO=0x0024
WM_GETOBJECT=0x003D
WM_GETTEXT=0x000D
WM_GETTEXTLENGTH=0x000E
WM_HANDHELDFIRST=0x0358
WM_HANDHELDLAST=0x035F
WM_HELP=0x0053
WM_HOTKEY=0x0312
WM_HSCROLL=0x0114
WM_HSCROLLCLIPBOARD=0x030E
WM_ICONERASEBKGND=0x0027
WM_IME_CHAR=0x0286
WM_IME_COMPOSITION=0x010F
WM_IME_COMPOSITIONFULL=0x0284
WM_IME_CONTROL=0x0283
WM_IME_ENDCOMPOSITION=0x010E
WM_IME_KEYDOWN=0x0290
WM_IME_KEYLAST=0x010F
WM_IME_KEYUP=0x0291
WM_IME_NOTIFY=0x0282
WM_IME_REQUEST=0x0288
WM_IME_SELECT=0x0285
WM_IME_SETCONTEXT=0x0281
WM_IME_STARTCOMPOSITION=0x010D
WM_INITDIALOG=0x0110
WM_INITMENU=0x0116
WM_INITMENUPOPUP=0x0117
WM_INPUT=0x00FF
WM_INPUTLANGCHANGE=0x0051
WM_INPUTLANGCHANGEREQUEST=0x0050
WM_KEYDOWN=0x0100
WM_KEYFIRST=0x0100
WM_KEYLAST=0x0109
WM_KEYUP=0x0101
WM_KILLFOCUS=0x0008
WM_LBUTTONDBLCLK=0x0203
WM_LBUTTONDOWN=0x0201
WM_LBUTTONUP=0x0202
WM_MBUTTONDBLCLK=0x0209
WM_MBUTTONDOWN=0x0207
WM_MBUTTONUP=0x0208
WM_MDIACTIVATE=0x0222
WM_MDICASCADE=0x0227
WM_MDICREATE=0x0220
WM_MDIDESTROY=0x0221
WM_MDIGETACTIVE=0x0229
WM_MDIICONARRANGE=0x0228
WM_MDIMAXIMIZE=0x0225
WM_MDINEXT=0x0224
WM_MDIREFRESHMENU=0x0234
WM_MDIRESTORE=0x0223
WM_MDISETMENU=0x0230
WM_MDITILE=0x0226
WM_MEASUREITEM=0x002C
WM_MENUCHAR=0x0120
WM_MENUCOMMAND=0x0126
WM_MENUDRAG=0x0123
WM_MENUGETOBJECT=0x0124
WM_MENURBUTTONUP=0x0122
WM_MENUSELECT=0x011F
WM_MOUSEACTIVATE=0x0021
WM_MOUSEFIRST=0x0200
WM_MOUSEHOVER=0x02A1
WM_MOUSELAST=0x020D
WM_MOUSELAST=0x0209
WM_MOUSELAST=0x020A
WM_MOUSELEAVE=0x02A3
WM_MOUSEMOVE=0x0200
WM_MOUSEWHEEL=0x020A
WM_MOVE=0x0003
WM_MOVING=0x0216
WM_NCACTIVATE=0x0086
WM_NCCALCSIZE=0x0083
WM_NCCREATE=0x0081
WM_NCDESTROY=0x0082
WM_NCHITTEST=0x0084
WM_NCLBUTTONDBLCLK=0x00A3
WM_NCLBUTTONDOWN=0x00A1
WM_NCLBUTTONUP=0x00A2
WM_NCMBUTTONDBLCLK=0x00A9
WM_NCMBUTTONDOWN=0x00A7
WM_NCMBUTTONUP=0x00A8
WM_NCMOUSEHOVER=0x02A0
WM_NCMOUSELEAVE=0x02A2
WM_NCMOUSEMOVE=0x00A0
WM_NCPAINT=0x0085
WM_NCRBUTTONDBLCLK=0x00A6
WM_NCRBUTTONDOWN=0x00A4
WM_NCRBUTTONUP=0x00A5
WM_NCXBUTTONDBLCLK=0x00AD
WM_NCXBUTTONDOWN=0x00AB
WM_NCXBUTTONUP=0x00AC
WM_NEXTDLGCTL=0x0028
WM_NEXTMENU=0x0213
WM_NOTIFY=0x004E
WM_NOTIFYFORMAT=0x0055
WM_NULL=0x0000
WM_PAINT=0x000F
WM_PAINTCLIPBOARD=0x0309
WM_PAINTICON=0x0026
WM_PALETTECHANGED=0x0311
WM_PALETTEISCHANGING=0x0310
WM_PARENTNOTIFY=0x0210
WM_PASTE=0x0302
WM_PENWINFIRST=0x0380
WM_PENWINLAST=0x038F
WM_POWER=0x0048
WM_POWERBROADCAST=0x0218
WM_PRINT=0x0317
WM_PRINTCLIENT=0x0318
WM_QUERYDRAGICON=0x0037
WM_QUERYENDSESSION=0x0011
WM_QUERYNEWPALETTE=0x030F
WM_QUERYOPEN=0x0013
WM_QUERYUISTATE=0x0129
WM_QUEUESYNC=0x0023
WM_QUIT=0x0012
WM_RBUTTONDBLCLK=0x0206
WM_RBUTTONDOWN=0x0204
WM_RBUTTONUP=0x0205
WM_RENDERALLFORMATS=0x0306
WM_RENDERFORMAT=0x0305
WM_SETCURSOR=0x0020
WM_SETFOCUS=0x0007
WM_SETFONT=0x0030
WM_SETHOTKEY=0x0032
WM_SETICON=0x0080
WM_SETREDRAW=0x000B
WM_SETTEXT=0x000C
WM_SETTINGCHANGE=0x001A
WM_SHOWWINDOW=0x0018
WM_SIZE=0x0005
WM_SIZECLIPBOARD=0x030B
WM_SIZING=0x0214
WM_SPOOLERSTATUS=0x002A
WM_STYLECHANGED=0x007D
WM_STYLECHANGING=0x007C
WM_SYNCPAINT=0x0088
WM_SYSCHAR=0x0106
WM_SYSCOLORCHANGE=0x0015
WM_SYSCOMMAND=0x0112
WM_SYSDEADCHAR=0x0107
WM_SYSKEYDOWN=0x0104
WM_SYSKEYUP=0x0105
WM_TABLET_FIRST=0x02C0
WM_TABLET_LAST=0x02DF
WM_TCARD=0x0052
WM_THEMECHANGED=0x031A
WM_TIMECHANGE=0x001E
WM_TIMER=0x0113
WM_UNDO=0x0304
WM_UNICHAR=0x0109
WM_UNINITMENUPOPUP=0x0125
WM_UPDATEUISTATE=0x0128
WM_USER=0x0400
WM_USERCHANGED=0x0054
WM_VKEYTOITEM=0x002E
WM_VSCROLL=0x0115
WM_VSCROLLCLIPBOARD=0x030A
WM_WINDOWPOSCHANGED=0x0047
WM_WINDOWPOSCHANGING=0x0046
WM_WININICHANGE=0x001A
WM_WTSSESSION_CHANGE=0x02B1
WM_XBUTTONDBLCLK=0x020D
WM_XBUTTONDOWN=0x020B
WM_XBUTTONUP=0x020C
API_CWP=Win32API.new('user32.dll','CallWindowProc','llill','l')
API_SWL=Win32API.new('user32.dll','SetWindowLong','lil','l')
API_RMM=Win32API.new('kernel32.dll','RtlMoveMemory','lpi','v')
module_function
def bind
const_set(:ADDR_OWP,API_SWL.call(hWnd,-4,ADDR_NWP))
API_RMM.call(ADDR_AOWP,[ADDR_OWP].pack('L'),4)
instance_eval{undef :bind}
end
def origWndProc(hwnd,message,wParam,lParam)
return API_CWP.call(ADDR_OWP,hwnd,message,wParam,lParam)
end
def WndProc(hwnd,message,wParam,lParam)
return WND.origWndProc(hwnd,message,wParam,lParam)
end
def __call_wndproc(ptr_ret,ptr_state,hwnd,message,wParam,lParam)
ret=WND.WndProc(hwnd,message,wParam,lParam)
ret=ret.eql?(true)?1:ret.eql?(false)?0:ret
API_RMM.call(ptr_ret,[ret.to_i].pack('L'),4)
API_RMM.call(ptr_state,[1].pack('i'),1)
end
end
# coding: gbk require 'win32api' def err_msg(format, *args) Win32API.new('user32', 'MessageBox', 'lppl', 'i').call(@hWnd ? @hWnd : 0, format % args, @title, 16) stop end def stop Win32API.new('kernel32', 'FreeLibrary', 'l', 'i').call(@hRGSSCore) if @hRGSSCore and @hRGSSCore != 0 Win32API.new('user32', 'DestroyWindow', 'l', 'i').call(@hWnd) if @hWnd and @hWnd != 0 Win32API.new('user32', 'UnregisterClass', 'pl', 'i').call(WndClassName, @hInstance) exit end WndClassName = "RGSS Player" DefaultLibrary = "RGSS102J.dll" DefaultTitle = "Untitled" DefaultScripts = "Data\\Scripts.rxdata" @library = [0].pack('C') * 100 @title = [0].pack('C') * 100 @scripts = [0].pack('C') * 100 @hInstance = Win32API.new('kernel32', 'GetModuleHandle', 'l', 'l').call(0) Win32API.new('user32', 'ShowWindow', 'li', 'i').call(Win32API.new('kernel32', 'GetConsoleWindow', 'v', 'l').call, 0) @inipath = File.basename(__FILE__).sub(/\.rb$/i, '.ini') @inipath = File.join(Dir.pwd, @inipath).gsub(/\//, "\\") if File.exist?(@inipath) gpps = Win32API.new('kernel32', 'GetPrivateProfileString', 'ppppip', 'i') gpps.call('Game', 'Library', DefaultLibrary, @library, 100, @inipath) gpps.call('Game', 'Title', DefaultTitle, @title, 100, @inipath) gpps.call('Game', 'Scripts', DefaultScripts, @scripts, 100, @inipath) @library.delete([0].pack('C')) @title.delete([0].pack('C')) @scripts.delete([0].pack('C')) else @library = DefaultLibrary @title = DefaultTitle @scripts = DefaultScripts end if File.exist?(File.basename(__FILE__).sub(/\.rb$/i, '.rgssad')) @rgssad = File.basename(__FILE__).sub(/\.rb$/i, '.rgssad') @rgssad = File.join(Dir.pwd, @rgssad).gsub(/\//, "\\") end @wndclass = [ 43, # style Win32API.new('kernel32', 'GetProcAddress', 'lp', 'l').call( Win32API.new('kernel32', 'LoadLibrary', 'p', 'l').call('User32.dll'), 'DefWindowProcW'), # wndproc 0, # class extra 0, # wnd extra @hInstance, Win32API.new('user32', 'LoadIcon', 'll', 'l').call(0, 32512), # icon Win32API.new('user32', 'LoadCursor', 'll', 'l').call(0, 32512), # cursor Win32API.new('gdi32', 'GetStockObject', 'i', 'l').call(4), # brush 0, # menu name WndClassName # class name ].pack('ILiiLLLLLp') temp = Win32API.new('user32', 'RegisterClass', 'p', 'l').call(@wndclass) err_msg("注册窗口类失败 %s。", WndClassName) if temp == 0 gsm = Win32API.new('user32', 'GetSystemMetrics', 'i', 'i') width = gsm.call(7) * 2 + 640 height = gsm.call(8) * 2 + gsm.call(4) + 480 x = (gsm.call(0) - width) / 2 y = (gsm.call(1) - height) / 2 @hWnd = Win32API.new('user32','CreateWindowExA','lpplllllllll','l').call( 0x100, WndClassName, @title, 0x90CA0000, x, y, width, height, 0, 0, @hInstance, 0) err_msg("创建窗口失败 %s。", @title) if @hWnd == 0 @hRGSSCore = Win32API.new('kernel32', 'LoadLibrary', 'p', 'l').call(@library) err_msg("加载RGSS核心库失败 %s。", @library) if @hRGSSCore == 0 def get_check(ary) begin Kernel.const_set(ary[0], Win32API.new(@library, *ary)) rescue Exception err_msg("获取RGSS核心库导出函数失败 %s。", ary[0]) end end get_check(%w{RGSSEval p i}) get_check(%w{RGSSInitialize l v}) get_check(%w{RGSSGameMain lpl v}) get_check(%w{RGSSSetupRTP ppi}) undef :get_check rtpname = [0].pack('C') * 1024 if (RGSSSetupRTP.call(@inipath, rtpname, 1024) == 0) err_msg("没有发现 RGSS-RTP %s。", rtpname.delete([0].pack('C'))) end RGSSInitialize.call(@hRGSSCore) if ARGV.include?("btest") RGSSEval.call("$DEBUG = true; $BTEST = true") @rgssad = nil elsif ARGV.include?('debug') RGSSEval.call("$DEBUG = true") end RGSSGameMain.call(@hWnd, @scripts, @rgssad ? rgssad.object_id * 2 + 16 : 0) stop
# coding: gbk
require 'win32api'
def err_msg(format, *args)
Win32API.new('user32', 'MessageBox', 'lppl', 'i').call(@hWnd ? @hWnd : 0, format % args, @title, 16)
stop
end
def stop
Win32API.new('kernel32', 'FreeLibrary', 'l', 'i').call(@hRGSSCore) if @hRGSSCore and @hRGSSCore != 0
Win32API.new('user32', 'DestroyWindow', 'l', 'i').call(@hWnd) if @hWnd and @hWnd != 0
Win32API.new('user32', 'UnregisterClass', 'pl', 'i').call(WndClassName, @hInstance)
exit
end
WndClassName = "RGSS Player"
DefaultLibrary = "RGSS102J.dll"
DefaultTitle = "Untitled"
DefaultScripts = "Data\\Scripts.rxdata"
@library = [0].pack('C') * 100
@title = [0].pack('C') * 100
@scripts = [0].pack('C') * 100
@hInstance = Win32API.new('kernel32', 'GetModuleHandle', 'l', 'l').call(0)
Win32API.new('user32', 'ShowWindow', 'li', 'i').call(Win32API.new('kernel32', 'GetConsoleWindow', 'v', 'l').call, 0)
@inipath = File.basename(__FILE__).sub(/\.rb$/i, '.ini')
@inipath = File.join(Dir.pwd, @inipath).gsub(/\//, "\\")
if File.exist?(@inipath)
gpps = Win32API.new('kernel32', 'GetPrivateProfileString', 'ppppip', 'i')
gpps.call('Game', 'Library', DefaultLibrary, @library, 100, @inipath)
gpps.call('Game', 'Title', DefaultTitle, @title, 100, @inipath)
gpps.call('Game', 'Scripts', DefaultScripts, @scripts, 100, @inipath)
@library.delete([0].pack('C'))
@title.delete([0].pack('C'))
@scripts.delete([0].pack('C'))
else
@library = DefaultLibrary
@title = DefaultTitle
@scripts = DefaultScripts
end
if File.exist?(File.basename(__FILE__).sub(/\.rb$/i, '.rgssad'))
@rgssad = File.basename(__FILE__).sub(/\.rb$/i, '.rgssad')
@rgssad = File.join(Dir.pwd, @rgssad).gsub(/\//, "\\")
end
@wndclass = [
43, # style
Win32API.new('kernel32', 'GetProcAddress', 'lp', 'l').call(
Win32API.new('kernel32', 'LoadLibrary', 'p', 'l').call('User32.dll'),
'DefWindowProcW'), # wndproc
0, # class extra
0, # wnd extra
@hInstance,
Win32API.new('user32', 'LoadIcon', 'll', 'l').call(0, 32512), # icon
Win32API.new('user32', 'LoadCursor', 'll', 'l').call(0, 32512), # cursor
Win32API.new('gdi32', 'GetStockObject', 'i', 'l').call(4), # brush
0, # menu name
WndClassName # class name
].pack('ILiiLLLLLp')
temp = Win32API.new('user32', 'RegisterClass', 'p', 'l').call(@wndclass)
err_msg("注册窗口类失败 %s。", WndClassName) if temp == 0
gsm = Win32API.new('user32', 'GetSystemMetrics', 'i', 'i')
width = gsm.call(7) * 2 + 640
height = gsm.call(8) * 2 + gsm.call(4) + 480
x = (gsm.call(0) - width) / 2
y = (gsm.call(1) - height) / 2
@hWnd = Win32API.new('user32','CreateWindowExA','lpplllllllll','l').call(
0x100, WndClassName, @title, 0x90CA0000, x, y, width, height, 0, 0, @hInstance, 0)
err_msg("创建窗口失败 %s。", @title) if @hWnd == 0
@hRGSSCore = Win32API.new('kernel32', 'LoadLibrary', 'p', 'l').call(@library)
err_msg("加载RGSS核心库失败 %s。", @library) if @hRGSSCore == 0
def get_check(ary)
begin
Kernel.const_set(ary[0], Win32API.new(@library, *ary))
rescue Exception
err_msg("获取RGSS核心库导出函数失败 %s。", ary[0])
end
end
get_check(%w{RGSSEval p i})
get_check(%w{RGSSInitialize l v})
get_check(%w{RGSSGameMain lpl v})
get_check(%w{RGSSSetupRTP ppi})
undef :get_check
rtpname = [0].pack('C') * 1024
if (RGSSSetupRTP.call(@inipath, rtpname, 1024) == 0)
err_msg("没有发现 RGSS-RTP %s。", rtpname.delete([0].pack('C')))
end
RGSSInitialize.call(@hRGSSCore)
if ARGV.include?("btest")
RGSSEval.call("$DEBUG = true; $BTEST = true")
@rgssad = nil
elsif ARGV.include?('debug')
RGSSEval.call("$DEBUG = true")
end
RGSSGameMain.call(@hWnd, @scripts, @rgssad ? rgssad.object_id * 2 + 16 : 0)
stop
RGSS纯ruby启动器.zip
(1.13 MB, 下载次数: 120)
| 欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |