Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / сохранение из консольного приложения / 25 сообщений из 29, страница 1 из 2
21.12.2010, 12:40
    #37026678
Гогр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
Здраствуйте.
Есть такое приложение klnagchk.exe в NetAgent 8.0 от касперского. Оно возвращает различные данные, но закрывается оч быстро.
Для того чтобы его просмотреть нормально достаточно
Код: plaintext
klnagchk.exe pause()
в батнике.
Но появилась необходимость получать результат ее работы в doc файл.
был написан следующий vbs сценарий
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Option Explicit
' Объявляем переменные
Dim ObjExec,WshShell,s,IsBreak,ArrS,Count,i
' Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
' Запускаем команду 
Set ObjExec=WshShell.Exec("klnagchk.exe")
s=""
IsBreak=False
Do While True  ' Бесконечный цикл
  ' Проверяем, достигнут ли конец выходного потока команды DIR
  If (Not ObjExec.StdOut.AtEndOfStream) Then
    ' Считываем полностью выходной поток команды DIR
    s=s+ObjExec.StdOut.ReadAll
  End If
  If IsBreak Then
    Exit Do  ' Выходим из цикла
  End If
  ' Проверяем, не завершилось ли выполнение DIR
  If ObjExec.Status= 1  Then
    IsBreak=True
  Else
    WScript.Sleep  100  ' Приостанавливаем сценарий на 0,1 сек
  End If
Loop
ArrS=Split(s,vbCrLf)  ' Формируем массив строк
Count=UBound(ArrS)  ' Количество элементов массива

Dim FSO,F,TextStream  'Объявляем переменные
' Инициализируем константы
Const ForReading =  1 , ForWriting =  2 , TristateUseDefault = - 2 

' Создаем объект FileSystemObject
Set FSO=WScript.CreateObject("Scripting.FileSystemObject")
' Создаем в текущем каталоге файл log.doc
FSO.CreateTextFile "log.doc"
' Создаем объект File для файла log.doc
set F=FSO.GetFile("log.doc")
' Создаем объект TextStream (файл открывается для записи)

' Записываем в файл строку
Set TextStream=F.OpenAsTextStream(ForWriting, TristateUseDefault)

For i= 0  To Count- 1 
TextStream.WriteLine ArrS(i)
Next

' Закрываем файл
TextStream.Close
Dim WShell, word 

Set WShell = WScript.CreateObject("WScript.Shell")

Set word = WShell.Exec("C:\Program Files\Microsoft Office\Office12\winword.exe log.doc")
Сценарий работает, но каждый раз при запуске ворда из сценария он спрашивает о кодироке MS-Dos или нет.
Что нужно прописать, чтобы он по умолчанию открывал с кодировкой MS-Dos?
Заранее спасибо
ПС Заранее спасибо за все ответы по делу=)
...
Рейтинг: 0 / 0
21.12.2010, 12:54
    #37026742
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
попробуйте открывать документ так:
Код: plaintext
1.
2.
Set Wrd = CreateObject("Word.Application")
Wrd.Documents.Open FileName:="log.txt", ConfirmConversions:=False, Encoding:= 51251 
Wrd.Visible = True
если автоматом не поможет, надо поиграть с константой Encoding (см. в вордовской ObjectBrowser набор констант MsoEncoding)
...
Рейтинг: 0 / 0
21.12.2010, 13:01
    #37026773
Гогр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
2Shocker.Pro
Спасибо, буду копать.
Как я понимаю затык у меня именно в том, что я обращаюсь к ворду как к стороннему по через прямой вызов, а не как к COM объекту. Я правильно понимаю?
Или и при прямом вызове тоже можно играться со свойствами кодировок?
ПС пытаюсь переписать так как вы указали, спасибо за направление.
ПС 2 Это мой 1 скрипт на vbs...=)
...
Рейтинг: 0 / 0
21.12.2010, 13:04
    #37026787
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
> Автор: Гогр
> Сценарий работает, но каждый раз при запуске ворда из сценария он спрашивает о кодироке MS-Dos или нет.
> Что нужно прописать, чтобы он по умолчанию открывал с кодировкой MS-Dos?


А приложи, пожалуйста пример файла в на котором спрашивает? И какая версия офиса?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.12.2010, 13:05
    #37026794
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
Гогр2Shocker.Pro
Спасибо, буду копать.
Как я понимаю затык у меня именно в том, что я обращаюсь к ворду как к стороннему по через прямой вызов, а не как к COM объекту. Я правильно понимаю?
Или и при прямом вызове тоже можно играться со свойствами кодировок?
ПС пытаюсь переписать так как вы указали, спасибо за направление.
ПС 2 Это мой 1 скрипт на vbs...=)

Обращение через СОМ конечно в сто раз гибче. Не говоря о том, что ворда просто может не быть по вышеуказанному пути, если он другой версии или установлен в другую папку.
...
Рейтинг: 0 / 0
21.12.2010, 13:05
    #37026798
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
Игорь Горбонос И какая версия офиса?
Код: plaintext
"C:\Program Files\Microsoft Office\Office12\winword.exe"
...
Рейтинг: 0 / 0
21.12.2010, 13:08
    #37026808
Гогр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
2Shocker.Pro
Да,да это стандартный путь=)
...
Рейтинг: 0 / 0
21.12.2010, 13:10
    #37026816
Гогр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
офис 2007,в файле содержаться строки с символьно числовыми парметрами, хотя в файл все пишется строками=)
...
Рейтинг: 0 / 0
21.12.2010, 13:32
    #37026899
Гогр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
Прошу прощения за глупый вопрос, но приведенный уважаемым Shocker.Pro не компилится, даже в отдельности=(
Скрипт ругается на ":=".
Можно немного поподробнее об этом, например где можно почитать,к сожалению гугл не признался.
ПС как я понимаю приведенный вами код подразумевает множественную инструкцию, но система упорно ругается и желает получить еще инструкций, что-то не могу понять что бы еще ей скормить чтобы она наелась ужо=(
...
Рейтинг: 0 / 0
21.12.2010, 13:40
    #37026939
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
ГогрПС как я понимаю приведенный вами код подразумевает множественную инструкцию, но система упорно ругается и желает получить еще инструкций, что-то не могу понять что бы еще ей скормить чтобы она наелась ужо=(
А что, народ... я то в скриптах слаб... вбскрипт не поддерживает именованные параметры? Ну ладно, ща перепишем
...
Рейтинг: 0 / 0
21.12.2010, 13:41
    #37026945
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
Код: plaintext
Wrd.Documents.Open "log.txt",False,,,,,,,,, 51251 
...
Рейтинг: 0 / 0
21.12.2010, 14:00
    #37027022
Гогр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
попробовал слепить скрипт который открывает документ из текущей папки получилось:
Код: plaintext
1.
2.
3.
4.
5.
Dim fso,path
Set fso=WScript.CreateObject("Scripting.FileSystemObject")
set path=fso.GetFile("log.txt")
Set Wrd = CreateObject("Word.Application")
Wrd.Documents.Open path,False,,,,,,,,, 51251 
Wrd.Visible = True
однако выдет ошибку
Код: plaintext
1.
C:\ 2 .vbs( 6 ,  1 ) Ошибка выполнения Micros
oft VBScript: Несоответствие типа: 'Wrd.Documents.Open'
Путь path к текущему файлу отрабатывает нормально, но по прежнему не выходит каменный цветок=(
ПС 2Shocker.Pro спасибо за участии в головоломании над моей проблемой=)
...
Рейтинг: 0 / 0
21.12.2010, 14:09
    #37027065
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
> Автор: Shocker.Pro
> Wrd.Documents.Open "log.txt",False,,,,,,,,,51251


от объясни мне, задлянафига перехватывать вывод программы, сохранять его в текстовый файл, что-бы потом героически
преодолевать созданные самим собой трудности?
Я просил кусочек файла, потому что мой пример открывается без вопросов в 2003 ворде:
Делаем bat-файл:
Код: plaintext
1.
dir > c:\log.txt
"C:\Program Files\Microsoft Office\Office12\winword.exe" c:\log.txt
и наслаждаемся красотой и простотой.
Вариант два, если уж полезли в СОМ, так лезте полностью и сохраняйте вывод программы не в текстовом файле, а сразу в
новом документе ворда.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.12.2010, 14:11
    #37027076
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
> Автор: Гогр
> Wrd.Documents.Open path .Path , False,,,,,,,,,51251



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.12.2010, 14:31
    #37027159
Гогр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
2 Игорь Горбонос, спасибо затык был именно в этом, теперь вызывается.
Сначало было решил, что вы ткнули меня носом в совпадение имени переменной и какой то описанной в системе...
ПС ворд теперь радостно открывается. только,насколько понимаю в кодировке 1251=(
ПС2 пытаюсь найти в гугле полную структуру параметров=(
...
Рейтинг: 0 / 0
21.12.2010, 14:34
    #37027167
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
> Автор: Гогр
> ПС ворд теперь радостно открывается. только,насколько понимаю в кодировке 1251=(

В чем это выражается? Кодировка символов не та? Выводи результат работы программы сразу в вордовский файл, минуя
текстовый.

> ПС2 пытаюсь найти в гугле полную структуру параметров=(

Каких параметров?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.12.2010, 14:41
    #37027190
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
ГогрПС2 пытаюсь найти в гугле полную структуру параметров=(
не надо в гугле
надо открыть ворд
Alt+F11
Ctrl+G
набрать Documents.Open
и нажать F1
...
Рейтинг: 0 / 0
21.12.2010, 15:11
    #37027270
Гогр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
2Игорь Горбонос, хм...видимо не корректно сформулировал вопрос изначально=(
Попробую переформулировать.
Как выбрать формат кодировки MS-DOS или задать его диалогу выбора, чтобы он не открывался.
По умолчанию в батниках для этого задают ключи. А какие параметры тут дергать?
...
Рейтинг: 0 / 0
21.12.2010, 15:27
    #37027332
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
> Автор: Гогр

Как такой вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Option Explicit
' Объявляем переменные
Dim ObjExec,WshShell,s,IsBreak,ArrS,Count,i
Dim wd, d
Set wd = WScript.CreateObject("Word.Application")
Set d = wd.Documents.Add
' Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
' Запускаем команду
Set ObjExec=WshShell.Exec("klnagchk.exe")
s=""
IsBreak=False
Do While True  ' Бесконечный цикл
  ' Проверяем, достигнут ли конец выходного потока команды DIR
  If (Not ObjExec.StdOut.AtEndOfStream) Then
    ' Считываем полностью выходной поток команды DIR
'    s=s+ObjExec.StdOut.ReadAll
 wd.Selection.TypeText ObjExec.StdOut.ReadAll
  End If
  If IsBreak Then
    Exit Do  ' Выходим из цикла
  End If
  ' Проверяем, не завершилось ли выполнение DIR
  If ObjExec.Status= 1  Then
    IsBreak=True
  Else
    WScript.Sleep  100  ' Приостанавливаем сценарий на 0,1 сек
  End If
Loop

d.SaveAs "c:\log.doc"
SET d = Nothing
wd.Visible = TRUE
SET wd = Nothing

> Как выбрать формат кодировки MS-DOS или задать его диалогу выбора, чтобы он не открывался.
> По умолчанию в батниках для этого задают ключи. А какие параметры тут дергать?

Вот для этого я и просил пример файлика-лога. Как вариант, можно попробовать поменять кодовую страницу для вывода
батников, вообщем мысли есть :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.12.2010, 15:29
    #37027340
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
Гогрзадать его диалогу выбора, чтобы он не открывался.
ConfirmConversions:=False

Собственно, это присутствует в моей строке открытия. А что касается выбора кодировки - тут, как я сказал, надо поиграться с параметром Encoding:=51251

Ну или перекодировать до сохранения в файл
...
Рейтинг: 0 / 0
21.12.2010, 15:50
    #37027409
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
> Автор: Игорь Горбонос
> Я просил кусочек файла, потому что мой пример открывается без вопросов в 2003 ворде:


А вот такой пример, даже с читабельными русскими бувами
Код: plaintext
1.
2.
chcp  1251 
dir > c:\log_111.txt
"C:\Program Files\Microsoft Office\Office11\winword.exe" c:\log_111.txt

P.S. И все это в три строки bat-файла :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.12.2010, 15:56
    #37027439
Гогр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
Вот пример содрежимого файлика, изменил только айпишник сервера=)
Остальное осталось неизменным.
ПС К сожалению нужный эффект достигнут как у злого джина, вроде бы диалога нет, но и кодировка 1251 для файла в 51251
ПС2 2Игорь Горбонос ваш вариант кода куда как лучше чем мой. Мой воялся за счет склейки различных кусков в 1 целое, что видно из коментариев=)
ПС3 Спасибо за терпение и адекватные ответы и тычки носом
ПС3 У вас все гуманнее чем в ветке SQL=)
...
Рейтинг: 0 / 0
21.12.2010, 16:04
    #37027469
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
> Автор: Гогр
> Вот пример содрежимого файлика, изменил только айпишник сервера=)
> Остальное осталось неизменным.

Понял, сейчас посмотрю.

> ПС3 У вас все гуманнее чем в ветке SQL=)

Это тебе так кажется, на самом деле мы стебёмся над всеми, в том числе и над собой

Ещё раз спрошу:
какой результат запуска такого bat-файла:
Код: plaintext
1.
2.
chcp  1251 
klnagchk.exe > c:\log_111.txt
"C:\Program Files\Microsoft Office\Office11\winword.exe" c:\log_111.txt
Путь к своему ворду поправь :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.12.2010, 16:13
    #37027507
Гогр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
2Игорь Горбонос
Результат такой же как и после скрипта, ворд неустанно просит через диалог...=)
ПС у меня все таки офис в 12 а не в 11 папке=)
...
Рейтинг: 0 / 0
21.12.2010, 16:27
    #37027584
Гогр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сохранение из консольного приложения
Прошу за предыдущее сообщение туплю...
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / сохранение из консольного приложения / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]