找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 641|回复: 9

[求助] 关于VBS中的GetObject("WinMgmts:")获取系统进程,翻译成lisp的问题

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-12-5 22:10:34 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Dim WMI,objs
Set WMI = GetObject("WinMgmts:")
Set objs = WMI.InstancesOf("Win32_Process")
For Each obj In objs
Enum1 = Enum1 + obj.Description + Chr(13) + Chr(10)
Next
msgbox Enum1

在网上查到了上面这段VBS代码。存为VBS后缀名的文件后可获取进程列表。
不会vbs本想着看着不难,查查资料应该能翻译成lisp,但奈何太菜,第一句就出问题了。

(vlax-get-or-create-object "winmgmts:")始终返回nil。不知道是怎么回事,望大神指教!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-12-5 22:20:19 | 显示全部楼层
用 WMI 搜索论坛,有现成的函数
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-12-5 22:32:56 来自手机 | 显示全部楼层
newer 发表于 2017-12-5 22:20

不太懂这个,如果可以的话能不能帮忙给个链接啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-12-5 23:05:53 | 显示全部楼层
你就是论坛上面搜索框里面输入  WMI ,然后点搜索,就看到很多了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-12-6 09:25:34 来自手机 | 显示全部楼层
newer 发表于 2017-12-5 23:05

刚看了您的大作,还在学习中。非常感谢您的指点!



另外弱弱的问一句 "WinMgmts: 和 "WbemScripting.SWbemLocator"  有区别么,和您说的WMI都是什么关系?为什么获取的不一样,结果一样啊?



问题很小白,但百度半天也没搞清楚,望大神解答

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-12-6 10:13:16 来自手机 | 显示全部楼层
newer 发表于 2017-12-5 23:05

还有最后一个问题。我用您帖子给的代码:
(setq WMI (vlax-create-object "WbemScripting.SWbemLocator"))
(setq meth1 (VLAX-INVOKE WMI 'ConnectServer nil nil nil nil nil nil nil nil))
(setq meth2 (vlax-invoke meth1 'ExecQuery "select * from win32_diskdrive"))
是可以获取信息的,进程也可以获取。

但我想用(setq meth2 (vlax-invoke meth1 'ExecQuery "select * form Win32_Process where name='EXCEL.EXE'"))
来杀掉excel进程为什么不可以啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-6 12:22:09 | 显示全部楼层
VLISP可以直接执行VBS的代码,看下面例子,读取CPU序列号,就是用你提的 Winmgmts:

  1. (defun ProcessorID (/ ID USERS4)
  2.   (vl-load-com)
  3.   (setq users4 (getvar "users4"))
  4.   (vla-eval (vlax-get-acad-object)
  5.             (strcat
  6.                  "set colInstances = GetObject(\"Winmgmts:\").ExecQuery(\"Select * from Win32_Processor\")" ":"
  7.                  "id = \"\"" ":"
  8.                  "For each objInstance in colInstances" ":"
  9.                  "id = id & objInstance.ProcessorId" ":"
  10.                  "next" ":"
  11.                  "ThisDrawing.SetVariable \"USERS4\", id"
  12.                  )
  13.            )
  14.   (setq ID (getvar "users4"))
  15.   (setvar "users4" users4)
  16.   id
  17. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-12-6 14:25:08 来自手机 | 显示全部楼层
marting 发表于 2017-12-6 12:22

还可以这样?谢谢谢谢。我研究下。
还有,还是想问下那个问题,这WinMgmts 和 WbemScripting.SWbemLocator 有什么区别啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-12-6 19:20:38 | 显示全部楼层

不同的两个接口。都可以对WMI进行查询。


WMI脚本对象模型
    为了在脚本中使用WMI特性,需要在WMI脚本类型库(称为WbemScripting)例示一个对象.同WScript用作WSH模型的一个入口点一样,
    WbemScripting用于提供对各种WMI脚本API接口的访问.


winmgmt指的是计算机中的一种进程。WinMgmt.exe是Windows管理服务。用于系统管理员创建WIndows管理脚本。

Windows Management Service透过Windows Management Instrumentation data (WMI)技术处理来自应用客户端的请求。winmgmt是Windows 2000客户端管理的核心组件。当客户端应用程序连接或当管理程序需要他本身的服务时这个进程初始化。WinMgmt.exe(CIM对象管理器)和知识库(Repository)是WMI两个主要构成部分,其中知识库是对象定义的数据库,它是存储所有可管理静态数据的中心数据库,对象管理器负责处理知识库中对象的收集和操作并从WMI提供程序收集信息。WinMgmt.exe在Windows 2000/NT上作为一个服务运行,而在Windows 95/98上作为一个独立的exe程序运行。Windows 2000系统在某些计算机上出现的WMI错误可以通过安装Windows 2000 SP2来修正。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-12-8 00:24:32 | 显示全部楼层

话说好复杂,其实就想用SWbemServer 的 Terminate 方法结束个进程。居然好处这么多东西,这下有的学了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-23 22:26 , Processed in 0.387838 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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