1 (изменено: unreal612, 2014-09-16 08:28:28)

Тема: HTA + JS: Как получить доступ к ф-и GetObject?

Собственно вопрос, т.к. в HTA эта ф-я в JScript/Javascript почему-то отсутствует.

сейчас сделал извращение вида

<script type="text/vbscript">
Function GetObject__ (pathname, class__)
    If class__ = "" Then
        Set GetObject__ = GetObject(pathname)
    Else
        Set GetObject__ = GetObject(pathname, class__)
    End If
End Function
</script>

<script type="text/javascript">
function GetObject (pathname, _class_) {
    return GetObject__(pathname, _class_ || '');
};
</script>

можно ли это реализовать как-то поизящней, без VBScript?

PS.
OS - Win 7 x64
В HTA в начале есть

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=9">

т.к. по умолчанию юзается древний JS без новых методов у стандартных объектов JS.
Более новую версию IE тоже не укажешь, т.к. тогда не будет реагировать на атрибуты тега <hta:application >

win 7 x64, DWX 2.1

2

Re: HTA + JS: Как получить доступ к ф-и GetObject?

new ActiveXObject(pathName[, className])

( 2 * b ) || ! ( 2 * b )

3

Re: HTA + JS: Как получить доступ к ф-и GetObject?

new ActiveXObject("winmgmts:\\\\.\\root\\cimv2", '')

Ошибка: Невозможно создание объекта сервером программирования объектов

ActiveXObject кажется не работает с "путями"  в качестве аргумента.

win 7 x64, DWX 2.1

4

Re: HTA + JS: Как получить доступ к ф-и GetObject?

CreateObject(pathName)

( 2 * b ) || ! ( 2 * b )

5 (изменено: unreal612, 2014-09-16 10:06:30)

Re: HTA + JS: Как получить доступ к ф-и GetObject?

Ошибка: "CreateObject" не определено

короче. Походу в HTA из JScript'овых объектов доступен только ActiveXObject. Так что походу придется делать только как в 1-ом посте.

win 7 x64, DWX 2.1

6

Re: HTA + JS: Как получить доступ к ф-и GetObject?


<!doctype html>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=9">
        <meta charset="Windows-1251">
    </head>
    <body>
        <script language="JScript">
            // Длинная запись
            var oLoc = new ActiveXObject("WbemScripting.SWbemLocator")
            var oSvc = oLoc.ConnectServer(".", "root\\cimv2");
            alert("Запущено процессов: " + oSvc.ExecQuery("select * from Win32_Process").Count)
            
            // Более компактная запись
            alert("Запущено процессов: " + new ActiveXObject("WbemScripting.SWbemLocator").ConnectServer(".","root\\cimv2").ExecQuery("select * from Win32_Process").Count)
        </script>
    </body>
</html>

Может так больше понравится ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

7 (изменено: unreal612, 2014-09-16 15:39:55)

Re: HTA + JS: Как получить доступ к ф-и GetObject?

можно и так. И еще функцию-обертку над этим сделать. (мне главное, чтобы был только js).
Тогда доп. вопрос: у GetObject есть вариант вызова GetObject(pathname, classname), т.е. с 2-мя параметрами.
Как тогда юзать new ActiveXObject(...).ConnectServer для такого варианта?

win 7 x64, DWX 2.1

8

Re: HTA + JS: Как получить доступ к ф-и GetObject?

Таким образом — никак. Тот вызов («….ConnectServer()») сугубо для Wbem.

9

Re: HTA + JS: Как получить доступ к ф-и GetObject?

unreal612, вообще крайне удивлён, что у Вас данный код не работает. У меня на такой же Win 7 x64 всё прекрасно отрабатывает.

<!doctype html>
<html>
    <head>
        <meta charset="Windows-1251">
    </head>
    <body>
        <script language="JScript">
            var a = GetObject("winmgmts:\\\\.\\root\\cimv2")
            alert(a)
        </script>
    </body>
</html>
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

10

Re: HTA + JS: Как получить доступ к ф-и GetObject?

Xameleon, навскидку, банально: приложение x64, а библиотека — x86. Такое может быть?

11

Re: HTA + JS: Как получить доступ к ф-и GetObject?

Xameleon
не работает скорее всего из-за

<meta http-equiv="X-UA-Compatible" content="IE=9">

т.е. версия javascript повышается, но при этом обрезаются почти все возможности JScript.

win 7 x64, DWX 2.1

12

Re: HTA + JS: Как получить доступ к ф-и GetObject?

unreal612 пишет:

Xameleon
не работает скорее всего из-за

<meta http-equiv="X-UA-Compatible" content="IE=9">

т.е. версия javascript повышается, но при этом обрезаются почти все возможности JScript.

Так и у меня с этой строкой не работает. И [ПМСМ] это логично - ведь идёт адаптация движка под IE. Я именно поэтому и привёл пример без этой строки. Без неё у Вас такая же ситуация ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

13

Re: HTA + JS: Как получить доступ к ф-и GetObject?

C IE=8 работает (использовал в нескольких утилитках).
Забавно, что IE=8 выбирался из других соображений: вроде как старшая версия для XP и младшая для более поздних, а про такие ограничения не знал...

14

Re: HTA + JS: Как получить доступ к ф-и GetObject?

Xameleon пишет:

Так и у меня с этой строкой не работает. И [ПМСМ] это логично - ведь идёт адаптация движка под IE. Я именно поэтому и привёл пример без этой строки. Без неё у Вас такая же ситуация ?

без этой строки работает. Я потому и обратил на нее внимание, что в вашем коде ее не было. И как сказали выше, с IE=8 тоже работает.

win 7 x64, DWX 2.1

15

Re: HTA + JS: Как получить доступ к ф-и GetObject?

unreal612 & Serge Yolkin, господа зачем гадать "на кофейной гуще". Я думал Вы в курсе на что влияет эта директива. Ещё вчера я первым делом полез в google.

Запрос: JavaScript GetObject

Первые же ссылки ведут на MSDN

MSDN ссылка 1

Тут же пояснение

Функция GetObject не поддерживается в Internet Explorer 9 (стандартный режим), Internet Explorer 10 (стандартный режим), Internet Explorer 11 (стандартный режим) и приложения из Магазина Windows или более поздней версии.

MSDN ссылка 2

Requirements

Supported in the following document modes: Quirks, Internet Explorer 6 standards, Internet Explorer 7 standards, and Internet Explorer 8 standards. See JavaScript Version Information.

Т.е начиная с IE 9 GetObject для JS отрублен напрочь. Поэтому я умышленно убрал её (директиву) из кода в примере. Так как тогда используется родной движок обработки кода HTA.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

16 (изменено: Serge Yolkin, 2014-09-17 13:50:41)

Re: HTA + JS: Как получить доступ к ф-и GetObject?

Xameleon
Для меня было важно, чтобы стабильно отображался HTA интерфейс на разных виндах - на рендеринг эта директива тоже влияет. Поэтому (давно) выбрал для своего шаблона HTA IE=8 и знать не знал об этих ограничениях. Если бы не эта тема - и дальше бы не гадал, пока MS IE8 поддерживает...

Спасибо за разъяснение.

17

Re: HTA + JS: Как получить доступ к ф-и GetObject?

Serge Yolkin

на рендеринг эта директива тоже влияет

Я бы даже уточнил, что именно на ренденринг в первую очередь влияет. )

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !