Project1

标题: RGSS是否有办法实现外部文件拖动至游戏内打开 [打印本页]

作者: 一条草鱼    时间: 2021-11-5 14:52
标题: RGSS是否有办法实现外部文件拖动至游戏内打开
本帖最后由 一条草鱼 于 2021-11-5 15:12 编辑

打个比方说平常用的各种播放器大家会看到只要拖动文件到软件中就能自动播放
最近也想尝试一下这种功能 但是关于WIN32API中的C++知识实在有些匮乏...
不知道大家有没有什么思路和意见 欢迎讨论一下

作者: 一条草鱼    时间: 2021-11-5 15:09
本帖最后由 一条草鱼 于 2021-11-5 15:15 编辑

我这里的思路是首先调用
  1. Win32API.new("shell32", "DragAcceptFiles", "ll", "v").call(Graphics.window_hwnd, 1)
复制代码

让窗口可以接受拖动的文件 虽说可以接受了 但是窗口获取WM_DROPFILES消息之后我们还是没办法判断到
还有DragQueryFile这个方法 需要怎么引用也不是很清楚..尤其是HDROP类型的这个参数

  1. UINT DragQueryFileA(
  2.   [in]  HDROP hDrop,
  3.   [in]  UINT  iFile,
  4.   [out] LPSTR lpszFile,
  5.         UINT  cch
  6. );
复制代码

那究竟该怎么做才好啊...求大神指导 真的好头疼
作者: 一条草鱼    时间: 2021-11-6 13:04
本帖最后由 一条草鱼 于 2021-11-6 13:05 编辑

还有大家觉得是否有办法不借助编写的的dll来实现
作者: xmbwg    时间: 2021-11-6 14:13
https://rpg.blue/thread-370060-1-1.html
作者: 一条草鱼    时间: 2021-11-6 16:43
xmbwg 发表于 2021-11-6 14:13
https://rpg.blue/thread-370060-1-1.html


看了黄鸡大神的这篇开源工程确实思路清晰了很多
不过脚本文件中有一个名为$h的全局变量我有些摸不着头脑
找了很久发现也不是在外部脚本里生成的
那有人知道$h代表着什么吗..

作者: 一条草鱼    时间: 2021-11-6 18:14
本帖最后由 一条草鱼 于 2021-11-6 18:16 编辑
一条草鱼 发表于 2021-11-6 16:43
看了黄鸡大神的这篇开源工程确实思路清晰了很多
不过脚本文件中有一个名为$h的全局变量我有些摸不着头脑 ...


还有WndProc.enable方法有前辈愿意辛苦讲解一下吗
看着一大片16进制的数组完全想不明白...

作者: xmbwg    时间: 2021-11-6 20:50
c/c++/... -> 汇编 -> 机器码 -> exe / dll
他修改了game.exe 中的代码 也就是机器码
所以这个程序不需要game.ini 默认指定了fux2.dll 和 scripts.rb
当然 dll也是改过的 不然不能读取执行明文脚本
然后 exe 中 他把游戏窗口句柄(窗口句柄是原exe创建的 所以可从这里读取)以文本形式保存到了$h这个变量中
具体形式是每位十六进制加0x30(0x30是ascii 0) 当作文本 这个你在解码$h的文件里也能察觉

类似的
windproc里面 十六进制数组就是机器码 也就是一个函数 用来替换原先的游戏窗口过程

系统提供的 api 接口是c/c++层级的 如果需要一些回调 或别的功能 ruby是完不成的 至少va里不行
这时候你就需要或者写个dll
或者用机器码 也就是汇编

我这样讲你可能还是有点迷糊
你可以考虑或者写dll 或者用他的实现
不需要弄懂原理才能使用
毕竟这不是一朝一夕的事情




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