Страница: 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