找回密码
 加入
搜索
查看: 6101|回复: 12

[系统综合] 求助,本人想写一个根据关键字关闭程序的代码,测试失败,已解决

  [复制链接]
发表于 2015-2-6 23:50:53 | 显示全部楼层 |阅读模式
本帖最后由 rhci 于 2015-2-9 15:26 编辑

代码如下:
#include <Misc.au3>
#include <Process.au3>
HotKeySet("!{ESC}", "ext")
While 1
        $INI = @ScriptDir & "\rh.ini"
        $tt1 = IniRead($INI, "t1", "cmd.exe", "")
        $tt2 = IniRead($INI, "t2", "iexplore.exe", "")
        $tt3 = IniRead($INI, "t3", "qq.exe", "")
        $tt4 = IniRead($INI, "t4", "pplive.exe", "")
        If FileExists($INI) Then
        Else
                IniWrite($INI, "t1", "命令提示符", "cmd.exe")
                IniWrite($INI, "t2", "武媚娘传奇", "iexplore.exe")
                IniWrite($INI, "t3", "腾讯QQ, "qq.exe")
                IniWrite($INI, "t4", "PPLIVE", "pplive.exe")
        EndIf
ProcessClose ( "&$tt1&")
ProcessClose ( "&$tt2&" )
ProcessClose ( "&$tt3&" )
ProcessClose ( "&$tt4&" )
        Sleep(1000) ;1000 等于1秒
WEnd
Func ext()
        Exit
EndFunc   ;==>ext
现在的问题是代码测试运行,不报错,但是不关闭程序.
求助,怎么修改才好。
如果我想完善,怎么才能达到读取ini文件中指定的关键字,比如
[t1]
命令提示符=cmd.exe
[t2]
武媚娘传奇=iexplore.exe
[t3]
腾讯QQ=qq.exe
[t4]
PPLIVE=pplive.exe
可手动定义进程
每60秒循环一次
发现关键字 就直接结束进程
。。那个高手能告诉我下,应该怎么做,最好能把代码贴出来,我刚开始学没多久,望理解。
发表于 2015-2-7 00:23:42 | 显示全部楼层
$tt1 = IniRead($INI, "t1", "cmd.exe", "")
换成
$tt1 = IniRead($INI, "t1", "命令提示符", "")
 楼主| 发表于 2015-2-7 09:18:13 | 显示全部楼层
按你的修改后
rh.ini文件内容如下:
[t1]
命令提示符=cmd.exe
[t2]
武媚娘传奇=iexplore.exe
[t3]
腾讯QQ=qq.exe
[t4]
PPLIVE=pplive.exe
可执行,但是不查杀进程
 楼主| 发表于 2015-2-7 09:27:04 | 显示全部楼层
怎么修改才能让ProcessClose这个函数查杀进程是
命令提示符=cmd.exe 中的cmd.exe这个呢?
发表于 2015-2-7 10:56:55 | 显示全部楼层
学习了,感谢分享!!
发表于 2015-2-7 13:57:57 | 显示全部楼层
ProcessClose ($tt1)
 楼主| 发表于 2015-2-7 15:10:53 | 显示全部楼层
找到办法了,更智能一些,之前的写的代码 等于白写,最新的代码如下
#NoTrayIcon
#region ;**** 参数创建于 ACNWrapper_GUI ****
#PRE_Icon=F:\lamox\vstart\rh\ico\group.ico
#PRE_Outfile=限制进程x32.exe
#PRE_Outfile_x64=限制进程x64.exe
#PRE_Compile_Both=y
#PRE_Res_Comment=AU3程序写入,发现关键字自动关闭程序
#PRE_Res_Description=关闭本程序快捷键为WIN+ESc
#PRE_Res_Fileversion=0.11
#PRE_Res_LegalCopyright=RX-rh开发,如有需要可联系我获取源码
#PRE_Res_requestedExecutionLevel=None
#PRE_Run_Tidy=y
#endregion ;**** 参数创建于 ACNWrapper_GUI ****
#include <Misc.au3>
#include <Process.au3>
HotKeySet("!{ESC}", "ext")
While 1
        $INI = @ScriptDir & "\rh.ini"
        IniRead($INI, "关键字", "武媚娘", "close")
        If FileExists($INI) Then
                rx()
        Else
                IniWrite($INI, "关键字", "武媚娘", "close")
                IniWrite($INI, "关键字", "锁定", "pclock")
                rx()
        EndIf
        rx()
        Sleep(5000) ;1000 等于1秒
WEnd
Func rx()
        $INI = IniReadSection(@ScriptDir & "\rh.ini", "关键字")
        If $INI = 1 Then
                MsgBox(4096, "", "错误, 读取INI文件失败,程序退出")
                Exit
        Else
                For $i = 1 To $INI[0][0]
                        If WinExists($INI[$i][0]) Then
                                If $INI[$i][1] = "close" Then
                                        WinKill($INI[$i][0])
                                EndIf
                                If $INI[$i][1] = "pclock" Then
                                        MsgBox(4, "", "因违反操作,本机将于10秒后锁定!", 5)
                                        Sleep(5000)
                                        Run(@ComSpec & " /c " & 'rundll32.exe user32.dll,LockWorkStation', "", @SW_HIDE)
                                EndIf
                        EndIf
                Next
        EndIf
EndFunc   ;==>rx

Func ext()
        Exit
EndFunc   ;==>ext
到这里,程序所需功能基本搞定,但是 有朋友说可以把 循环做成函数 用定时器调用
然后就不说了,我晕死 我是菜鸟啊 能搞定的话就不说那么多了,谁能给指导下
怎么把循环换成函数,怎么用定时器触发,最好是代码贴出来

最后 他告诉我 循环 费 CPU 不知道 是不是真的
 楼主| 发表于 2015-2-7 15:13:18 | 显示全部楼层
回复 6# zhouhaijin
我试试去,
 楼主| 发表于 2015-2-7 15:19:38 | 显示全部楼层
回复 6# zhouhaijin
我试试去,
这是按你的提示做的修改
#include <Misc.au3>
#include <Process.au3>
HotKeySet("!{ESC}", "ext")
While 1
        $INI = @ScriptDir & "\rh.ini"
        $tt1 = IniRead($INI, "t1", "命令提示符", "")
        $tt2 = IniRead($INI, "t2", "武媚娘传奇", "")
        $tt3 = IniRead($INI, "t3", "腾讯QQ", "")
        $tt4 = IniRead($INI, "t4", "PPLIVE", "")
        If FileExists($INI) Then
        Else
                IniWrite($INI, "t1", "命令提示符", "cmd.exe")
                IniWrite($INI, "t2", "武媚娘传奇", "iexplore.exe")
                IniWrite($INI, "t3", "腾讯QQ, ","qq.exe")
                IniWrite($INI, "t4", "PPLIVE", "pplive.exe")
        EndIf
ProcessClose ($tt1)
ProcessClose ($tt2)
ProcessClose ($tt3)
ProcessClose ($tt4)
        Sleep(1000) ;1000 等于1秒
WEnd
Func ext()
        Exit
EndFunc   ;==>ext
问题来了,直接打开不了IE 和我的想法 不同啊
发表于 2015-2-7 19:18:45 | 显示全部楼层
IniWrite($INI, "t2", "武媚娘传奇", "iexplore.exe");因为你也关IE进程
发表于 2015-2-7 19:28:51 | 显示全部楼层
回复 7# rhci


    不是真的,只是你的循环里调用了两次rx()上面那个判断已经调用一次,如果你不需要连续两次调用就不用加下面IF外的那个

你加了sleep跟定时器一样不需要外加
 楼主| 发表于 2015-2-9 15:25:32 | 显示全部楼层
#NoTrayIcon
#region ;**** 参数创建于 ACNWrapper_GUI ****
#PRE_Icon=F:\lamox\vstart\rh\ico\box.ico
#PRE_Outfile=pc32.exe
#PRE_Outfile_x64=pc64.exe
#PRE_Compression=4
#PRE_Compile_Both=y
#PRE_Res_Comment=AU3程序写入,发现关键字自动关闭程序
#PRE_Res_Description=关闭本程序快捷键为WIN+ESc
#PRE_Res_Fileversion=0.11.0.0
#PRE_Res_LegalCopyright=RX-rh开发,如有需要可联系我获取源码
#PRE_Res_requestedExecutionLevel=None
#PRE_Run_Tidy=y
#endregion ;**** 参数创建于 ACNWrapper_GUI ****
#include <Misc.au3>
#include <Process.au3>
HotKeySet("!{ESC}", "ext");退出快捷键为ALT+esc键
While 1
        $INI = @ScriptDir & "\rhc.ini"
        IniRead($INI, "关键字", "视频", "close")
        If FileExists($INI) Then
                rx()
        Else
                Local $hDownload = InetGet("http://rhci.vicp.cc/killset/rhc.ini", @ScriptDir & "\rhc.ini", 1, 1)
                Do
                        Sleep(250)
                Until InetGetInfo($hDownload, 2) ; 检查下载是否完成.
                InetClose($hDownload) ; 关闭句柄,释放资源.
                rx()
        EndIf
        Sleep(2000) ;1000 等于1秒
WEnd
Func rx()
        $INI = IniReadSection(@ScriptDir & "\rhc.ini", "关键字")
        If $INI = 1 Then
                IniWrite(@ScriptDir & "\rhc.ini", "关键字", "视频", "close")
                IniWrite(@ScriptDir & "\rhc.ini", "关键字", "锁定", "pclock")
                IniWrite(@ScriptDir & "\rhc.ini", "关键字", "重启", "reboot")
                IniWrite(@ScriptDir & "\rhc.ini", "关键字", "关机", "powred")
                MsgBox(64, "提示", " 首次生成配置文件,请按格式写入文件,并保存")
                Sleep(250)
                ShellExecute("rhc.ini", "", @ScriptDir, "edit"); 打开配置文件并编辑
                Exit
        Else
                For $i = 1 To $INI[0][0]
                        If WinExists($INI[$i][0]) Then
                                If $INI[$i][1] = "close" Then
                                        WinKill($INI[$i][0])
                                EndIf
                                If $INI[$i][1] = "pclock" Then
                                        MsgBox(4, "", "因违反操作,本机将于10秒后锁定!", 5)
                                        Sleep(5000)
                                        Run(@ComSpec & " /c " & 'rundll32.exe user32.dll,LockWorkStation', "", @SW_HIDE)
                                EndIf
                                If $INI[$i][1] = "reboot" Then
                                        MsgBox(4, "提醒", "本机将于30秒后重启!", 30)
                                        Shutdown(6)
                                EndIf
                                If $INI[$i][1] = "powred" Then
                                        MsgBox(4, "提醒", "本机将于30秒后关机!", 30)
                                        Shutdown(5)
                                EndIf
                        EndIf
                Next
        EndIf
EndFunc   ;==>rx

Func ext()
        Exit
EndFunc   ;==>ext
只能说这些,仁者见仁,智者见智,源码就这,至于你拿去做啥,我就管不到了
 楼主| 发表于 2015-2-9 15:25:49 | 显示全部楼层
还有 本帖终结
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 16:35 , Processed in 0.086157 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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