找回密码
 加入
搜索
查看: 8496|回复: 8

[系统综合] 如何查找数组里面的数据

  [复制链接]
发表于 2015-1-13 23:42:31 | 显示全部楼层 |阅读模式
前几天发贴咨询如何获取进程描述,有高手已经回复了,可用代码
#include <Array.au3>
Local $List = ProcessList()   ;返回当前运行进程的名称和 PID 值的数组.
For $i = 1 To $List[0][0]
        $List[$i][1] = FileGetVersion($List[$i][0], "FileDescription")
Next
_ArrayDisplay($List,"显示进程数组",Default,32,Default,"进程名|描述")
现在又遇到一个新问题了,上面代码得到一个数组,里面包含进程名和描述

我想要根据描述结束某个进程,那么,我会定义一个变量赋值为将要结束的进程

比如
dim $killprocess="任务管理器"
那么我就需要在这个数组里面进行搜索匹配的值

我查看了帮助文档,有三个命令可能查找  _ArraySearch、_ArrayFindAll、_ArrayBinarySearch

好像未能成功,只能根据二进制来查找吗?

然后我使用
StringToBinary("任务管理器")
转换为二进制,再用
_ArrayBinarySearch($List,$killprocess)
查找,得到的结果是-1


请问,数组里面的数据不能查找中文吗?看帮助文档里面示例都是查找的数字

另外,还有一种办法,用
_ArrayToString
可以把数组内容导出为字符串,这样就不好定位进程名字


请高手解惑,TKS

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2015-1-14 00:01:38 | 显示全部楼层
已经检索过,同时标记下,或当时立即结束进程不就行了?何必之后再去搜索一遍
#include <Array.au3>

Local $killprocess = '任务管理器'
Local $killprocessList = ''
Local $aList = ProcessList() ;返回当前运行进程的名称和 PID 值的数组.
ReDim $aList[$aList[0][0] + 1][3]
For $i = 1 To $aList[0][0]
        $aList[$i][2] = FileGetVersion($aList[$i][0], 'FileDescription')
        If $aList[$i][2] == $killprocess Then $killprocessList &= $aList[$i][1] & '|'
Next
_ArrayDisplay($aList, '显示进程数组', -1, 0, '', '进程名|描述')

If $killprocessList = '' Then Exit
MsgBox(0, '', $killprocessList)
Local $aPid = StringRegExp($killprocessList, '\d+', 3)
For $i = 0 To UBound($aPid) - 1
        ;ProcessClose($aPid[$i])        ;结束进程
Next

评分

参与人数 1金钱 +10 收起 理由
jmdfwy + 10 太给力了

查看全部评分

 楼主| 发表于 2015-1-14 00:55:45 | 显示全部楼层
回复 2# afan


    非常感谢超级版主给力的回复

ReDim 这个关键字有些不懂

查看官方文档,注释是调整现有数组大小

按官方示例来说
ReDim $aList[$aList[0][0] + 1]
这句代码就已经数组加1了,为何版主后面还带了个[3]呢?

另外,这个+1是增加的行或者列?还是行和列同时加1?
发表于 2015-1-14 01:13:08 | 显示全部楼层
回复 3# jmdfwy


    +1 才和原数组的元素数量一致,因为是在[0][0]基数上加的,实际等同于 UBound(原数组)
后面的[3]是调整的第二维的维数,即列数,原数组为2,调整为3,以装载新数据

其实就本例目的而言,这些都是多余的,只是为了调试,显示出来看看而已
发表于 2015-1-14 09:05:23 | 显示全部楼层
本帖最后由 tvzml 于 2015-1-14 09:08 编辑


#include <Array.au3>
Local $killprocess = '任务管理器'
Local $killprocessList = ''
Local $aList = ProcessList() ;返回当前运行进程的名称和 PID 值的数组.
ReDim $aList[$aList[0][0] + 1][3]
For $i = 1 To $aList[0][0]
        $aList[$i][2] = FileGetVersion($aList[$i][0], 'FileDescription')
        If $aList[$i][2] == $killprocess Then $killprocessList &= $aList[$i][1] & '|'
Next
_ArrayDisplay($aList, '显示进程数组', -1, 0, '', '进程名|PID|描述')
Local $SO = _ArrayFindAll($aList, "描述关键字", 0, 0, 0, 0, 2)
If IsArray($SO) Then
        ProcessClose($aList[$SO[0]][1]) ;结束进程
EndIf



绝对匹配查找,如果存在多个结果,请处理好数组即可!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2015-1-14 14:45:39 | 显示全部楼层
FileGetVersion 这个关键字,好像不能完全获取想要的信息

上面代码中,只能获取部分程序的描述,但是在任务管理器里面,所有进程都有描述的。。。

请问,有啥解决办法不?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2015-1-14 15:38:26 | 显示全部楼层
支持下,学习学习·
发表于 2015-1-14 21:36:36 | 显示全部楼层
谢谢分享。。。。。。。。
发表于 2015-1-15 09:08:56 | 显示全部楼层
学习学习。。。。。。。。。。。。。。。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 12:36 , Processed in 0.208554 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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