Send怎么实现与物理按键一样的效果?

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: tmplinshi, arcticir

black1396
Posts: 10
Joined: 08 Jun 2016, 11:09

Send怎么实现与物理按键一样的效果?

24 Jul 2016, 02:34

Send怎么才能达到与物理按键一样的效果?

个人有一个简单的复制粘贴用的小脚本,用于一些不能用Ctrl-v粘贴的场合.主要代码如下:

Code: Select all

::
  Gui,New
  Gui,font,s12,宋体
  row:=18,w1:=370
  Gui,Add,Edit,vdata r%row% w%w1%
  Gui,Add,Button,x+12 w108 h38,复制
  Gui,Show,AutoSize Center
Return

Button复制:
Gui,Submit
Pause
Send %data%
Return

Capslock::
Pause
Return
然后最近碰到一种情况,在一个游戏里,碰到Send失效不能粘贴,完全无输入的情况.
如果要测试的话,游戏的名称叫天涯明月刀OL(不过这游戏很大,10多个G,不是很有必要为了测试去下载安装.)登录时的输入密码的区域,用Send完全无输入.

网上搜索,也有一些人曾零星的反应IE控件保护下的输入框不能使用Send的情况.比如淘宝旺旺,QQ,一些网银的输入框.
测试过淘宝旺旺,QQ,和个别网银,不论是帐号还是密码,用Send还是有输入.
也就是说,没有找到类似的Send无效的情境.

从游戏保护的角度来讲,似乎不能用Send也解释得通.
如果是游戏的防外挂监测什么的话,是不是应该帐号区域也不能用Send才对?
而实际上在游戏的帐号输入用Send还是有输入的,就惟独密码位置用Send毫无反应,0输入.
当然,用键盘输入还是没问题的.

换一个角度看,ahk的最基本的目标不正是模拟物理键盘的输入,这个物理键盘有输入,用Send无输入,是什么情况?
是Send的缺陷么,还是只能归于游戏的特殊保护机制?

Send与物理键盘上的输入,实际差别在哪里?
garry
Posts: 1903
Joined: 22 Dec 2013, 12:50

Re: Send怎么实现与物理按键一样的效果?

24 Jul 2016, 14:19

send example for notepad

Code: Select all

pr=notepad
sc=ahk_exe Notepad.exe
  Gui,New
  Gui,font,s12,Lucida Console
  row:=18,w1:=450
  Gui,Add,Edit,vdata r%row% w%w1%
  Gui,Add,Button,x+12 w108 h38 gA1,Start
  Gui,Show,AutoSize Center
Return

Guiclose:
exitapp

A1:
Gui,Submit,nohide
IfWinNotExist,%sc%
   {
   Run, %pr%,,,pid1
   WinWait,%SC%
   }
IfWinNotActive ,%SC%,,WinActivate,%SC%
    WinWaitActive,%SC%
ControlSend, Edit1, %data%`n,%sc%
Return
black1396
Posts: 10
Joined: 08 Jun 2016, 11:09

Re: Send怎么实现与物理按键一样的效果?

24 Jul 2016, 19:15

谢谢楼上回复.

简单测试过用ControlSend,包括ControlSetText等.
ControlSetText一样无输入.
ControlSend有输入,可以看到密码区输入了密码(以圆点显示,看不到明文),但是在后面登录的时候会报错:帐号/密码错误.多次测试都是这样的结果,密码通过键盘输入确认无误.
这也是一个很奇怪的现象,可能跟游戏的防外挂机制有关,毕竟ControlSend多多少少牵涉到后台操作,有点像外挂.个人能力有限,这个情况很有趣,但是不知道怎么研究,所以并没做再多的测试,也不知道怎么测试.

我想知道的为什么用Send会毫无输入,理论上讲,Send就是给当前活动的窗口/控件发送按键,应该是最简单的,而且Send也不需要获取各种ID,只要激活输入框就可以,可以说容错率是最高的.

怎么会有Send无效,ControlSend相对有一点效的情况?

现在问题是,样本只有这么一个游戏,没有其他的程序样本可供测试,而这游戏太大了,太不方便测试.通过网上搜索,有人讲到的淘宝/QQ/网银的控件会造成无法用AHK之类无法输入的情况,但是实测过几个,用Send都是没有问题的,对淘宝/QQ/网银用ControlSend倒是没去试.
black1396
Posts: 10
Joined: 08 Jun 2016, 11:09

Re: Send怎么实现与物理按键一样的效果?

24 Jul 2016, 19:26

我有一个猜想,有没有可能,这个程序展现的密码输入框是一个假相,或者说,看上去密码输入框激活了,实际上强制激活另一个控件(比如用另一个非Edit控件盖在相同的位置).
这样或许可以解释,为什么Send无效,因为实质上的密码输入框并不是活动的.眼睛看到的那个框,并不能输入,所以结果就是无输入.

如果是上面猜测的情况,那物理键盘的输入,又是如何无障碍地通过呢?
Send已经是最接近物理键盘输入的方式,Send相比物理键盘的输入,还缺少点什么?
tmplinshi
Posts: 1548
Joined: 01 Oct 2013, 14:57

Re: Send怎么实现与物理按键一样的效果?

24 Jul 2016, 20:01

可以用 WinRing0 (需要以管理员身份运行,并且需要编译成 exe 后才能正常使用。)

Return to “请求帮助”

Who is online

Users browsing this forum: No registered users and 14 guests