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

Project1

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

[原创发布] 【VX\XP】高仿VA控制台

[复制链接]

Lv4.逐梦者

梦石
0
星屑
19468
在线时间
3108 小时
注册时间
2013-1-11
帖子
1292
跳转到指定楼层
1
发表于 2017-9-11 11:46:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 张咚咚 于 2018-11-20 17:44 编辑
  1. #==============================================================================
  2. # ■ Console
  3. #     By QQEat
  4. #------------------------------------------------------------------------------
  5. #  高仿VA控制台。
  6. #   puts:控制台打印
  7. #==============================================================================

  8. if $TEST or $DEBUG
  9.   Win32API.new("kernel32", "AllocConsole", "v", "i").call #创建
  10.   #~ Win32API.new("kernel32", "FreeConsole", "v", "i").call #释放
  11.   Win32API.new("kernel32", "SetConsoleTitle", "p", "i").call("RGSS Console") #setTitle
  12.   GetStdHandle = Win32API.new("kernel32", "GetStdHandle", "i", "i") #I/O_hWnd
  13.   WriteConsole = Win32API.new("kernel32", "WriteConsole", "ipiii", "i") #WriteConsole
  14.   GetStringLength = Win32API.new("kernel32", "lstrlenA", "p", "i") #getStringLength
  15.   
  16.   def puts(*args)
  17.     str = ""
  18.     args.each{|a| str << (a.is_a?(String) ? "\"" << a.to_s << "\"" : a.inspect) << "\n" }
  19.    
  20.     #处理编码
  21.     m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  22.     w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  23.     len = m2w.call(0xFDE9,0,str,-1,nil,0)
  24.     buf = "\0" * (len*2)
  25.     m2w.call(0xFDE9,0,str,-1,buf,buf.size/2)
  26.     len = w2m.call(0,0,buf,-1,nil,0,nil,nil)
  27.     ret = "\0" * len
  28.     w2m.call(0,0,buf,-1,ret,ret.size,nil,nil)
  29.     str = ret.delete!("\0")
  30.    
  31.     WriteConsole.call(GetStdHandle.call(-12), str, GetStringLength.call(str), 0, 0)
  32.   end
  33. else
  34.   def puts(*args);end
  35. end
  36. HWnd = Win32API.new('user32','FindWindowEx','llpp','i')
  37. Win32API.new('user32','SetForegroundWindow','i','i').call(HWnd.call(0, 0, 'RGSS Player', 0)) if $TEST or $DEBUG #获取焦点置前台
复制代码

评分

参与人数 3+3 收起 理由
miantouchi + 1 精品文章
KB.Driver + 1 精品文章
怪蜀黍 + 1 精品文章

查看全部评分

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2017-9-18 00:08:45 | 只看该作者
GetStringLength = Win32API.new("kernel32", "lstrlenA", "p", "i") #getStringLength
这个会不会因为输出中间含有 "\0" 的字符而提前终止?

点评

好像是不会...  发表于 2018-2-3 16:19
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-23 18:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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