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

Project1

 找回密码
 注册会员
搜索
查看: 5811|回复: 6

[原创发布] 【真·截图】无视窗口遮挡,RMXP的Graphics.snap_to_bitmap

[复制链接]
头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

发表于 2015-2-18 01:51:58 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2207
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

发表于 2015-2-18 08:27:57 | 显示全部楼层
  1. Kernel.require 'c:/rmsfx/rmsfx'
复制代码
感觉好像很厉害的样子

点评

已改,反正这是不要的  发表于 2015-2-18 11:49
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
175
在线时间
509 小时
注册时间
2010-10-1
帖子
97
发表于 2015-2-19 17:38:51 | 显示全部楼层
感觉这功能真贴心~大赞~!
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8025
在线时间
7346 小时
注册时间
2010-7-16
帖子
4915

开拓者

发表于 2016-5-15 06:14:48 | 显示全部楼层
请问楼主这个和国外的这个脚本在功能上有什么区别?
国外这个也没有遮挡之类的问题。
原文链接:http://www.hbgames.org/forums/viewtopic.php?f=12&t=75650
RUBY 代码复制
  1. module Graphics
  2.   RtlMoveMemory          = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  3.   BitBlt                 = Win32API.new('gdi32', 'BitBlt', 'iiiiiiiii', 'i')
  4.   CreateCompatibleBitmap = Win32API.new('gdi32', 'CreateCompatibleBitmap', 'iii', 'i')
  5.   CreateCompatibleDC     = Win32API.new('gdi32', 'CreateCompatibleDC', 'i', 'i')
  6.   DeleteObject           = Win32API.new('gdi32', 'DeleteObject', 'i', 'i')
  7.   GetDIBits              = Win32API.new('gdi32', 'GetDIBits', 'iiiiipi', 'i')
  8.   SelectObject           = Win32API.new('gdi32', 'SelectObject', 'ii', 'i')
  9.   SetDIBits              = Win32API.new('gdi32', 'SetDIBits', 'iiiiipi', 'i')
  10.   hWnd = Win32API.new('user32', 'FindWindow', 'pp', 'i').call('RGSS Player', 0)
  11.   DC   = Win32API.new('user32', 'GetDC', 'i', 'i').call(hWnd)
  12.   def self.snap_to_bitmap
  13.     bitmap = Bitmap.new(width=640, height=480)
  14.     RtlMoveMemory.call(address="\0"*4, bitmap.__id__*2+16, 4)
  15.     RtlMoveMemory.call(address, address.unpack('L')[0]+8, 4)
  16.     RtlMoveMemory.call(address, address.unpack('L')[0]+16, 4)
  17.     address = address.unpack('L')[0]
  18.     info = [40,width,height,1,32,0,0,0,0,0,0].pack('LllSSLLllLL')
  19.     hDC = CreateCompatibleDC.call(DC)
  20.     hBM = CreateCompatibleBitmap.call(DC, width, height)
  21.     DeleteObject.call(SelectObject.call(hDC, hBM))
  22.     SetDIBits.call(hDC, hBM, 0, height, address, info, 0)
  23.     BitBlt.call(hDC, 0, 0, width, height, DC, 0, 0, 0xCC0020)
  24.     GetDIBits.call(hDC, hBM, 0, height, address, info, 0)
  25.     DeleteObject.call(hBM)
  26.     DeleteObject.call(hDC)
  27.     bitmap
  28.   end
  29. end
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

 楼主| 发表于 2016-5-15 18:16:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8025
在线时间
7346 小时
注册时间
2010-7-16
帖子
4915

开拓者

发表于 2016-5-15 22:07:01 | 显示全部楼层
本帖最后由 熊的选民 于 2016-5-15 22:28 编辑
晴兰 发表于 2016-5-15 18:16
关于何谓遮挡,熊大可以试试这个,里面有一个注释,从那里开始的三行可以换成常用的保存或者显示图片看效 ...


不管是用你给的那段代码自动移动窗口,还是手动把窗口移动到屏幕外,国外那个脚本都不会出现遮挡现象。不知道是不是因为我用的是windows 10?

但你的脚本有个好处是不用调用Graphics.update就可以立即截图。比如说在菜单里选择存档,若用你的脚本,可以让菜单消失,截图,再重新显示菜单,这样截图中不会出现菜单,玩家也看不到菜单的闪烁。国外的脚本就做不到。

获取窗口用Win32API.new('user32', 'FindWindow', 'pp', 'i').call('RGSS Player', 0)不可以吗?
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39352
在线时间
7470 小时
注册时间
2009-7-6
帖子
13482

开拓者贵宾

发表于 2016-7-17 18:34:17 | 显示全部楼层
虽然是老帖。。。但还是忍不住想问问。
最近突然有需求用到这个脚本,但发现在全屏状态下截图是黑屏,在16位色环境下也无法正常工作。不知道什么原因。。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-28 17:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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