Страница: 1 |
Вот чего у меня получилось: Imports System Module Module1 Public Class wmi_handler Public Sub ObjectReady(ByVal sender As Object, ByVal e As ObjectReadyEventArgs) Public Sub Completed(ByVal sender As Object, ByVal e As CompletedEventArgs) End Class Страница: 1 |
Вопрос: Как перевести следующию строку из VBScript на VB
Добавлено: 05.06.04 01:21
Автор вопроса: CHIPchik | ICQ: 250073303
Как будет выглядить строка VBSCript на VB.NET?
' Создаем объект SWbemSink
Set objSink = WScript.CreateObject("WbemScripting.SWbemSink","Sink_")
За ранее спасибо!
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 05.06.04 03:33
не знать как в НЕТ, но в VB6 эта строка будет выглядеть вточности так же
Dim objSink as Object
Set objSink = VBA.CreateObject("WbemScripting.SWbemSink","Sink_"
Номер ответа: 2
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #2
Добавлено: 05.06.04 15:46
В .Net попробуй юзать Activator.CreateObject.
Номер ответа: 3
Автор ответа:
CHIPchik
ICQ: 250073303
Вопросов: 1
Ответов: 3
Профиль | | #3
Добавлено: 05.06.04 23:56
У класса Activator нет метода CreateObject,но з другими методами тоже не работает.
ПРЕДЛОЖЕННЫЕ ОТВЕТЫ НЕ РАБОТАЮТ!!!
Может есть есть какое-то простанство имен, которое следуюет подключить через директиву Imports? Перепробовал масу вариантов, но безуспешно!!!
Если кто-то знает - помогите. Буду очень благодарен!!!
Номер ответа: 4
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #4
Добавлено: 06.06.04 14:35
А что это за WbemScripting такой?
Может тебе проще взглянуть на WMI (Windows Management Implementation)?
Номер ответа: 5
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #5
Добавлено: 06.06.04 14:36
Сглючил.. Правильно расшифровывается Windows Management Instrumentation
Номер ответа: 6
Автор ответа:
CHIPchik
ICQ: 250073303
Вопросов: 1
Ответов: 3
Профиль | | #6
Добавлено: 06.06.04 15:18
Данный листинг производит подписку с помощью WMI на внутренее асинхронное событие, на VBScript все прекрасно работает, а проблема состоит в вышеприведенной строке:
' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim strNamespace ' Имя пространства имен
Dim strClass ' Имя класса
Dim objService ' Объект SWbemService
Dim colProcess ' Коллекция экземпляров класса WMI
Dim objProcess ' Элемент коллекции
Dim strResult ' Результат запроса
Dim objSink ' Объект SWbemSink
Dim bdone ' Переменная для организации цикла
'***Начало ***
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_Process"
strResult = "Список процессов у которых приоритет больше 10 :" & VbCrLf
bdone = false
' Подключаемся к пространству имен WMI
Set objClass = GetObject("WinMgmts:\\" & strComputer & _
"\" & strNamespace)
' Создаем объект SWbemSink
Set objSink = WScript.CreateObject("WbemScripting.SWbemSink","Sink_"
' Выполняем метод InstancesOfAsync
objClass.InstancesOfAsync objSink, strClass
' Приостанавливаем сценарий до завершения выполнения запроса
While Not bdone
wscript.sleep 1000
Wend
' Процедура-обработчик события OnObjectReady объекта SWbemSink
Sub Sink_OnObjectReady(objProcess, objAsyncContext)
If objProcess.Priority > 10 Then
' Формируем строку для вывода
strResult = strResult & "Имя процесса: " & objProcess.Name & vbtab & _
"Приоритет: " & objProcess.Priority & VbCrLf
End If
End Sub
' Процедура-обработчик события OnCompleted объекта SWbemSink
Sub Sink_OnCompleted(iHResult, objErrorObject, objAsyncContext)
' Вывод на экран
Msgbox(strResult)
' Изменяем значение bdone для выхода из цикла
bdone = true
End Sub
Вот
Номер ответа: 7
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #7
Добавлено: 06.06.04 16:16
В .Net есть свои средства для доступа к WMI. Смотри пространство имён
System.Management (оно в сборке System.Management.dll).
На этом сайте есть мой пример о том, как юзать WMI в .NET.
Также это как-то здесь на форуме обсуждалось.
Номер ответа: 8
Автор ответа:
Gloom
Вопросов: 0
Ответов: 36
Профиль | | #8
Добавлено: 07.06.04 13:12
Imports System.Management
Dim strClass As String = "Win32_Process" ' Имя класса
Dim strResult As String = "Список процессов у которых приоритет больше 10 :" & vbCrLf ' Результат запроса
Dim objSink As New wmi_handler() ' Объект SWbemSink
Dim bdone As Boolean = False ' Переменная для организации цикла
Sub Main()
Dim ob As New ManagementOperationObserver()
Dim h As New wmi_handler()
AddHandler ob.ObjectReady, AddressOf h.ObjectReady
AddHandler ob.Completed, AddressOf h.Completed
Dim objClass As New ManagementClass(strClass)
objClass.GetInstances(ob)
While Not bdone
System.Threading.Thread.Sleep(1000)
End While
End Sub
Dim objProcess As ManagementBaseObject = e.NewObject
If Convert.ToInt32(objProcess("Priority")) > 10 Then
' Формируем строку для вывода
strResult = strResult & "Имя процесса: " & objProcess("Name").ToString() & vbTab & _
"Приоритет: " & objProcess("Priority").ToString() & vbCrLf
End If
End Sub
' Вывод на экран
Console.WriteLine(strResult)
' Изменяем значение bdone для выхода из цикла
bdone = True
End Sub
End Module