找回密码
 加入
搜索
查看: 2098|回复: 5

注册快捷键运行一个函数,怎样在传递参数

[复制链接]
发表于 2008-9-29 20:38:53 | 显示全部楼层 |阅读模式
快捷键Ctrl+Alt+P,运行duankai($biaoji)函数,希望能够传递一个$biaoji的值,如何进行?

FileInstall ( "duankai.txt", "\\sever\共享\上网\duankai.txt", 0)    这行的作用是产生一个标志文件duankai.txt,来提醒局域网其他人,“老板来了”,然后其他机器运行我写的程序的话会检测“\\sever\共享\上网\”这个目录,一旦发现duankai.txt,立即断开网络,“一人报警,全体下线”呵呵。注:这段代码已经写好了,没贴出来而已。

下面的例子是紧急断开办公室网络的,
原理:删除dns,然后紧急关闭ie、遨游、qq、迅雷等进程……唯一有问题的是迅雷进程杀死后,托盘图标必须用鼠标扫一下才能消失,不知道怎么解决。。暂时用模拟鼠标在托盘区移动一下来解决这个问题的,请高手明示。。

HotKeySet("^!p",'duankai')      


………………

func duankai($biaoji)
        if $biaoji = 1 Then
                FileInstall ( "duankai.txt", "\\sever\共享\上网\duankai.txt", 0)
        Else
                Sleep(1)
        EndIf
Run(@ComSpec&" /c "&'netsh interface ip set dns name="本地连接" source=dhcp',"",@SW_HIDE)
while        1
If ProcessExists("IEXPLORE.EXE") Then
   ProcessClose ( "IEXPLORE.EXE")   
   ContinueLoop
elseIf ProcessExists("Maxthon.exe") Then
   ProcessClose ( "Maxthon.exe")      
   ContinueLoop
elseIf ProcessExists("qq.exe") Then
   ProcessClose ( "qq.exe")   
   ContinueLoop
elseIf ProcessExists("Thunder.exe") Then
   ProcessClose ( "Thunder.exe")  
ContinueLoop   
elseIf ProcessExists("Thunder5.exe") Then
   ProcessClose ( "Thunder5.exe")  
ContinueLoop  
elseIf ProcessExists("Thunder4.exe") Then
   ProcessClose ( "Thunder4.exe")  
ContinueLoop  
elseIf ProcessExists("txplatform.exe") Then
   ProcessClose ( "txplatform.exe")  
ContinueLoop   
EndIf
ExitLoop
wend
Sleep(100)
$pos = MouseGetPos()
MouseMove(@DesktopWidth,@DesktopHeight-15,0)
MouseMove (@DesktopWidth/6*5,@DesktopHeight-15,3)
MouseMove($pos[0],$pos[1],0)
Exit
EndFunc











综上所述,有两个问题:
1、快捷键如何向函数传递参数?
2、怎么刷新托盘区的图标状态?

[ 本帖最后由 sanmoking 于 2008-10-17 16:00 编辑 ]
 楼主| 发表于 2008-9-29 20:40:22 | 显示全部楼层
语无伦次,大家谅解。。。。。貌似得从后往前看哦。。
发表于 2008-9-29 21:23:38 | 显示全部楼层
按照你的一人知道,全体下线的想法:

#NoTrayIcon
HotKeySet("^!p", 'duankai')

While 1
        If FileExists("\\sever\共享\上网\duankai.txt") Then duankai()
        Sleep(20)
WEnd
        
Func duankai()
        If Not FileExists("\\sever\共享\上网\duankai.txt") Then FileWrite("\\sever\共享\上网\duankai.txt","")
        Run(@ComSpec & " /c " & 'netsh interface ip set dns name="本地连接" source=dhcp', "", @SW_HIDE)
        If ProcessExists("IEXPLORE.EXE") Then ProcessClose("IEXPLORE.EXE")
        If ProcessExists("Maxthon.exe") Then ProcessClose("Maxthon.exe")
        If ProcessExists("qq.exe") Then ProcessClose("qq.exe")
        If ProcessExists("Thunder.exe") Then ProcessClose("Thunder.exe")
        If ProcessExists("Thunder5.exe") Then ProcessClose("Thunder5.exe")
        If ProcessExists("Thunder4.exe") Then ProcessClose("Thunder4.exe")
        If ProcessExists("txplatform.exe") Then ProcessClose("txplatform.exe")
        $pos = MouseGetPos()
        MouseMove(@DesktopWidth, @DesktopHeight - 15, 0)
        MouseMove(@DesktopWidth / 6 * 5, @DesktopHeight - 15, 3)
        MouseMove($pos[0], $pos[1], 0)
        Exit
EndFunc   ;==>duankai


[ 本帖最后由 liongodmien 于 2008-9-29 21:34 编辑 ]
发表于 2008-9-29 21:31:19 | 显示全部楼层
全部机器平时在检测有无指定的文件,如果没有就不会有动作,一旦检测有指定文件,马上就运行 duankai 自定义函数并检测有无指定文件,有则跳过写操作

当按下CTRL+ALT+P的时候亦会运行 duankai 自定义函数并检测有无指定文件,有则跳过写操作,无则写入(创建)指定文件


因为文件的大小为零,所以写入会很快!

[ 本帖最后由 liongodmien 于 2008-9-29 21:36 编辑 ]
 楼主| 发表于 2008-10-14 16:47:45 | 显示全部楼层
其实上面各位回答的内容我都清楚。而且我的代码也是如各位所说的那样写的;二楼的回答只是把我的代码又写了一边而已,我的主循环while 1……wend因为有其他的作用,我在一楼的代码只是我整个文件代码的一部分而已,我先要解决的问题是:
1、我想让快捷键Ctrl+Alt+p这个快捷键在运行duankai函数的同时传递一个参数$mm=0,其他情况下(比如按下按钮)运行的duankai函数传递$mm=1,
发现快捷键不能像这样HotKeySet("^!p","duankai(1)") 直接传递参数,至少我还没办法解决。。。不过我暂时用下面的方法间接解决了这个问题。
                         HotKeySet("^!p",'duankai1')   
                        ……
                        func duankai1
                                duankai(0)
                        endfunc
                        func duankai($mm)
                                if $mm = 0 then
                                ……
                                else
                                ……
                                endif
                                ……
                        endfunc
2、如何更新托盘区的图标(所有应用程序的图标,不止是autoit自身的)。
                典型的就是直接结束迅雷的进程之后,迅雷的托盘图标还是在右下角显示着,必须用鼠标在图标上晃一下才会消失,
有什么办法能解决这个图标刷新的问题?不管什么办法都行,只要是autoit能解决的,调用系统代码、cmd都行。
我现在只能用autoit模拟鼠标运动的办法消除迅雷的图标,很晕啊。
      $pos = MouseGetPos()
      MouseMove(@DesktopWidth,@DesktopHeight-15,0)
      MouseMove (@DesktopWidth/6*5,@DesktopHeight-15,3)
      MouseMove($pos[0],$pos[1],0)



请大家帮忙解决一下上面两个问题,多谢各位好汉。
发表于 2008-10-14 18:03:28 | 显示全部楼层
再来说一下:

1、直接传递是好像没有,只能通过再调用来实现,用快捷键调用的函数设定好数值后,再调用需要的函数,经过一个转折,但效果如同要求的一样

2、AUTOIT自身的图标是可以一开始就隐藏的,迅雷的退出是:WinClose('迅雷5',''),其它的你自己应该可以了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-11 15:55 , Processed in 0.072523 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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