haixian000 发表于 2012-12-13 03:49:05

请问如何防止对当前窗口有SEND动作时,临时禁止其他操作

就是对指定账户登录窗口输入带有用户信息时,避免切到比如记事本,结果把信息都暴漏了。

{:face (207):}比较菜,望指点。。。

user3000 发表于 2012-12-13 07:35:04

可以考虑暂时禁用键盘和鼠标(BlockInput) ,并判断当前激活窗口是否为所要发送的窗口(WinActive)

注意及时解除禁用,否则只能按CTRL+ALT+DEL组合键强行关掉程序才能用键鼠了.

annybaby 发表于 2012-12-13 08:29:39

标题

回复 1# haixian000

除非别无选择,不建议使用模拟击键的方法,而是采用更可靠的控件的办法,如果一定要使用send,建议在程序前面加上sendkeepactive函数

xz00311 发表于 2012-12-13 14:26:46

BlockInput(1)
需要输入的代码
BlockInput(0)

annybaby 发表于 2012-12-14 09:38:59

2,4楼的两位会不会理解有偏差呢,封阻只能避免人为地激活记事本,不能阻止目标窗口失去焦点

xms77 发表于 2012-12-17 22:02:52

回复 5# annybaby
觉得2,4楼的方法可行,本来send的时候都是要WinActivate目标窗口的,如果鼠键被锁定的话,目标窗口一般是不会失去焦点,除非后台有程序会跳出窗口。

annybaby 发表于 2012-12-17 22:53:57

回复 8# xms77

我上面已经说了,如果一定要使用send的话,就在程序前面加上
sendkeepactive
   
并且,很明显,看楼主的描述,不太可能是自己主动将焦点切换到记事本~~应该是其它程序~~

waynew 发表于 2012-12-18 00:23:23

ControlSend可以针对指定的控件发送,这个比较稳妥。

不过控件的方式有些情况下可能会无效,只能用send发送,在发送的时候加一条判断指令,确保输入到当前的活动窗口

waynew 发表于 2012-12-18 00:23:53

有一些特殊情况也可以直接写内存操作。

waynew 发表于 2012-12-18 00:25:39

如果能获取到要输入对象的地址,我一般都是先用send(或者ControlSend)发送,发送后,我再读内存比对结果,如果发现结果有误,再用写内存的方式。

waynew 发表于 2012-12-18 00:27:15

在隔壁下软件没钱,只好到这边来打工了。

waynew 发表于 2012-12-18 00:28:12

我在10楼的回帖没说清楚,因为我的原则是尽量不用写内存的方式,只有出现错误的时候,才用。

annybaby 发表于 2012-12-18 00:34:34

回复 12# waynew

连续自己顶N个帖,每个帖子一句话,有可能会被管理人员当作是恶意灌水哦,到时刷的分还够扣,这样也不利于其他坛友学习讨论,建议将还些还没有回复删除了,将内容编辑到一个帖子~
特别是你十一楼的~~

xlj310 发表于 2012-12-19 14:44:10

最好是楼主举个例子说明一下,或者干脆把你想做的事情说出来,这样针对性地解决问题可能效率会高一点!
页: [1]
查看完整版本: 请问如何防止对当前窗口有SEND动作时,临时禁止其他操作