0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 56
1

Запуск MS Word через функцию Shell

23.10.2013, 20:29. Показов 3955. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. Нужно открыть документ *.doc при помощи Word. Почему-то функция Shell упорно отказывается это делать. Строка кода не работает:
PureBasic
1
z% = Shell("WinWord Source.Doc",1)
Переписал, полностью указав путь к программе и к файлу:
PureBasic
1
z% = Shell("C:\ProgramData\Microsoft\Windows\Start_Menu\Programs\Microsoft_Office\WinWord.exe C:\\Users\пк\\Desktop\\DDE1\\Source.doc", 1)
При попытке запуска пишет: File not found
Попробовал открыть этот же документ с помощью Блокнота, всё нормально открылось. Значит всё дело именно в Ворде. Я конечно понимаю, что можно использовать другие функции, но хотелось бы разобраться, почему именно эта не работает.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2013, 20:29
Ответы с готовыми решениями:

Запуск через Shell
Как сделать запуск данной команды через Shell (Memory - переменная): C:\Program...

Запуск shell - команды через SSH
Добрый день! Использую модуль paramiko. Нужно выполнять различные команды через ssh на удаленном...

Запуск bat файла через Shell (IIS 6.0)
Всем привет. Столкнулся с неожиданной проблемой при переходе с IIS 5.0 на 6.0 Не работает вызов...

Проблема с запуском документа Word через Shell
Я делаю так: Shell('start.exe winword.exe ' & FILENAME) Проблема же в том, что Word принимает...

14
es geht mir gut
11267 / 4749 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
23.10.2013, 22:34 2
Только что проверил, всё работает.
У Вас что-то с путями напутано.
Проверял такую строку
Visual Basic
1
    Shell "C:\Program Files\Microsoft Office\Office12\WinWord.exe C:\1.doc"
0
11504 / 3791 / 680
Регистрация: 13.02.2009
Сообщений: 11,194
23.10.2013, 23:57 3
А не может ли быть вся проблема в "\\"
А то как-то в глаза бросаются
Проверел-работает:
Visual Basic
1
Shell "C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE C:\1.doc"
Видимо там что-то типа семёрки восьмёрки+офис13
1
Заблокирован
24.10.2013, 06:39 4
Не проще ли:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
 
Private Const SW_NORMAL = (1&)
 
Private Sub Command1_Click()
Call ShellExecute(Me.hwnd, "open", "D:\123.doc", 0&, 0&, SW_NORMAL&)
End Sub
Можно открыть любой файл.
1
0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 56
24.10.2013, 15:41  [ТС] 5
Спасибо за ответ, inv.DS. Почему у тебя значение константы SW_NORMAL стоит в скобках и со знаком амперсанда? И почему 4-й, 5-й, 6-й параметры функции так же написаны с амперсандами?
0
Заблокирован
24.10.2013, 15:46 6
Не понял, у меня все нормально без аперсандов и прочего, о чем ты?

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
 
Private Const SW_NORMAL = (1&)
 
Private Sub Command1_Click()
Call ShellExecute(Me.hwnd, "open", "D:\123.doc", 0&, 0&, SW_NORMAL&)
End Sub
Visual Basic
1
2
3
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long)
Объявление переменных.
0
0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 56
24.10.2013, 15:54  [ТС] 7
У тебя константа SW_NORMAL = (1&). Почему 1 в скобках и с амперсандом (&)?
0
Заблокирован
24.10.2013, 15:57 8
Ну поставь без.
0
es geht mir gut
11267 / 4749 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
24.10.2013, 16:04 9
Цитата Сообщение от inv.DS Посмотреть сообщение
Не проще ли:

Вообще-то ТС спрашивал
Цитата Сообщение от art538 Посмотреть сообщение
но хотелось бы разобраться, почему именно эта не работает
0
0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 56
24.10.2013, 16:19  [ТС] 10
Тоже верно. При том, что wordpad запускается, notepad запускается, Word запускаться не хочет ни в какую. Я и двойной слэш ставил ( \\ ), и подчёркивание вместо пробелов, не работает зараза! При том, что на сайте Microsoft (http://support.microsoft.com/kb/74862/EN-US) эта команда выглядит так:
Visual Basic
1
z% = Shell("WinWord Source.Doc",1)
И файл *.doc я сохранил в папку с программой VB, как на сайте сказано. Ничего не помогает.

Добавлено через 4 минуты
Ура! Он запустился! Всем спасибо! Вопрос снят! ))
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
35521 / 19996 / 4186
Регистрация: 12.02.2012
Сообщений: 33,174
Записей в блоге: 13
24.10.2013, 20:46 11
Цитата Сообщение от inv.DS Посмотреть сообщение
Не проще ли:
- еще проще:

Visual Basic
1
2
set wdApp=CreateObject("Word.Application")
set wdDoc=wdApp.Douments.open(Полный_путь_к_документу)
1
Заблокирован
24.10.2013, 20:48 12
Цитата Сообщение от Catstail Посмотреть сообщение
set wdApp=CreateObject("Word.Application")
Создавать целый объект, а потом его уничтожать, неееет!
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
35521 / 19996 / 4186
Регистрация: 12.02.2012
Сообщений: 33,174
Записей в блоге: 13
24.10.2013, 20:50 13
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Цитата Сообщение от inv.DS Посмотреть сообщение
Создавать целый объект, а потом его уничтожать, неееет!
- дык... А при вызове winword.exe разве обходится без создания объекта?
0
Заблокирован
24.10.2013, 20:51 14
Catstail, Да там все на винду ложится, а тут писать еще придется не айс!
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
35521 / 19996 / 4186
Регистрация: 12.02.2012
Сообщений: 33,174
Записей в блоге: 13
24.10.2013, 20:54 15
У тебя 8 строк, у меня две... Кроме того, ты просто открываешь файл, а я получаю COM-объект (т.е. могу много чего с файлом сделать).
0
24.10.2013, 20:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2013, 20:54
Помогаю со студенческими работами здесь

Запуск shell с параметрами
Здравствуйте, есть скрипт на питоне proga.py, который можно запустить с параметрами... И я хочу...

Запуск программы из DOS shell
Здравствуйте! Во время работы появилась необходимость использовать результаты программы...

Запуск Shell из Visual Basic
Visual Studio 2017, Visual Basic. Приложение должно открывать окно с командной строкой (cmd.exe),...

Запуск процесса с помощью WScript.Shell
здравствуйте если в бат файл записать: Print #1, ".\smartid_sample.exe " & Chr$(34) & sFP &...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru