[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[技术讨论] 有趣的getobject

本帖最后由 jyswjjgdwtdtj 于 2024-9-21 15:32 编辑

关于wsh中的getobject函数 它不只只是wmi,与createobject相同的getobject("","wscript.shell")和获取已经开启的com 同时还有"script:","new:"等等script:可以在脚本中直接引用wsc文件作为对象 new:可以用clsid获得com的引用
但是看不到vbscript.dll的源代码 很让人苦恼啊 但是在.net的system.visualbasic.interaction类里有个一模一样的getobject() 经过我的测试 包括script,new都可以使用
大概长这个样子
  1.     public static object GetObject(string PathName = null, string Class = null)
  2.     {
  3.         if (Strings.Len(Class) == 0)
  4.         {
  5.             return Marshal.BindToMoniker(PathName);//似乎对应着script,new,wmi等
  6.         }
  7.         if (PathName == null)
  8.         {
  9.             return Marshal.GetActiveObject(Class);//获取已生成的com?不知道干嘛的
  10.         }
  11.         if (Strings.Len(PathName) == 0)
  12.         {
  13.             return Activator.CreateInstance(Type.GetTypeFromProgID(Class));//生成com
  14.         }
  15.         IPersistFile persistFile;//用pathname作为com生成的“参数”
  16.         persistFile = (IPersistFile)Marshal.GetActiveObject(Class);
  17.         persistFile.Load(PathName, 0);
  18.         return persistFile;
  19.     }
复制代码
但剩下的就是外部实现了……或许开源的.net core里会有
你好

返回列表