关于WMI~~~,找sanmaotuo(老冯)...... Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiAPI/html/delphi_20061122164538183.html
sanmaotuo(老冯) 呵呵,刚才以为没有人顶帖子了,就结了,继续请教中
没有关系,老水好梗直!
我不过用了另外一种方法来获取运行的应用程序列表。这个方法里面包含了很多有用的东西
特别是如何实现FOR EACH 这种在DELPHI中所不具有的语句以及如何操纵COM。
关于WMI它的全程是Windows Management Instrumentation,MS在里面定义了很多(应该是完全)的系统信息类,利用它你可以获得系统几乎所有的信息(硬的、软的),还可以利用它实行远程操纵和监控。他的语法与SQL语法很相近,所以操作起来很方便。我主要最近在做一个资产(计算机系统资产)管理系统,要全面获取一台机器的信息,所以有点对它狂热:):)
sanmaotuo(老冯) 最近是天天泡CSDN啊 LZ找他可找对人了 我可是看着他从2个角裤衩变成4个裤衩的 WMI我找了篇帖子给LZ 我也没用过 仅供LZ参考
http://www.programfan.com/article/showarticle.asp?id=1364
关于WMI的详尽资料请参考MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/anch_wmi.asp
我把如何通过Word来获取应用程序列表的代码再帖一下。
procedure TForm1.ButtonClick(Sender: TObject);
var
_Tasks: Tasks;
Enum: IEnumVARIANT;
NumElements: ULong;
_Task: OleVariant;
begin
_Tasks := WordApplication.Tasks;
Enum := _Tasks._NewEnum as IEnumVARIANT;
Enum.Next(1, _Task, NumElements);
while Succeeded(Enum.Next(1, _Task, NumElements)) and (NumElements > 0) do
begin
if (IUnknown(_Task) as Task).Visible then
ListBox.Items.Add((IUnknown(_Task) as Task).Name);
end;
end;
共同学习,共同进步!
PS:WMI的WQL语法例子
Select * from Win32_Process
学习
问一下老冯,IEnumVARIANT是在哪个单元的呢?
在ACTIVEX单元
to 老冯:
呵呵,那个Tasks在什么地方定义的啊?编译器通不过。
呵呵,找到了,以前没有用过WORD,但是还是有问题_Tasks := WordApplication.Tasks;
通不过,想查看WordApplication的定义报错提示“Unable to locate file "word2000.pas"”怎么回事啊?
你在控件板上找到SERVER,拖拉一个WordApplication(NAME也改为WordApplication)就可以了;
另外要uses ACTIVEX
1 import type library路径是C:\WINNT\system32\wbem\wbemdisp.tlb
2 use WbemScripting_TLB
3 具体WQL语句怎么写,可以搜索msdn参考
我有部分源代码,如需要。y.walter@eyou.com
呵呵,这两天网速太慢,多谢各位了,明天结帖,大家还有什么感兴趣的再说说看吧:)
没什么感兴趣的啦 只盼望LZ早点揭贴 ~~ 热盼ING!~~~~
文章来源:
http://www.delphi2007.net/DelphiAPI/html/delphi_20061122164538183.html