d5121226 发表于 2010-9-28 11:10:36

关于热键设置的问题【已解决】

本帖最后由 d5121226 于 2010-9-28 22:18 编辑

我想请教的是有没有办法让当软件不是活动窗口的的时候,所设置的热键无效,但当软件为活动窗口的时候,热键有效。

3mile 发表于 2010-9-28 12:03:42

来个另类的思路。
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 623, 442, 192, 124)
$Button1 = GUICtrlCreateButton("Button1", 320, 328, 113, 41)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        If WinActive("Form1") Then
                If _IsPressed("7B") Then Exit;当前窗口如果活动,热键F12退出程序
        EndIf

        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd

水木子 发表于 2010-9-28 12:12:32

如果希望把捕获的热键事件发送到激活程序中,您就必须先注销该热键然后再调用 Send 或 ControlSend 函数:
; 捕获并传递按键事件
HotKeySet("{Esc}", "captureEsc")
Func captureEsc()
    ; 这里可定义要做的各种任务
    HotKeySet("{Esc}")
    Send("{Esc}")
    HotKeySet("{Esc}", "captureEsc")
EndFunc

d5121226 发表于 2010-9-28 14:36:08

嗯,多谢了。我试试看。

d5121226 发表于 2010-9-28 14:39:30

回复 2# 3mile


    不错,这个挺好,而且易懂。多谢啊

d5121226 发表于 2010-9-28 14:47:03

如果希望把捕获的热键事件发送到激活程序中,您就必须先注销该热键然后再调用 Send 或 ControlSend 函数:
; ...
水木子 发表于 2010-9-28 12:12 http://www.autoitx.com/images/common/back.gif


    这种方法我试过了,快捷键不好使了,不过窗口是否被激活。。。

水木子 发表于 2010-9-28 15:04:56

本帖最后由 水木子 于 2010-9-28 15:07 编辑

2楼的方法思路不错,不过一直循环检测,有点浪费效率了。
我说的方法是这样,你不妨试试。

#include <WindowsConstants.au3>
HotKeySet('{F1}', '_Message')

$Form1 = GUICreate("Form1", 280, 250)
GUISetState()

Do
Until GUIGetMsg() = -3


Func _Message()
        If WinActive($Form1) Then
                MsgBox(0, '', '热键有效')
        Else
                HotKeySet('{F1}')
                Send('{F1}')
                HotKeySet('{F1}', '_Message')
        EndIf
EndFunc   ;==>_Message

hzxymkb 发表于 2010-9-28 16:23:31

不知道楼主解决没有?解决了请修改标题!谢谢!

d5121226 发表于 2010-9-28 22:16:45

多谢了啊。学习了

yingf20 发表于 2010-9-30 05:57:40

我也是为这个问题搜索而来。学习一下。谢谢

lqylbh 发表于 2010-10-26 17:32:31

学习一下~谢了

_ddqs. 发表于 2010-10-27 18:37:50

AdlibRegister("HKSet");;;;----自动设置热键
Func HKSet()
        If is("我的软件我的窗口") Then
                HotKeySet("^s","_cs") ;启用
                Return
        Else
                HotKeySet("^s") ;取消
                Return
        EndIf
EndFunc
;~

http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=19206&pid=225567&fromuid=7653769

kingfirekkk 发表于 2010-10-28 09:32:59

回复 3# 水木子

不错,这点就不知道了...感谢。
页: [1]
查看完整版本: 关于热键设置的问题【已解决】