VBS 如何获取指定进程的服务(详细信息)

VBS 如何获取指定进程的服务(详细信息),第1张

dim src,i,info,sum

set src=getobject( "winmgmts:root/cimv2" )execquery("select from win32_service" )

set fso=createobject("scriptingfilesystemobject")

for each i in src

sum=clng(30-len(iname)+len(istate))

info=info&iname&string(sum,chr(32))&istate&chr(13)

next

if right(info,1)=chr(13) then info=left(info,len(info)-1)

fsocreatetextfile("save_Servicesinfotxt")write info

你可以自己需要知道的进程名 自己照着定义一个 试试 到时候直接指定oid来获取 比如java 不过这样的方法我没有试过

:exec 136141202152 ps /bin/ps -ef | /bin/grep java

然后

snmpget -v 2c -c public 172172102 136141202152

1获取系统的可用内存和总内存。

获取系统内存中应用的信息,需要用到ActivityManager这个类,然而当你用这个类拿数据的时候你会发现,拿到的数据不正确。用这个类的API获取系统的总内存和可用内存会出现数据不正确的情况。除了这个类,Android手机中有文件描述了这些信息——/proc/meminfo。meminfo文件中详细的记录了安卓手机的一些数据,包括可用内存和总内存。附上代码:

public static long getTotalMemSize() {

long size=0;

File file = new File("/proc/meminfo");

try {

BufferedReader buffer = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

String memInfo = bufferreadLine();

int startIndex = memInfoindexOf(":");

int endIndex = memInfoindexOf("k");

memInfo = memInfosubstring(startIndex + 1, endIndex)trim();

size = LongparseLong(memInfo);

size = 1024;

bufferclose();

} catch (javaioIOException e) {

eprintStackTrace();

}

return size;

}

public static long getAviableMemSize() {

long size=0;

File file = new File("/proc/meminfo");

try {

BufferedReader buffer = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

String memInfos=new String();

int i=0;

while ((memInfos=bufferreadLine())!=null){

i++;

if (i==2){

memInfo = memInfos;

}

}

int startIndex = memInfoindexOf(":");

int endIndex = memInfoindexOf("k");

memInfo = memInfosubstring(startIndex + 1, endIndex)trim();

size = LongparseLong(memInfo);

size = 1024;

bufferclose();

} catch (javaioIOException e) {

eprintStackTrace();

}

return size;

}

*** 作很简单分别是读取第一行的数据和第二行的数据,将字符串分去出,将所得值乘以1024变为byte类型。

2获取内存中运行应用的信息

首先,自然要有一个Bean文件用于存储这些信息,之后通过ActivityManager的getRunningAppProcesses()方法得到一个RunningAppProcessInfo的List。便利这个List去除我们想要的数据,存在我们的Bean文件夹中。

public static List<TaskBean> getAllTask() {

List<TaskBean>taskList=new ArrayList<>();

List<ActivityManagerRunningAppProcessInfo>runList=UIUtilsgetActManager()getRunningAppProcesses();

try {

for (ActivityManagerRunningAppProcessInfo r:runList) {

TaskBean taskBean = new TaskBean();

String processName = rprocessName;

taskBeansetPackageName(processName);

PackageInfo packageInfo = UIUtilsgetPacManager()getPackageInfo(processName, 0);

taskBeansetIcon(packageInfoapplicationInfoloadIcon(UIUtilsgetPacManager()));

taskBeansetName(packageInfoapplicationInfoloadLabel(UIUtilsgetPacManager())toString());

DebugMemoryInfo[] processInfo=UIUtilsgetActManager()getProcessMemoryInfo(new int[]{rpid});

taskBeansetMemSize(processInfo[0]getTotalPrivateDirty()1024);

if ((packageInfoapplicationInfoflags&ApplicationInfoFLAG_SYSTEM)!=0){

taskBeansetSystem(true);

}else {

taskBeansetUser(true);

}

if (taskList != null) {

taskListadd(taskBean);

for (int i=0;i<taskListsize();i++) {

if (taskListget(i)getPackageName()equals(ConstantsPACKAGE_INFO)){

taskListremove(i);

}

}

}

}

} catch (PackageManagerNameNotFoundException e) {

eprintStackTrace();

}

return taskList;

}

好了,大功告成。当你开开心心的拿到手机上调试的时候你会发现,一个数据都没有。原来,在Android50之后,谷歌处于完全考虑已经弃用了通过如上方法拿到进程中的信息。那么又应该怎么做呢?

public static List<TaskBean> getTaskInfos() {

List<AndroidAppProcess> processInfos = ProcessManagergetRunningAppProcesses();

List<TaskBean> taskinfos = new ArrayList<TaskBean>();

// 遍历运行的程序,并且获取其中的信息

for (AndroidAppProcess processInfo : processInfos) {

TaskBean taskinfo = new TaskBean();

// 应用程序的包名

String packname = processInfoname;

taskinfosetPackageName(packname);

// 湖区应用程序的内存 信息

androidosDebugMemoryInfo[] memoryInfos = UIUtilsgetActManager()

getProcessMemoryInfo(new int[] { processInfopid });

long memsize = memoryInfos[0]getTotalPrivateDirty() 1024L;

taskinfosetMemSize(memsize);

taskinfosetPackageName(processInfogetPackageName());

try {

// 获取应用程序信息

ApplicationInfo applicationInfo = UIUtilsgetPacManager()getApplicationInfo(

packname, 0);

Drawable icon = applicationInfoloadIcon(UIUtilsgetPacManager());

taskinfosetIcon(icon);

String name = applicationInfoloadLabel(UIUtilsgetPacManager())toString();

taskinfosetName(name);

if ((applicationInfoflags & ApplicationInfoFLAG_SYSTEM) == 0) {

// 用户进程

taskinfosetUser(true);

} else {

// 系统进程

taskinfosetSystem(true);

}

} catch (PackageManagerNameNotFoundException e) {

// TODO Auto-generated catch block

eprintStackTrace();

// 系统内核进程 没有名称

taskinfosetName(packname);

Drawable icon = UIUtilsgetContext()getResources()getDrawable(

Rdrawableic_launcher);

taskinfosetIcon(icon);

}

if (taskinfo != null) {

taskinfosadd(taskinfo);

for (int i=0;i<taskinfossize();i++) {

if (taskinfosget(i)getPackageName()equals(ConstantsPACKAGE_INFO)){

taskinfosremove(i);

}

}

}

}

return taskinfos;

}

好了,接下来只需要判断安装的版本就可以了:

int sysVersion = IntegerparseInt(BuildVERSIONSDK);

taskList = sysVersion > 21 TaskManagerEnginegetTaskInfos() : TaskManagerEnginegetAllTask();

好了,大功告成。数据就能正常拿到了。

把虚线里代码全部复制进去,,,,

==========================================================

版本 2

支持库 eAPI

局部变量 进程信息, 进程信息, , "0"

局部变量 计次, 整数型

进程信息 = 取系统进程列表 ()

计次循环首 (取数组成员数 (进程信息), 计次)

如果真 (到大写 (进程信息 [计次]进程名称) = “QQEXE”)

编辑框1内容 = 到文本 (进程信息 [计次]进程标识符)

如果真结束

计次循环尾 ()

================================================================

代码要注释哈谢谢

答合理给50

用NtQueryInformationProcess可以查询单个进程的句柄数 但是要打开进程

用NtQuerySystemInformation可以获取所有进程的统计信息,而且没有任何权限要求

这个用一个api就可以解决,你用pdh涉及到的更多

通过  取系统进程列表() 命令取出所有进程,然后在其中找出你想获取的进程名,就可以取出相应的进程ID。刚刚写了一个   取进程名+取进程ID  的小程序,纯手打,源码很简单,就几行,应该很好理解,如果还有不明白的可以追问,我在线解决,谢谢。

以上就是关于VBS 如何获取指定进程的服务(详细信息)全部的内容,包括:VBS 如何获取指定进程的服务(详细信息)、怎么通过snmp获取远程主机指定进程信息、如何获取android 进程信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/10135152.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存