Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Delphi WMI


Автор: Domoffou 29.1.2009, 22:38
Здравствуйте.
Скажите, пожалуйста, можно ли использовать асинхронные события WMI в Delphi (использование объекта WbemScripting.SWbemSink)???

Мне необходимо перехватывать все запущенные и закрытые процессы.
Перебрав все варианты, остановился на vbs-скрипте:
Код


On Error Resume Next

Dim SQL, objSink, objWMIService,WshShell

strComputer = "."
dllPath="C:\WINDOWS\system32\disbypid.dll"
SQL = "SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process'"
                 
Set objSink = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
objWMIService.ExecNotificationQueryAsync objSink, SQL
Set WshShell = CreateObject("WScript.Shell")

Do While(True)
  Wscript.Sleep(2000)
loop

'--------------------------
'---  Event CALLBACK -----
'--------------------------
Sub SINK_OnObjectReady(oOutParams, oContext)
On Error Resume Next
    if oOutParams.TargetInstance.description = "xxxx.exe" then
        cmd="rundll32 "&dllPath&",DisableCloseButton "&oOutParams.TargetInstance.ProcessID
        WshShell.Run cmd,2,false
    end if
end sub



Но как отдельно работающий скрипт это не очень красиво :(
Переводится ли это дело в дельфю?
спасибо!

Автор: Rrader 30.1.2009, 09:05
Буквально на днях делал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)