找回密码
 加入
搜索
查看: 2934|回复: 4

脚本自动按下热键 会将 alt 与 ctrl 锁死为按下状态的问题。

[复制链接]
发表于 2009-4-15 17:38:21 | 显示全部楼层 |阅读模式
现在弄的一个脚本,一定要 按下  Send("^!{1}")  来呼叫   ctrl+alt+1 这个热键。
ctrl+alt+1 这个热键 是目标程序固定的,无法更改。

但是,我发现 用 Send 来呼叫这个热键 虽然可以 成功唤醒目标程序。

但是,却把 键盘的 alt 与 ctrl 两个键 锁死为了 按下状态。
而且:
  Send("{^ }")
   Send("{!}")
  Send("{^ up}")
  Send("{! up}")
  Send("{lalt up}")
    Send("{lctrl up}")
    Send("{ralt up}")
    Send("{rctrl up}")
这些命令都无法让 alt 与 ctrl 两键恢复为 up 状态。

目前只能用手点 alt 与 ctrl 两键 才可恢复为 up状态。

我想,是不是用 user32.dll 中的 改变键盘某键值状态的 API函数,才可以修改这个“bug”?
我知道 查看 键盘键值状态的API函数是:GetKeyState
使用格式是:DllCall("user32.dll", "long", "GetKeyState", "long", $VK_Code)
$VK_Code 代表是某个 键的 键值。
这个可以方便的知道 某个 按键 是up 还是 down 或者在某段时间内有没有被按过。

但是,我不知道,直接修改键盘键值 的状态 API的函数是什么。
而且在网上也没查到 alt 键的键值是多少。
Shift 是 0x10
Ctrl 是 0x11

想请教过路的高手:
Alt 的键值是多少呢?
有没有 能直接修改 某个键盘按键状态 的函数呢?
有的话 是哪个函数呢?
如果上面说的办法不行,有没其他能纠正这个bug的方法呢?
发表于 2009-4-15 18:26:32 | 显示全部楼层
同问~~我send用win键也出现锁死的情况,要手工按下win才恢复~~
 楼主| 发表于 2009-4-15 18:31:07 | 显示全部楼层

回复 2# zjimmy 的帖子

经过测试发现 alt 的 键值应该是 0x12

但是在键值表里 0x12 被标为 MENU 键。
发表于 2010-2-12 15:41:20 | 显示全部楼层
我也遇到这样的问题,如何能解决?
发表于 2010-2-13 08:00:34 | 显示全部楼层
本帖最后由 lainline 于 2010-2-13 08:02 编辑

把Send 操作拆开看看
Send("{altDOWN}")
Send("{ctrlDOWN}")
send("1")
Send("altUP}")
Send("{ctrlUP}")


也有可能是参数设置问题
SendKeyDelay 更改发送键击命令之间的延迟时间长度.
以毫秒为单位(默认值=5).设置此值为0时也许会无效,这时请使用1代替.  
SendKeyDownDelay 更改在每次键击期间(松开按键之前)按住按键的时间长度.对于一些需要花费一定时间才能注册键击的应用程序(以及各种游戏)您可能就要提高这一数值.
以毫秒为单位(默认值 = 5).
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 22:53 , Processed in 0.076877 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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