Project1
标题: 【RGSSGameMain】VA脚本中如何调用RGSS300中的RGSSGameMain函数? [打印本页]
作者: ky52879 时间: 2013-2-2 12:00
标题: 【RGSSGameMain】VA脚本中如何调用RGSS300中的RGSSGameMain函数?
各位大大,最近发现XP和VA有很大的不同,举个例子:
#参数1:游戏句柄,参数2:脚本文件地址,参数3:加密档案文件地址
$RGSSGameMain = Win32API.new("RGSS102J", "RGSSGameMain", "IPP", "V")
$GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
$RGSSGameMain.call($GetActiveWindow.call,"C:\\Temp\\RMVA\\Scripts.rxdata","")
#参数1:游戏句柄,参数2:脚本文件地址,参数3:加密档案文件地址
$RGSSGameMain = Win32API.new("RGSS102J", "RGSSGameMain", "IPP", "V")
$GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
$RGSSGameMain.call($GetActiveWindow.call,"C:\\Temp\\RMVA\\Scripts.rxdata","")
上面代码在XP工程中完美运行,但是请看下面
#参数1:游戏句柄,参数2:脚本文件地址,参数3:加密档案文件地址
$RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
$GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
$RGSSGameMain.call($GetActiveWindow.call,"C:\\Temp\\RMVA\\Scripts.rvdata2","")
#参数1:游戏句柄,参数2:脚本文件地址,参数3:加密档案文件地址
$RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
$GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
$RGSSGameMain.call($GetActiveWindow.call,"C:\\Temp\\RMVA\\Scripts.rvdata2","")
在VA中却报错:
这是为什么啊?有没有人知道呢?能否帮下忙。。
作者: satgo1546 时间: 2013-2-2 12:22
脚本文件读取失败,检查脚本是否存在
然后,是不是VA专用格式的脚本
作者: ky52879 时间: 2013-2-2 19:29
satgo1546 发表于 2013-2-2 12:22
脚本文件读取失败,检查脚本是否存在
然后,是不是VA专用格式的脚本
老兄。。我都在研究API了。。你说我能犯这话错误吗?
PS:拜托帮帮忙呗
作者: 晴兰 时间: 2013-2-2 19:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: ky52879 时间: 2013-2-2 20:03
晴兰 发表于 2013-2-2 19:33
脚本文件名要用unicode,如果没有中文路径的话可以认为每个字符后面加个\0, 最后加上两个\0 ...
什么意思?看的不太明白,能否告诉我,你将我的代码拿去测试了吗?
难道RMXP和RMVA的编码格式不一致??
作者: orzfly 时间: 2013-2-2 20:45
本帖最后由 orzfly 于 2013-2-2 20:49 编辑
$RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
$GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
$RGSSGameMain.call($GetActiveWindow.call,"C\000:\000\\\000T\000e\000m\000p\000\\\000R\000M\000V\000A\000\\\000S\000c\000r\000i\000p\000t\000s\000.\000r\000v\000d\000a\000t\000a\0002\000\000\000","")
$RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
$GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
$RGSSGameMain.call($GetActiveWindow.call,"C\000:\000\\\000T\000e\000m\000p\000\\\000R\000M\000V\000A\000\\\000S\000c\000r\000i\000p\000t\000s\000.\000r\000v\000d\000a\000t\000a\0002\000\000\000","")
#==============================================================================
# ■ String
#------------------------------------------------------------------------------
# 为字符串追加编码转换的机能。
#==============================================================================
# 参考:
#http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx
#http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx
#http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx
#==============================================================================
class String
MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
def to_uni
len = MultiByteToWideChar.call 65001, 0, self, -1, nil, 0
buf = "\0" * (len * 2 + 2)
MultiByteToWideChar.call 65001, 0, self, -1, buf, buf.size / 2
buf
end
def from_uni
len = WideCharToMultiByte.call 65001, 0, (self.respond_to?(:force_encoding) ? self.force_encoding("ASCII-8BIT") : self) + "\000\000", -1, nil, 0, nil, nil
ret = "\0" * len
WideCharToMultiByte.call 65001, 0, self, -1, ret, ret.size, nil, nil
self.respond_to?(:force_encoding) ?
ret.force_encoding("ASCII-8BIT").delete("\000") :
ret.delete("\000")
end
end
$RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
$GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
$RGSSGameMain.call($GetActiveWindow.call,"C:\\Temp\\RMVA\\Scripts.rvdata2".to_uni,"")
#==============================================================================
# ■ String
#------------------------------------------------------------------------------
# 为字符串追加编码转换的机能。
#==============================================================================
# 参考:
#http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx
#http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx
#http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx
#==============================================================================
class String
MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
def to_uni
len = MultiByteToWideChar.call 65001, 0, self, -1, nil, 0
buf = "\0" * (len * 2 + 2)
MultiByteToWideChar.call 65001, 0, self, -1, buf, buf.size / 2
buf
end
def from_uni
len = WideCharToMultiByte.call 65001, 0, (self.respond_to?(:force_encoding) ? self.force_encoding("ASCII-8BIT") : self) + "\000\000", -1, nil, 0, nil, nil
ret = "\0" * len
WideCharToMultiByte.call 65001, 0, self, -1, ret, ret.size, nil, nil
self.respond_to?(:force_encoding) ?
ret.force_encoding("ASCII-8BIT").delete("\000") :
ret.delete("\000")
end
end
$RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
$GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
$RGSSGameMain.call($GetActiveWindow.call,"C:\\Temp\\RMVA\\Scripts.rvdata2".to_uni,"")
作者: zhangbanxian 时间: 2013-2-2 21:17
确实有区别,用的w_char,不过话说这样有意义么?切换脚本?- -b
作者: ky52879 时间: 2013-2-2 21:38
orzfly 发表于 2013-2-2 20:45
$RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
$GetActiveWindow = Win32API.new ...
代码已经测试通过,很好很强大,但是有点遗憾:如果脚本路径里面有“中文”就不行了,有解决办法吗?
作者: ky52879 时间: 2013-2-3 13:37
中文路径的问题如果解决就可以认可啦,各位帮帮忙吧
作者: ky52879 时间: 2013-2-16 16:53
orzfly 发表于 2013-2-2 20:45
$RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
$GetActiveWindow = Win32API.new ...
十分感谢,这个转换脚本很强大,但是好像中文路径不能转。。有什么办法解决吗?
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |