gaoyuan22 发表于 2009-4-15 17:38:21

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

现在弄的一个脚本,一定要 按下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的方法呢?

zjimmy 发表于 2009-4-15 18:26:32

同问~~我send用win键也出现锁死的情况,要手工按下win才恢复~~

gaoyuan22 发表于 2009-4-15 18:31:07

回复 2# zjimmy 的帖子

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

但是在键值表里 0x12 被标为 MENU 键。

杨永全 发表于 2010-2-12 15:41:20

我也遇到这样的问题,如何能解决?

lainline 发表于 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).
页: [1]
查看完整版本: 脚本自动按下热键 会将 alt 与 ctrl 锁死为按下状态的问题。