找回密码
 加入
搜索
查看: 8437|回复: 21

[AU3基础] au3如何抢程序的热键?[已解决]

 火.. [复制链接]
发表于 2010-12-19 04:13:53 | 显示全部楼层 |阅读模式
本帖最后由 happytc 于 2011-1-13 08:26 编辑

如,TotalCommander(TC)程序的Alt+F6是给文件解压的热键,我想自动化TC这个解压出来的窗口,在au3里同样设Alt+F6,代码如下,但时灵时不灵的,换成别的TC没有的热键(#z),就正常了,这要为什么?
HotKeySet("!{F6}", "TCUnpackSameDir")

While 1
    Sleep(100)
WEnd

Func TCUnpackSameDir()
        Local $TCclass1, $TCclass2, $TCControl1, $TCControl2, $Info, $Val
        $Val = "cm_UnpackFiles" & @CR
        $TCclass1 = "[CLASS:TTOTAL_CMD]"
        $TCclass2 = "[CLASS:TDLGUNZIPALL]"
        $TCControl1 = "TAltEdit1"
        $TCControl2 = "TCheckBox1"
        $TCControl3 = "TButton4"
        ControlSend($TCclass1, "", "Edit1", $Val)
        If WinWaitActive($TCclass2) Then
                Do
                        Send("{DEL}")
                        $Info = ControlGetText($TCclass2, "", $TCControl1)
                Until Not $Info
                ControlCommand($TCclass2, "", $TCControl2, "Check")
                ControlClick($TCclass2, "", $TCControl3)
        EndIf
EndFunc
而在AHK里做同样的事,只要下面的代码,就完全正常了,怎么在au3里也可以完全抢程序热键
SetTimer subTimer, 246
subTimer: 
$!F6::
IfWinActive ahk_class TTOTAL_CMD
{
        PostMessage, 1075, 509
        WinWaitActive, ahk_class TDLGUNZIPALL
        Send, {Del}
        Control, Check, , TCheckBox1
        Send, {Enter}
}
else
        Send !{F6}
return
 楼主| 发表于 2010-12-19 04:16:06 | 显示全部楼层
另外上面AHK代码里的这句:        PostMessage, 1075, 509
在au3里怎么表达?其中的509是TC程序的命令,但前面的1075在au3里怎么弄?
发表于 2010-12-19 08:45:10 | 显示全部楼层
这里是哪里热键
发表于 2010-12-19 10:39:55 | 显示全部楼层
你的想法已经有人实现了  呵呵
最初来源 :https://dream4ever.org/showthread.php?t=79529
这里提供下载: http://bbs.et8.net/bbs/showthread.php?t=721102
 楼主| 发表于 2010-12-19 19:17:37 | 显示全部楼层
楼上的,你有帐号(精品论坛的)不?帮下载下吧,我想看看别人是怎么实现的,多学习下
 楼主| 发表于 2010-12-19 19:19:35 | 显示全部楼层
回复 4# 蜘蛛抱蛋

不过,你给的地址,跟我帖子说的,完全是另外回事呢!
发表于 2010-12-19 21:17:57 | 显示全部楼层
学习了,还真是有人先做了
发表于 2010-12-19 21:21:42 | 显示全部楼层
回复 6# happytc

我没有帐号。不能注册码?我没试哦
发表于 2010-12-19 21:33:18 | 显示全部楼层
AdlibRegister("_HotKeySet")



Func _HotKeySet()
        
        If HotKeySet("!{F6}", "test") = 0 Then 
                
                ;先删除被其他程序占用的热键(等老大...,俺不会!)
                
                ;HotKeySet("!{F6}", "test")
                
        Else
                
                ;MsgBox(0,0,"热键已设置",1)
                
        EndIf
        
EndFunc


Func test()

        ;return
        
EndFunc




While 1

        Sleep(3000)
        
WEnd
 楼主| 发表于 2010-12-20 22:23:11 | 显示全部楼层
论坛老大们,怎么解决这个问题?
看来ahk叫autoHotKey不是白叫的,在热键方面,ahk的确比au3强太多了。
上面_ddqs大侠的帖子,谁能完成呀。
发表于 2010-12-21 07:54:24 | 显示全部楼层
回复 9# _ddqs.

删除热键是很困难滴,估计AHK也不行
 楼主| 发表于 2010-12-21 09:59:36 | 显示全部楼层
上面我给的ahk的,没有任何问题,可以正常使用。
那个ahk的代码,根本没有去删除热键,而是抢热键,每次都能抢到。但au3的就不能次次抢到热键了


这个问题,老大们怎么解决呀
 楼主| 发表于 2010-12-22 09:38:55 | 显示全部楼层
这个问题大家没有遇到过?还是au3暂时还无法解决?
发表于 2010-12-22 15:09:39 | 显示全部楼层
_WinAPI_UnregisterHotKey
发表于 2010-12-22 19:37:08 | 显示全部楼层
本帖最后由 飘云 于 2010-12-22 19:38 编辑

_WinAPI_UnregisterHotKey存在与WinAPIEx.au3内,一般帮助文档里的是WinAPI.au3,貌似WinAPIEx_3.0.chm文件被独立出来了。。话说怎么把WinAPIEx_3.0.chm的信息添加到帮助文档里呢
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-17 16:40 , Processed in 0.085295 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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