Имя: Пароль:
1C
1C 7.7
v7: "Новый" способ получения объекта WScript и других...
0 smaharbA
 
02.08.11
12:03
+ Есть хорошее "побочное" явление

//*******************************************
Функция ПолучитьОбертку(Сигнатура=123)
   Перем Окно;
   Тест=КаталогВременныхФайлов()+Сигнатура+".js";
   Текст=СоздатьОбъект("Текст");
   Текст.ДобавитьСтроку("WScript.Interactive=false;
   |var x=GetObject('new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}');
   |x.PutProperty('Скрипт',WScript);
   |x.StatusText='" + Сигнатура + "';
   |while (x.StatusText) WScript.Sleep(500);");
   Текст.Записать(Тест);
   ЗапуститьПриложение(Тест);
   ХТМЛ = СоздатьОбъект("htmlfile");
   ХТМЛ.Open("text/html");
   //<-- Подготовим нужные методы
   ХТМЛ.Write("<script>Новый=function(x,y){return new x(y)}</script>");
   Это=ХТМЛ.documentElement.document.script;
   Шел=СоздатьОбъект("Shell.Application");
   Начало=_GetPerformanceCounter();
   Пока (_GetPerformanceCounter()-Начало<5000) и (ПустоеЗначение(Окно)=1) Цикл
       Окна=Это.Новый(Это.Enumerator,Шел.Windows());
       Пока Окна.atEnd(0)=0 Цикл
           Если Строка(Сигнатура)=Окна.item(0).StatusText Тогда
               Окно=Окна.item(0);
               Прервать;
           КонецЕсли;
           Окна.moveNext(0);
       КонецЦикла;
   КонецЦикла;
   ФС.УдалитьФайл(Тест);
   Возврат Окно;
КонецФункции    // ПолучитьОбертку(Это)
//*******************************************
Процедура Сформировать()
   Сигнатура=_GetPerformanceCounter();
   Это=ПолучитьОбертку(Сигнатура);
   Если ПустоеЗначение(Это)=1 Тогда
       Сообщить("Нифига не вышло","!!!");
       Возврат;
   КонецЕсли;
   ВСкрипт=Это.GetProperty("Скрипт");
   Начало=_GetPerformanceCounter();
   ВСкрипт.Sleep(1000);
   Сообщить("Задержка = " + (_GetPerformanceCounter()-Начало) + " мс.");
   Начало=_GetPerformanceCounter();
   ВСкрипт.Sleep(2000);
   Сообщить("Задержка = " + (_GetPerformanceCounter()-Начало) + " мс.");
   Начало=_GetPerformanceCounter();
   ВСкрипт.Sleep(3000);
   Сообщить("Задержка = " + (_GetPerformanceCounter()-Начало) + " мс.");
   Это.Quit(); //уничтожать нужно обизательно иначе система встанет колом после пары десятков вызовов
КонецПроцедуры
1 Grusswelle
 
02.08.11
12:05
(0) Явление-то хде?!
2 smaharbA
 
02.08.11
12:06
ищите девки, должон быть (с)
3 Grusswelle
 
02.08.11
12:09
(2) Блин, я не буду запускать... Ломает...
4 aka MIK
 
02.08.11
12:11
(0) Ого, круто!
5 Мутабор
 
02.08.11
12:11
Конечно можно и так, можно конечно еще на 500000 строк текста растянуть 5 строчек кода. Запутываешь?
6 aka MIK
 
02.08.11
12:11
Правда не пашет
7 smaharbA
 
02.08.11
12:14
(5) нет
неплохой объект используется - при уничтожении источника данные простых типов *не объекты) остаются - т.е. подключайся хоть с 10 адинесок разных версий + с каких нибудь замописок на делфи и прочих си шарпа и устанавливай/получай данные
8 Мутабор
 
02.08.11
12:15
(7) Сейчас проверю о чем ты говоришь...
9 smaharbA
 
02.08.11
12:15
разумеется подразумевает нормальную работу в системе скриптовой машины
10 smaharbA
 
02.08.11
12:16
(8) ищем по "сигнатуре" не делая куит и делаем в одном процессе путпроперти в другом гетпроперти
11 Мутабор
 
02.08.11
12:16
Пока еще не понял, появляется окно и исчезает...
12 Мутабор
 
02.08.11
12:19
Я если честно смысл не понял, что это дает то такого интересного для реализации?
13 Мутабор
 
02.08.11
12:30
В общем тема типа для обмена данными между процессами я так понял?
14 Мутабор
 
02.08.11
12:33
"Следующий код
Код:
var x = GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}");
WScript.Echo(x);
отзывается так:
Microsoft Internet Explorer
"
15 smaharbA
 
02.08.11
12:34
Так более понятно ?

Функция ПолучитьОкно(Сигнатура="МояСуперСигнатура")
   ХТМЛ = СоздатьОбъект("htmlfile");
   ХТМЛ.Open("text/html");
   //<-- Подготовим нужные методы
   ХТМЛ.Write("<script>Новый=function(x,y){return new x(y)}</script>");
   Это=ХТМЛ.documentElement.document.script;
   Шел=СоздатьОбъект("Shell.Application");
   Окна=Это.Новый(Это.Enumerator,Шел.Windows());
   Пока Окна.atEnd(0)=0 Цикл
       Если Строка(Сигнатура)=Окна.item(0).StatusText Тогда
           Возврат Окна.item(0);
       КонецЕсли;
       Окна.moveNext(0);
   КонецЦикла;
КонецФункции    // ПолучитьОкно(Сигнатура)

Функция ПолучитьОбертку(Сигнатура="МояСуперСигнатура")
   Перем Окно;
   Окно=ПолучитьОкно(Сигнатура);
   Если ПустоеЗначение(Окно)=0 Тогда
       Возврат Окно;
   КонецЕсли;
   Тест=КаталогВременныхФайлов()+Сигнатура+".js";
   Текст=СоздатьОбъект("Текст");
   Текст.ДобавитьСтроку("WScript.Interactive=false;
   |var x=GetObject('new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}');
   |x.PutProperty('Скрипт',WScript);
   |x.StatusText='" + Сигнатура + "';
   |while (x.StatusText) WScript.Sleep(500);");
   Текст.Записать(Тест);
   ЗапуститьПриложение(Тест);
   Начало=_GetPerformanceCounter();
   Пока (_GetPerformanceCounter()-Начало<5000) и (ПустоеЗначение(Окно)=1) Цикл
       Окно=ПолучитьОкно(Сигнатура);
   КонецЦикла;
   ФС.УдалитьФайл(Тест);
   Возврат Окно;
КонецФункции    // ПолучитьОбертку(Это)

Процедура ПриОткрытии()
   Это=ПолучитьОбертку();
   Если ПустоеЗначение(Это)=1 Тогда
       Сообщить("Нифига не вышло","!!!");
       Возврат;
   КонецЕсли;
   Док=СоздатьОбъект("Документ");
   Док.ВыбратьДокументы();
   Док.ПолучитьДокумент();
   Это.PutProperty("Документ",ЗначениеВСтрокуВнутр(Док.ТекущийДокумент()));
КонецПроцедуры

Процедура Сформировать()
   Это=ПолучитьОкно();
   Если ПустоеЗначение(Это)=1 Тогда
       Сообщить("Нифига не вышло","!!!");
       Возврат;
   КонецЕсли;
   Сообщить(ЗначениеИзСтрокиВнутр(Это.GetProperty("Документ")));
   Это.Quit();
КонецПроцедуры
16 smaharbA
 
02.08.11
12:35
(13) Да
17 Мутабор
 
02.08.11
12:36
(16) Яндексом прошелся по ":{C08AFD90-F2A1-11D1-8455-00A0C91F3880}" там много где тема обсуждается
18 smaharbA
 
02.08.11
12:37
(17) да, на скрипткодинге тоже ее обсасывал народ
19 andrewks
 
02.08.11
13:20
охренеть. как был изврат - так изврат и остался ;-)

а так хочется чего-то возвышенного, в две-три строчки!
20 andrewks
 
02.08.11
13:21
но всё равно спасибо :)
21 Ёпрст
 
02.08.11
13:29
22 Ёпрст
 
02.08.11
13:30
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн