WMI 代码创建器 for Windows Forms for VB.NET
这是一个用于创建代码的项目,类似于 WMI 代码创建器,但输出是用于 VB.NET 和 Windows Forms,而不是用于控制台应用程序。
项目原因
任何使用过 WMI 代码创建器的人都知道它能多么快速地开始工作。由于我使用 WMI 的大部分程序都是 Windows Forms,因此使用 WMI 代码创建器中选定的属性创建代码,然后将该代码移植到 Windows Forms 风格的应用程序中,变得越来越耗时。
所以我决定看看是否可以自己构建代码创建器以加快构建速度。当有 15 个属性时,需要花费很多时间,并且要确保拼写正确,否则会出现“未找到”错误,因为属性名称拼写错误。
这个项目仍在进行中。有一些已知问题。
已知问题
如果您在启用了 UAC 的 Windows Vista 系统上启动程序,然后单击 EXE 或单击 IDE 中的运行按钮,则主窗体加载大约需要 60 秒,而如果右键单击并从“Release”文件夹中选择“以管理员身份运行”则大约需要 4 秒。
如果启用了 UAC,您可能需要以管理员身份运行代码创建器,否则可能会出错。我还没有添加任何代码进行自动提升。
(有些东西一直在重新启用我的 UAC,我还在调查这个问题。)
并非所有类都返回信息。
当前版本仅适用于文本框输出。我仍在努力实现数据网格视图和列表框的输出能力。
更新
- 2012 年 5 月 6 日:现在支持
datagrid
视图和listbox
程序构建
我首先查看了 WMI 代码创建器,希望保留该程序的一些相同风格。
我的第一个版本有一个复选列表框,但您需要双击才能选择每个属性。所以后来我将其更改为普通的列表框。单击一次即可。
然后我使用了富文本框,但您无法获得即时右键单击复制功能,所以我将其更改为普通的文本框(在测试时必须使用 CTL+C 来完成)。
我从以前的项目中借用了代码来填充命名空间和类。
代码格式化是一个查找普通程序代码,然后查看如何显示代码创建器输出的过程(大量的试错)。
我遇到的另一个问题是将属性加载到列表框中。第一个版本会弹出“未找到
”错误,花了些时间才弄清楚它找不到类,如果它不是 CimV2
类,而不是通常弹出该错误属性名称。所以我回到了 MSDN 网站的 System.Management
,并从中找到了解决方案。(请参阅下载中的项目代码以更好地理解。)
在我构建它的过程中,我不得不将其视为两组不同的代码。第一组用于构建输出的字符串
,第二组用于输出的显示方式。
我遇到的一个问题是,输出需要用双引号括起来的地方,快速的互联网搜索将我引向了正确的方向,但没有给出确切的答案。
答案是这样做
strbuilder.AppendLine(ChrW(34) & "SELECT * FROM " & SCL.ToString & ChrW(34) & ")")
要在输出框中获得此内容
"SELECT * FROM CIM_CDROMDrive")
这是当前版本的外观
使用程序
要使用此程序,请右键单击并以管理员身份运行(以避免一些问题)。
闪屏关闭后,主窗体将打开,并且 Namespace
列表将填充。
选择一个 namespace
,然后 Classes 列表将填充。上面的数字表示找到的类或命名空间的数量(还需要在这部分进行改进)。
选择一个类后,列表框将填充属性。通过单击它们来选择所需的属性(除非您的按钮反转),如果属性名称突出显示,则表示已选择。您可以再次单击以取消选择。(列表框属性页中的 select
方法是多选的。)
然后只需单击“创建代码”按钮,输出文本框将填充。
下一篇
创建一个项目,向新窗体添加一个按钮控件和一个文本框。命名您的按钮并设置其文本。
然后,在 textbox
上,将其设置为多行并调整其大小以适应您的窗体。接下来设置 textbox
属性。
对我而言,我,
- 在设置
textbox
的大小后,将 Anchor 设置为所有 4 个方向(这样文本框会在窗体大小调整时增长或缩小) - 将字体大小更改为 10,以适应更高分辨率的屏幕。
- 将滚动条设置为两者(这样可以解决以后出现内容不匹配的问题)
- 将自动换行设置为
false
(有时输出换行会令人困惑)
下一篇
如果您想为程序使用 onload
事件,请双击窗体以创建它。我更喜欢在代码顶部放置我的事件。
然后单击您的按钮控件以获取其处理程序。
下一篇
在“Public Class Form1
”上方留出一些空间来添加 Import
语句。
然后,将 Import
语句从代码创建器复制到您刚创建的区域。
然后,为 Import
语句添加引用。(现在添加它们可以消除下一步中出现的波浪线。)
下一篇
将代码创建器中的代码复制到按钮点击处理程序中。
从:“Dim strbuilder As New StringBuilder
”开始
结束于
MessageBox.Show("An error occurred while querying for WMI data:"& err.Message)
End Try
下一篇
如果您的程序(Class
)使用 DTMF 日期时间(输出看起来像这样,未经转换:20120426215915.359000-300
),则复制将其转换为正常日期/时间的函数。我将包含一个 Program
来展示如何使用该函数。并非所有类都使用这种形式的日期,您可能不需要添加该函数。(当我在 TS 应用程序中为该应用程序添加它时,它会出错,了解输出应该是什么样子很有帮助。)
只要没有错误,就可以构建并运行您的新程序。
根据需要进行调整 :)
再次声明,这些是管理程序,如果您运行的是 Vista 或更高版本并且遇到初始化错误,请右键单击并以管理员身份运行该程序。
结论
再次声明,并非所有类都会返回信息,您可能想在构建新应用程序之前使用以下应用程序之一来查看返回的内容,并帮助选择您可能想使用的任何属性。有些属性名称永远不会返回任何内容,因此没有必要用额外的属性名称来充斥您的输出。所选类也可能根本不返回任何内容。
要测试的程序
WMI 代码创建器、Scriptomatic
2.0,或者我将在单独下载中添加的 ClassNFOMatic24.HTA
。我的 ClassNFOMatic24.HTA
是 Scriptomatic
2.0 的高度修改版本,它将列出所有类。我也会在这个下载中添加一个注册表文件,用于为 HTA 添加右键单击“以管理员身份运行”。
使用代码创建器完成的示例应用程序大约需要 20 分钟或更少。
请告诉我您对此的看法。找到时间后,我会完成其余部分。
参考文献
MSDN
- ManagementBaseObject.SystemProperties
- ManagementDateTimeConverter.ToDateTime
- ManagementObject.Path 属性
- ManagementPath 类
- Win32_TSAccount 类
- 在字符串中使用双引号
其他链接
下载次数
- Scriptomatic 2.0 下载
- WMI 代码创建器 v1.0 链接到 CNet Download.com (不再提供 Microsoft 下载)
- 我 SkyDrive 中的示例文件
- (我 SkyDrive 上的文件名:ClassNFOMatic24.zip, GUI WMI exe file.zip, GUIWMI Project FIles.zip, SampleAppProjectFiles.zip, SampleApps-exes.zip
最新的项目文件名是
- GUI WMI 代码创建器-1.4.2.8.zip (仅新的 EXE 文件)
- GUI_WMI_Code_Creator_1418_Project.zip
最新更新
- 更新 2012 年 9 月 19 日
- 使用 VS 2012 Pro (试用版) (仍为 VB.NET) 转换了项目并添加到下载中
- 更新 2012 年 9 月 11 日
- 更新了 Microsoft WMI 代码创建器的链接
- 现在指向 Download.com,之前指向 Microsoft 下载
- 更新 2012 年 8 月 16 日
- 新版本 1.4.2.9
- 添加了需要管理员权限的说明,已将文件上传到 Code Project。
- 更新 2012 年 5 月 23 日
- 新版本 1.4.2.8
- 在 convert date 函数中添加了一个
If
语句来处理遇到null
日期时的错误。现在,对于null
日期将返回 N/A。 - 仅在文本框版本中,实现了处理 ArrayList 和日期/时间的代码
- 这样用户就不用添加这部分了,如果选择了那种类型的属性。现在更像 scriptomatic 了
- 上面列出了 EXE 文件的文件名。现在可以从 skydrive 下载
- 更新 2012 年 5 月 9 日
- 有一些格式问题,我为所有的更新向大家道歉
- 最新版本:1.4.1.8 2012 年 5 月 6 日
- 初始程序版本是 1.4.1.0 日期:2012 年 5 月 5 日