Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - ASP и VBScript

Страница: 1 |

 

  Вопрос: VBS: 2 вопроса Добавлено: 04.04.11 14:10  

Автор вопроса:  t0r19
Здравствуйте! Прошу дать ссылку на темы если такие были или ответить на вопросы полнее, насколько не жалко. Я в большей степени админ, форсированно осваиваю WSH по книгам, т.к. понадобилось, поэтому буду благодарен за развернутые ответы.

1. Почему при попытке создать ссылку на объект .NET Framework вылетает ошибка с тем, что такого объекта нет.
Пример:
set st =wscript.createobject ("System.Windows.Window")

Сервер выдает:"не удается найти класс программируемых объектов с именем "System.Windows.Window". код:80020009.
Класс такой есть и описан на MSDN http://msdn.microsoft.com/ru-ru/library/system.windows.window.aspx Вроде как все по правилам указана иерархия.

2. Как обойти ожидание MsgBox нажатие клавиши?
Пример:
Условный скрипт должне долго работать, ну например слушать ответы на ping и писать это в файл. Считаем что такой код работает без сбоев. Мне нужно повесить окно MsgBox с вопросом "остановить?" и когда будет нажата клавиша "ОК" исполнение остановится, а так все работает.
Сейчас получается, что исполнение сразу останавливается, т.е. пока MsgBox не получит любого нажатие клавиши -исполнение стоит.

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3177
 Профиль | | #1 Добавлено: 04.04.11 15:48
1. Попробуй System.Windows.Forms.Form
2. Енто надо запускать в другом потоке, чтобы ничего не останавливалось. Или, как вариант, подавать события извне, как то Timer'ом.

Ответить

Номер ответа: 2
Автор ответа:
 t0r19



Вопросов: 2
Ответов: 5
 Профиль | | #2 Добавлено: 05.04.11 07:13
"1. Попробуй System.Windows.Forms.Form"

Результат тот же, т.е. ошибка про то, что объект не находится. Сразу хочу оговориться, что фреймворки всех версий на машине стоят и опробовано под разными версиями windows-а. Причем ссылки на некоторые объекты срабатывают, вот и не могу закономерности отследить. По крайней мере хочется понять ограничения: в книгах не нашел этой темы. А возможности были бы безграничными, если использовать объекты фреймворка.

"надо запускать в другом потоке" можно пояснить? Я говорил, что больше админ чем кодер, поэтому сразу схватить не могу.

Ответить

Номер ответа: 3
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3177
 Профиль | | #3 Добавлено: 05.04.11 09:30
в vbS нету многопоточности, поэтому лучше вместо messagebox используй другую форму с кнопкой "Остановить?"

Ответить

Номер ответа: 4
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #4 Добавлено: 07.04.11 08:51
по второму вопросу пару идей предложить могу:

1. выводить периодически сообщение об отмене
  1.  
  2. For lMsgWait = 10 To 1 Step -1
  3.     lSel = objShell.Popup("Отменить?", 2, "заголовок", 4 + 32)
  4.     If lSel = 6 Then
  5.         Exit For
  6.     ElseIf lSel = 7 Then
  7.         objShell.Popup "отменено!", 4, "заголовок", 16
  8.         WScript.quit
  9.     End If
  10. Next



2. использовать IE, но для этого нужен сам IE да и кривовато выглядит.
создаешь объект IE, добавляешь чекбоксы HTML-кодом, вызываешь свою функцию, которая будет проверять, не нажат ли чекбокс
что-то типа
  1.  
  2. With objIE.Document.Write "<input type='radio' name='btn_off' value='btn_reboot' checked>Перезагрузить "
  3. With objIE.Document.Write "<input type='radio' name='btn_off' value='btn_shutdown'>Выключить "
  4.  
  5. ‘код…
  6. checkIE()
  7. ‘код…
  8. checkIE()
  9. ‘код…
  10. checkIE()
  11.  
  12.  
  13. sub checkIE()
  14. If Not bErrIE Then
  15.     For Each objColBtn In objIE.Document.getElementsByName("btn_off")
  16.         If objColBtn.Value = "btn_reboot" And objColBtn.Checked Then
  17. bRestart = True
  18. Exit For
  19. End If
  20.         If objColBtn.Value = "btn_nothing" And objColBtn.Checked Then
  21. WscriptQuit()
  22. End If
  23.     Next
  24. End If
  25. end sub

Ответить

Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6597
 Профиль | | #5 Добавлено: 07.04.11 20:12
C чего вы вообще взяли что можно создать экземпляр класса System.Windows.Window?
Сборка PresentationFramework, в которой он находится помечена как
[assembly: ComVisible(false)]

Это значит что ее нельзя использовать как COM сборку. А CreateObject создает как раз COM объекты. nuff said

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6597
 Профиль | | #6 Добавлено: 07.04.11 20:20
t0r19 пишет:
Причем ссылки на некоторые объекты срабатывают, вот и не могу закономерности отследить

Закономерность есть.
Если ни на сборке, ни на типе нет атрибута ComVisible, тип можно использовать через COM.
Если на типе стоит атрибут ComVisible(false), его нельзя использовать через COM вне зависимости от того какой атрибут на сборке
Если на типе стоит атрибут ComVisible(true), его можно использовать через COM вне зависимости от того какой атрибут на сборке
Если на сборке есть атрибут ComVisible(false), на типе нет атрибута, тип нельзя использовать через COM
Если на сборке есть атрибут ComVisisble(true), то это ни на что не влияет.

Ответить

Номер ответа: 7
Автор ответа:
 t0r19



Вопросов: 2
Ответов: 5
 Профиль | | #7 Добавлено: 08.04.11 06:06
"надо запускать в другом потоке, чтобы ничего не останавливалось"

Спасибо за направление. В общем так и получилось. Из основного кода сгенерировал vbs файл, в него отправил строку с "моим" msgbox и запустил этот файл как дочерний процесс EXEC-ом, а дальше уже можно отлавливать его состояние: выполняется-не выполняется и на него реагировать. Как-то дубово конечно, но решает задачу.

Остался вопрос: почему не на все объекты из net framework можно сослаться. Очень хочется понять, если кто подскажет или даст направление - будет здорово.

Ответить

Номер ответа: 8
Автор ответа:
 t0r19



Вопросов: 2
Ответов: 5
 Профиль | | #8 Добавлено: 08.04.11 06:10
Извеняюсь, что не увидел ответы на 2-й вопрос. Спасибо.

Ответить

Страница: 1 |

Поиск по форуму





© Copyright 2002-2011 VBNet.RU | Пишите нам