Имя: Пароль:
1C
1С v8
Проблема с ЗапуститьПриложение()
0 8 0
 
13.09.11
18:34
При открытии файла из хранилищаЗначения с помощью ЗапуститьПриложение(ПолноеИмяФайла) файлы картинок открываются отлично, а word и excel открываются в неактивном окне (открывается Word, в нем открывается файл, и переключается на 1С). Как сделать чтобы окна открываемых файлов оставались активными не зависимо от открывающего ПО?
1 FN
 
13.09.11
19:26
2 8 0
 
14.09.11
09:42
up_
3 andrewks
 
14.09.11
09:44
(2) чё уп? ты пробовал (1)?
4 8 0
 
14.09.11
09:57
я не создаю никакого объекта, файлы вложенные в хранилище могут быть различных форматов
5 FN
 
14.09.11
16:50
(4) разжевываю:

WshShell = CreateObject("WScript.Shell");
WshShell.Run(Симв(34)+ПолноеИмяФайла+Симв(34), 1, 0);

только минтаксис проверь, это код из 7.7
6 8 0
 
15.09.11
12:06
Спасибо, попробую. Пока остановилась на варианте ЗапуститьПриложение(имя, , Истина), но там свои недостатки. попробую этот вариант.
7 8 0
 
15.09.11
12:25
(5) попробовала
WshShell = Новый COMОбъект("WScript.Shell");        
WshShell.Run(Символ(34)+ПолноеИмяФайла+Символ(34), 1, 0);

открывает, но опять же word, excel окно неактивно становится, т. е. проблема та же самая, может как то можно окно активизировать?
8 FN
 
16.09.11
11:03
(7) ну попробуй еще так:

WshShell = Новый COMОбъект("WScript.Shell");        
WshShell.Run(Символ(34)+ПолноеИмяФайла+Символ(34), 3, 0);
9 8 0
 
19.09.11
10:06
(8) пробовала, тоже самое, открывается, а потом снова 1С активным становится. Не понимаю почему:(
10 kvk
 
19.09.11
10:29
Вот так еще можно попробовать, доработать только:


   Шелл = Новый COMОбъект("WScript.Shell");
   Попытка
       AutoIt = Новый COMОбъект("AutoItX3.Control");
   Исключение
   КонецПопытки;
   Если AutoIt <> Неопределено Тогда
       Файл = Новый Файл(ПолноеИмяФайла);
       Шелл.Run("""" + ПолноеИмяФайла + """", 1);
       RegExp = "[REGEXPTITLE:\b" + Файл.ИмяБезРасширения + "\b]";
       Если AutoIt.WinWait(RegExp, "", 20) Тогда
           Handle = "[HANDLE:" + AutoIt.WinGetHandle(RegExp) + "]";
           Если Не AutoIt.WinActive(Handle) Тогда
               AutoIt.WinActivate(Handle);
           КонецЕсли;
       КонецЕсли;
   Иначе
       ИмяСкрипта = ПолучитьИмяВременногоФайла();
       Скрипт = Новый ЗаписьТекста(ИмяСкрипта, КодировкаТекста.ANSI);
       Скрипт.Записать("var WshShell = new ActiveXObject('WScript.Shell');
       |var fso = new ActiveXObject('Scripting.FileSystemObject');
       |fso.DeleteFile(WScript.ScriptFullName);
       |var filename = WScript.Arguments(0);
       |WshShell.Run(filename, 1);
       |basename = fso.GetBaseName(filename);
       |switch(fso.GetExtensionName(filename)){
       |    case 'doc': case 'docx': title = 'Microsoft Word - ' + basename; break;
       |    case 'txt': title = basename + ' - Блокнот'; break;
       |    case 'xls': case 'xlsx': title = 'Microsoft Excel - ' + basename; break;
       |    default: title = basename;
       |}
       |for(i=0;i<4;i++){WshShell.AppActivate(title);WScript.Sleep(5000)}");
       Скрипт.Закрыть();
       Шелл.Run("cscript /e:javascript """ + ИмяСкрипта + """ """ + ПолноеИмяФайла + """", 0);
   КонецЕсли;
11 8 0
 
19.09.11
11:25
(10) как есть не работает, а доработать не могу, я в этом не разбираюсь...
12 mzelensky
 
19.09.11
11:36
(11) "я в этом не разбираюсь" - если так, то готовьте капусту и зовите спеца. Смысл просить помощи на форуме, если желания "разобраться" нет ?!?!?

СОРИ ЗА ФЛУД
13 8 0
 
19.09.11
11:57
(12) я написала вопрос, почему может не работать (так как должна была бы) стандартная команда 1С. Я не разбираюсь во внешних скриптах, а это совершенно другая тема.
14 kvk
 
19.09.11
12:01
(11) В (10) Заменить строку на
|WshShell.Run('""' + filename + '""', 1);
в переменные title в зависимости от расширения правильно написать заголовки появляющихся окон (у меня OpenOffice, может и не правильно указал, проверил только для блокнота). Попытку Вообще убрать, оставить только блок Иначе.

Если без внешних скриптов то так:


   Шелл = Новый COMОбъект("WScript.Shell");
   Шелл.Run("""" + ПолноеИмяФайла + """", 1);
   Файл = Новый Файл(ПолноеИмяФайла);
   Имя = Файл.ИмяБезРасширения;
   Расширение = Файл.Расширение;
   // Определим заголовок появляющегося окна
   Если (Расширение = ".doc") ИЛИ (Расширение = ".docx") Тогда
       Заголовок = "Microsoft Word - " + Имя;
   ИначеЕсли (Расширение = ".xls") ИЛИ (Расширение = ".xlsx") Тогда
       Заголовок = "Microsoft Excel - " + Имя;
   ИначеЕсли Расширение = ".txt" Тогда
       Заголовок = Имя + " - Блокнот";
   Иначе
       Заголовок = Имя;
   КонецЕсли;
   Для К=1 По 3 Цикл
       Шелл.AppActivate(Заголовок);  // Активизируем окно, если появилось
       Шелл.Run("ping -n 3 127.0.0.1", 0, Истина);  // Ждем 3 секунды
   КонецЦикла;
15 8 0
 
19.09.11
12:03
(14) спасибо, сейчас попробую!
16 8 0
 
19.09.11
12:13
(14) не понимаю,
WshShell = Новый COMОбъект("WScript.Shell");        
WshShell.Run(Символ(34)+ПолноеИмяФайла+Символ(34), 1, 0);
- не работает, открывает и активность на 1С

а взяла твои 2 строки
Шелл = Новый COMОбъект("WScript.Shell");
Шелл.Run("""" + ПолноеИмяФайла + """", 1);
- все работает

Спасибо огромное!