找回密码
 加入
搜索
查看: 5285|回复: 9

[AU3基础] HotKeySetk 中的函数怎么样才能带上参数呀

  [复制链接]
发表于 2009-11-3 18:16:56 | 显示全部楼层 |阅读模式
本帖最后由 fy1126 于 2011-1-12 14:30 编辑

HotKeySet(Call("swap_rejian", $de[$i][0]), "ceshi")
我想定义一个动态热键。同时也动态调用函数(有参数就行)

补充:其它就是想让"ceshi"部分可以达到接受变量或函数的效果
发表于 2009-11-4 01:23:01 | 显示全部楼层
帮助中写
=====================================
要调用一个函数 不能 给函数加上参数. 它将会被忽略.
发表于 2009-11-4 06:28:43 | 显示全部楼层
提供点思路:
把代参数的UDF再定义为新的多个 UDF(因为UDF可以套用UDF)
然后再使用HotKeySet 分别调用不同的UDF
 楼主| 发表于 2009-11-15 09:07:20 | 显示全部楼层
对不起哟,我忘了这是一个循环定义热键的程序
for $i= 1 to 30
hotkeyset(call"swap_rejian",$de[$i][0],"ceshi")
next
本来这里的"ceshi"应是$de[$i][$i]的,可是这样的话我建好多只是名字不一样,内容都一样的函数。所以我想换成带参数的形式。请高手帮助哟。谢谢了
发表于 2009-11-15 09:20:59 | 显示全部楼层
HOTKEYSET函数本身不支持参数,所以你得想其他办法解决,譬如设置一个全局变量(数组),让被调用函数读取变化的这个变量作为参数使用
 楼主| 发表于 2009-11-17 22:11:49 | 显示全部楼层
本帖最后由 fy1126 于 2009-11-17 22:19 编辑

回复 5# llztt


    我试过了,可是达不到我的要求,因为我这个参数是第一次是读取ini文件里的第一行,第二次是读取第二行。$i次要读取$i行呀,至少要传过去读第几行的这个参数吧

热键是ini文件的关键字,函数的参数是相对应关键字的值

Func setrejian()
        For $i = 1 To $de_rj[0][0]
                HotKeySet(Call("swap_rejian", $de_rj[$i][0]), "cs" & $i)
        Next
EndFunc   ;==>setrejian
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Func cs1()
        Call("jn_aj", $de_rj[1][1])
EndFunc   ;==>cs1
Func cs2()
        Call("jn_aj", $de_rj[2][1])
EndFunc
Func cs3()
        Call("jn_aj", $de_rj[3][1])
EndFunc
Func cs4()
        Call("jn_aj", $de_rj[4][1])
EndFunc  
Func cs5()
        Call("jn_aj", $de_rj[5][1])
EndFunc
Func cs6()
        Call("jn_aj", $de_rj[6][1])
EndFunc
发表于 2009-12-1 20:34:21 | 显示全部楼层
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 633, 447, 193, 125)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $argArray[10]
Local $i
$i = 1 
$argArray[$i] = $i
HotKeySet(Call("swap_rejian", $i), "cs" & $i)
$i = 2 
$argArray[$i] = $i
HotKeySet(Call("swap_rejian",$i), "cs" & $i)

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

        EndSwitch
WEnd



Func swap_rejian($i)
        Return "{F" & $i & "}"
EndFunc

Func cs1()
        Call("jn_aj", $argArray[1])
EndFunc 

Func cs2()
        Call("jn_aj", $argArray[2])
EndFunc 


Func jn_aj($arg)
        MsgBox(0, "", $arg)
EndFunc
发表于 2009-12-7 16:00:43 | 显示全部楼层
3楼说得不错阿
发表于 2009-12-8 16:38:16 | 显示全部楼层
本帖最后由 ZEROBOYS 于 2009-12-8 16:39 编辑

以下為之前au3論壇,別人引給我的資料,算是另一種熱鍵運用法,可帶函數...
使用評價為:確實不錯用,只是熱鍵響應有點遲鈍,應該有改良空間

#include <Misc.au3>
$dll = DllOpen("user32.dll")
While 1
    Sleep ( 250 )
        If _IsPressed("12", $dll) And _IsPressed("31", $dll) Then _function(1)        ;Alt+1
        If _IsPressed("12", $dll) And _IsPressed("32", $dll) Then _function(2)        ;Alt+2
        If _IsPressed("12", $dll) And _IsPressed("33", $dll) Then _function(3)        ;Alt+3
        If _IsPressed("23", $dll) Then ExitLoop                                                                        ;End
WEnd
DllClose($dll)

Func _function($X)
If $X =1 Then
ToolTip("測試1",0,0)
Sleep(2000)
ElseIf $X =2 Then
ToolTip("測試2",0,0)
Sleep(2000)
ElseIf $X =3 Then
ToolTip("測試3",0,0)
Sleep(2000)
EndIf
EndFunc

评分

参与人数 1金钱 +10 收起 理由
fy1126 + 10 首先感谢您的帮助,不过您的方法中函数中参 ...

查看全部评分

发表于 2009-12-8 19:06:34 | 显示全部楼层
HotKeySet可以带参数的话, 值是从哪里传入的呢......
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 14:58 , Processed in 0.080777 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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