| 赞 | 87 |
| VIP | |
| 好人卡 | |
| 积分 | 136 |
| 经验 | |
| 最后登录 | 2021-1-24 |
| 在线时间 | 2753 小时 |
- 梦石
- 0
- 星屑
- 13562
- 在线时间
- 2753 小时
- 注册时间
- 2014-10-4
- 回帖
- 705

|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
在写上个脚本多窗体的时候 略微了解了rm内部的消息处理机制
知道它在收到 0x1C WM_ACTIVATEAPP 时会根据参数将一个内存值赋为1或者0
然后主循环中 判断这个内存值 1那么就运行 刷新 0 那么就还在主循环里面
然后 要后台运行 很简单的想法就是把判断后的条件跳改掉 就ok了
实际上也确实 就这样ok了 然后根据需要又写了一个 根据窗口是否有焦点决定是否屏蔽键盘鼠标的功能
大致 就这样吧
下面是脚本
[fold=后台运行][pre lang="ruby"]#------------------------------------------------------------------------
# -----SixRC 2017.11.02
# 后台运行脚本 含失去焦点时屏蔽键盘鼠标功能
#
# 使用前请务必阅读此 否则脚本会失败
# 使用为 BGR.bgr(bool) true为开启 false关闭 默认true
# BGR.update为在窗口失去或获得焦点时对于是否屏蔽键盘鼠标的刷新
# 下面的注释那里把它放进了Graphics.update 请自行选择要不要这样
# 然后
# 因为这个脚本涉及到对具体dll的修改 不同的dll情况不同
# 下面是不同dll对应的地址 请在 45 行开始自行修改DLL名和偏移地址及第二部分大小
# 除DLL外需要修改三处地方 见下面 47 48 行
# RGSS103J 0x2E48 \x46
# RGSS102J 100J 0x2E09 \x46
# RGSS104E 0x4FA4 \x5F
# RGSS200J 200E 202E 0x19AA \x35
# RGSS300 301 0x2712 \x5A
#------------------------------------------------------------------------
module BGR
module_function
GetActiveWindow=Win32API.new('user32','GetActiveWindow','v','l')
Hwnd=GetActiveWindow.call
User32=Win32API.new('kernel32','LoadLibraryA','p','l').call("user32")
GetAsyncKeyState=Win32API.new('kernel32','GetProcAddress','lp','l').call(User32,'GetAsyncKeyState')
GetKeyState=Win32API.new('kernel32','GetProcAddress','lp','l').call(User32,'GetKeyState')
WriteProcessMemory=Win32API.new('kernel32','WriteProcessMemory','llpll','l')
Original="\0"*5
OriginalVA="\0"*5
Mask="\x31\xC0\xC2\x04\x00"
Win32API.new('kernel32','ReadProcessMemory','llpll','l').call(-1,GetAsyncKeyState,Original,5,0)
Win32API.new('kernel32','ReadProcessMemory','llpll','l').call(-1,GetKeyState,OriginalVA,5,0)
@state=0
def update
if @state==0 && Hwnd != GetActiveWindow.call
WriteProcessMemory.call(-1,GetAsyncKeyState,Mask,5,0)
WriteProcessMemory.call(-1,GetKeyState,Mask,5,0)
return @state=1
end
if @state==1 && Hwnd == GetActiveWindow.call
WriteProcessMemory.call(-1,GetAsyncKeyState,Original,5,0)
WriteProcessMemory.call(-1,GetKeyState,OriginalVA,5,0)
return @state=0
end
end
DLL=Win32API.new('kernel32','LoadLibrary','p','l').call('RGSS103J')
def bgr(x=true)
WriteProcessMemory.call(-1,DLL+0x2E48,"\0",1,0) if x
WriteProcessMemory.call(-1,DLL+0x2E48,"\x46",1,0) unless x
end
end
#整合进 Graphics.update 请选择性使用
class << Graphics
alias update_BGR update
def update
BGR.update
update_BGR
end
end
#使用
BGR.bgr[/pre][/fold]
使用前请阅读说明 根据不同的dll改一下几个位置 对应的值我已经列出来了
使用十分简单 BGR.bgr 就好了 具体需求可以看脚本然后改
|
评分
-
查看全部评分
|