找回密码
 加入
搜索
查看: 6678|回复: 15

如何根据进程名退出进程

[复制链接]
发表于 2009-4-25 14:46:29 | 显示全部楼层 |阅读模式
ProcessClose是强制结束进程,那如何根据进程名退出进程,从而保存设置。
在dircmd中就有closeprocess和killprocess的区别。
发表于 2009-4-25 22:49:53 | 显示全部楼层
说说个人想法:
1.先看懂三恨发的此文章http://www.autoitx.com/forum.php ... &extra=page%3D5
2.在1的基础上增加一个txt或ini作为自定义进程白名单和黑名单
3.获取所有进程并对比2的txt或ini
4.符合黑名单的就ProcessClose
发表于 2009-4-25 22:50:41 | 显示全部楼层
本帖最后由 lynfr8 于 2009-4-25 23:02 编辑

至于你说的保存设置
不好意思
不是很明白你的意图
是否要达到这样的效果:
【给出原帖,希望对你有借鉴作用】
http://www.autoitx.com/forum.php?mod=viewthread&tid=42
对窗口进程进行监控的代码

设置脚本在遇到严重错误时是否自动终止1=致命错误, 0=静默错文字误,设置 @error
;(此命令说明发生错误时不中止程序运行)
Opt("RunErrorsFatal", 0)
;更改窗口函数在执行搜索操作时的标题匹配模式。
;1=只匹配标题的前面部分(默认), 2=标题的任意子串皆可匹配,3=完全匹配标题,
;(此命令说明查找关键字时,只要有一个匹配时,就生效)
Opt("WinTitleMatchMode", 2)
;隐藏 AutoIt 托盘图标。注意:托盘图标仍会在程序刚运行时出现大约 750 毫秒。
;0 = 显示托盘图标(默认),1 = 隐藏托盘图标
;(此命令说明程序运行时托盘上的图标不会显示)
Opt("TrayIconHide", 1)
;设置一个可调用某用户函数的热键。
;(此命令为按下f12程序退出)
HotkeySet("!^{F12}", "exit_0");
;定义配置文件sysfile.ini中的窗口标题$inikey="windows"
While 1
;等待80毫秒
Sleep(80)
;IniReadSection从某标准配置文件(*.ini)中读取某个节中的所有关键词或值。
;@scriptdir当前运行中的脚本所在的目录
;此命令表示从当前程序所在目录读取sysfile.ini文件中的windows的值
$var = IniReadSection(@ScriptDir&"\sysfile.ini", $inikey)
;如果找不到窗口windows的值.就输出no ini file,程序将退出
If @error Then
MsgBox(4096, "", "no INI file.")
Exit
;如果找到窗口windows的值,就关闭该窗口
Else
For $i = 1 To $var[0][]
  If $inikey="windows" Then
;如果目标窗口确实存在,就关闭这个窗口
  If WinExists($var[$i][0]) then WinClose($var[$i][0])
;配置文件中的proc项
  ElseIf $inikey="proc" Then
;读取proc中的进程名,如果存在,就关闭
If ProcessExists($var[$i][0]) Then ProcessClose($var[$i][0])
;读取proc中的进程名
  ElseIf $inikey="lock" Then
;如果没有找到这个进程名,就运行该进程
  If Not ProcessExists($var[$i][0]) Then
;运行该进程@SW_HIDE = 隐藏窗口
  Run($var[$i][1],"",@SW_HIDE)
;如果windows下不能运行这程序,使用运行 DOS(控制台)命令:comspec
  If @error Then Run(@ComSpec & " /c " & $var[$i][1], "", @SW_HIDE)
  EndIf
  EndIf
Next
EndIf
;如果顺利执行$inikey="windows",就执行$inikey="proc"
If $inikey="windows" Then
$inikey="proc"
;重新开始循环
ContinueLoop
ElseIf $inikey="proc" Then
$inikey="lock"
;重新开始循环
ContinueLoop
ElseIf $inikey="lock" Then
$inikey="windows"
 EndIf
;和上面的winle 1配合,如果中间的过程为真,那么就一直重复执行循环
WEnd
;按下f12就退出程序Func exit_0()
exit
EndFunc



sysfile.ini   :

[windows]
Dow=这填上说明
[proc]
BitComet.exe=BT下载工具
[lock]
qq.exe=C:\qq2006\QQ.exe


windows: 是需要查杀的窗口名称,可以输入窗口名称的一部份

proc: 是需要查杀的进程名称,这个必须要完整名称

lock   是用来防止进程中断用的,当发现左边进程不存在时就会运行右边的exe文件,,   左边是进程名称 右边是进程详细资料
发表于 2009-4-25 22:50:49 | 显示全部楼层
等高手解决吧
发表于 2009-4-25 23:33:37 | 显示全部楼层
不是的。
CloseProcess是向进程发送一个关闭事件,等待进程自己处理退出。KillProcess是直接杀掉进程。
这可能需要用API来弄,我也不会。。。
不过我有一个间接办法:查找进程主窗口,用WinClose向窗口发送一个关闭事件。
发表于 2009-4-26 00:09:34 | 显示全部楼层

Re 5L:

CloseProcess是向进程发送一个关闭事件,等待进程自己处理退出。


sensel兄可否说下哪个程序用到了CloseProcess这个函数?向进程发送关闭事件,对这个感兴趣~
发表于 2009-4-26 00:45:38 | 显示全部楼层
sensel兄可否说下哪个程序用到了CloseProcess这个函数?向进程发送关闭事件,对这个感兴趣~
pusofalse 发表于 2009-4-26 00:09


额,,,因为几个进程相关的命令行工具都有Close这个功能,我还以为存在这个函数。。。如果连你都说不知道,那肯定是没有的了。。。真是抱歉。
发表于 2009-4-26 00:54:29 | 显示全部楼层

Re 7L:

本帖最后由 pusofalse 于 2009-4-26 00:56 编辑

那可以说下是哪些个命令行工具有此close的功能吗?说下工具名称,我下载下来钻研一下~
发表于 2009-4-26 01:04:25 | 显示全部楼层
发表于 2009-4-26 01:09:37 | 显示全部楼层
re 9L:
谢谢~!
 楼主| 发表于 2009-4-26 10:02:00 | 显示全部楼层
nircmd的closeprocess是向顶层窗口进程发送WM_CLOSE消息,除了病毒,多数进程应该CLOSE而不适合KILL,希望高手们分析一下。
发表于 2009-4-26 13:55:29 | 显示全部楼层
顶起来,让三恨来瞧瞧
 楼主| 发表于 2009-4-28 15:29:28 | 显示全部楼层
通过其他的途径也是可以退出的,有的是窗口、有的是托盘,总感觉根据进程退出简洁些。
发表于 2009-5-3 16:38:18 | 显示全部楼层
if ProcessExists("tipsextend.exe")Then
        RunWait(@ComSpec & ' /c taskkill /F /IM tipsextend.exe', @SystemDir, @SW_HIDE)
EndIf
发表于 2009-5-3 17:32:17 | 显示全部楼层
taskkill就是ProcessClose,你愿意的话用TerminateProcess也成。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 08:20 , Processed in 0.136211 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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