设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1565|回复: 6
打印 上一主题 下一主题

[已经解决] RGSS是否有办法实现外部文件拖动至游戏内打开

[复制链接]

Lv1.梦旅人

梦石
0
星屑
164
在线时间
22 小时
注册时间
2020-5-18
帖子
5
跳转到指定楼层
1
发表于 2021-11-5 14:52:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 一条草鱼 于 2021-11-5 15:12 编辑

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

Lv1.梦旅人

梦石
0
星屑
164
在线时间
22 小时
注册时间
2020-5-18
帖子
5
2
 楼主| 发表于 2021-11-5 15:09:16 | 只看该作者
本帖最后由 一条草鱼 于 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. );
复制代码

那究竟该怎么做才好啊...求大神指导 真的好头疼
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
164
在线时间
22 小时
注册时间
2020-5-18
帖子
5
3
 楼主| 发表于 2021-11-6 13:04:23 | 只看该作者
本帖最后由 一条草鱼 于 2021-11-6 13:05 编辑

还有大家觉得是否有办法不借助编写的的dll来实现
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
272
在线时间
15 小时
注册时间
2021-9-4
帖子
5
4
发表于 2021-11-6 14:13:20 | 只看该作者
https://rpg.blue/thread-370060-1-1.html
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
164
在线时间
22 小时
注册时间
2020-5-18
帖子
5
5
 楼主| 发表于 2021-11-6 16:43:40 | 只看该作者
xmbwg 发表于 2021-11-6 14:13
https://rpg.blue/thread-370060-1-1.html


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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
164
在线时间
22 小时
注册时间
2020-5-18
帖子
5
6
 楼主| 发表于 2021-11-6 18:14:32 | 只看该作者
本帖最后由 一条草鱼 于 2021-11-6 18:16 编辑
一条草鱼 发表于 2021-11-6 16:43
看了黄鸡大神的这篇开源工程确实思路清晰了很多
不过脚本文件中有一个名为$h的全局变量我有些摸不着头脑 ...


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

使用道具 举报

Lv2.观梦者

梦石
0
星屑
272
在线时间
15 小时
注册时间
2021-9-4
帖子
5
7
发表于 2021-11-6 20:50:39 | 只看该作者
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 或者用他的实现
不需要弄懂原理才能使用
毕竟这不是一朝一夕的事情

评分

参与人数 2星屑 +100 +1 收起 理由
alexncf125 + 100 认可答案
一条草鱼 + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-10 21:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表