首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >功能键卡住怎么办?

功能键卡住怎么办?
EN

Stack Overflow用户
提问于 2018-07-17 09:31:22
回答 1查看 0关注 0票数 0

我让Ctrl+Shift+X使用AutoIt启动了一个函数,但是使用它,Ctrl和Shift键就会被按住。插入{CTRL up}{SHIFT up}没有效果。这一切为什么会发生?

我的AutoIt脚本:

$dll = DllOpen("C:\Windows\System32\user32.dll")
Global Const $keys[8] = [0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x5b, 0x5c]
;0xa0   LSHIFT
;0xa1   RSHIFT
;0xa2   LCTRL
;0xa3   RCTRL
;0xa4   LALT
;0xa5   RALT
;0x5b   LWIN
;0x5c   RWIN

HotKeySet("{PAUSE}", "stop")
HotKeySet("^X", test)
Opt("SendKeyDelay", 0)
Opt("SendKeyDownDelay", 0)

While True
    Sleep(500)
WEnd

Func test()
    Send("The control and shift keys are going to be stuck down at the end of this.")
    Send("{ENTER}")
    Send("{ENTER}")
    Send("PlaceHolder,")
    Send("{ENTER}")
    Send("PlaceHolder")
    Send("{TAB}")
    Send("{HOME}")
    Send("{LCTRL up}")
    Send("{RCTRL up}")
    Send("{LSHIFT up}")
    Send("{RSHIFT up}")

    Call("UnstickKeys")
EndFunc

Func UnstickKeys()
    For $vkvalue In $keys
        DllCall($dll, "int", "keybd_event", "int", $vkvalue, "int", 0, "long", 2, "long", 0) ;Release each key
    Next
EndFunc

Func stop()
    Exit
EndFunc   ;==>stop the script
EN

回答 1

Stack Overflow用户

发布于 2018-07-17 18:52:40

我在下面修改了你的测试功能。这个解决方案有一个问题,因为要再次运行该函数,你将需要放弃Shift和ctrl,并对它们进行抑制。可以从代码中删除DLL调用。在调用函数时,我还禁用了^X热键。那样就更安全了。

Func test()
  Hotkeyset("^X")
  Send("The control and shift keys are going to be stuck down at the end of this.")
  Send("{ENTER}")
  Send("{ENTER}")
  Send("PlaceHolder,")
  Send("{ENTER}")
  Send("PlaceHolder")
  Send("{TAB}")
  Send("{HOME}")

  send("{CTRLDOWN}")
  send("{CTRLUP}")
  send("{SHIFTDOWN}")
  send("{SHIFTUP}")
  Hotkeyset("^X", "test")
EndFunc
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档