happytc 发表于 2010-12-19 04:13:53

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

本帖最后由 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 = ""
        $TCclass2 = ""
        $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

happytc 发表于 2010-12-19 04:16:06

另外上面AHK代码里的这句:      PostMessage, 1075, 509
在au3里怎么表达?其中的509是TC程序的命令,但前面的1075在au3里怎么弄?

dwilly 发表于 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

happytc 发表于 2010-12-19 19:17:37

楼上的,你有帐号(精品论坛的)不?帮下载下吧,我想看看别人是怎么实现的,多学习下

happytc 发表于 2010-12-19 19:19:35

回复 4# 蜘蛛抱蛋

不过,你给的地址,跟我帖子说的,完全是另外回事呢!

ghl781258 发表于 2010-12-19 21:17:57

学习了,还真是有人先做了

蜘蛛抱蛋 发表于 2010-12-19 21:21:42

回复 6# happytc

我没有帐号。不能注册码?我没试哦

_ddqs. 发表于 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

happytc 发表于 2010-12-20 22:23:11

论坛老大们,怎么解决这个问题?
看来ahk叫autoHotKey不是白叫的,在热键方面,ahk的确比au3强太多了。
上面_ddqs大侠的帖子,谁能完成呀。

蜘蛛抱蛋 发表于 2010-12-21 07:54:24

回复 9# _ddqs.

删除热键是很困难滴,估计AHK也不行

happytc 发表于 2010-12-21 09:59:36

上面我给的ahk的,没有任何问题,可以正常使用。
那个ahk的代码,根本没有去删除热键,而是抢热键,每次都能抢到。但au3的就不能次次抢到热键了


这个问题,老大们怎么解决呀

happytc 发表于 2010-12-22 09:38:55

这个问题大家没有遇到过?还是au3暂时还无法解决?

3mile 发表于 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的信息添加到帮助文档里呢
页: [1] 2
查看完整版本: au3如何抢程序的热键?[已解决]