www.map-info.ru :: Просмотр темы - не запускается Word/Excel через Run Program
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Пн Июл 13, 2009 2:25 pm    Заголовок сообщения: не запускается Word/Excel через Run Program Добавить ответ со ссылкой на данный текст

так работает
Run Program "C:\Program Files\Microsoft Office\OFFICE11\WinWord.exe"
а так не работает
Run Program "WinWord"
хотя так работает
Run Program "Notepad"
и через командную строку оба приложения запускаются успешно (WinWord и Notepad)
Почему из мапбейсика word не запускается аналогично блокноту?
Попробовала в Delphi получить путь из реестра к Word, но что-то у меня не заработала dll в MapBasic Sad Говорит, что функция (читающая путь из ключа) не определена, хотя в MapBasic она прописана, имя совпадает с экспортируемым из dll
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вт Июл 14, 2009 9:10 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

notepad запускается, потому что путь до него есть в переменной path операционной системы (notepad лежит в каталоге windows, а он есть в пути path). Путь до winword не прописан в переменной path, поэтому при попытке запуска из MapInfo, она его не может найти. То, что winword запускается из командной строки - это видимо трюк Microsoft'а, наверное Windows как-то отдельно знает где это приложение установлено :)
Итак вывод - прописать путь до winword в переменную path
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Вт Июл 14, 2009 12:58 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Про path понятно. Хотя я давненько уже слышала и даже использовала такой фокус, можно в реестре прописать исполняемым файлам псевдонимы. например, для Notepad - "np", для Total Commander - "tc", и т.п. И тогда из командной строки программы запускаются по псевдонимам. И сейчас посчитала, что для MS Word при установке по умолчанию уже задан такой псевдоним WinWord, поэтому запускается из ком.строки только по имени, без пути.

Заведение пути к Word в Path не пойдет. Надо, что бы у всех пользователей Word запускался независимо от настроек системы. Получается - только через DLL, где путь из реестра читается. Осталось заставить ее работать в MapBasic
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вт Июл 14, 2009 1:51 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

1) Про псевдонимы - да, возможно. Создать такой псевдоним для Mapinfo?
2) Покажите декларацию функции из DLL и какую ошибку возвращает ее вызов?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Ср Июл 15, 2009 12:56 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Нет, для MapInfo ничего прописывать не нужно, как и для Word. Надо всего лишь определить путь к приложению Word, куда он установлен у пользователя.
Переделала еще раз DLL. Теперь ошибка не комментируется никак, просто MapInfo при вызове функции из DLL вылетает с сообщением "MapInfo... - обнаружена ошибка. Приложение будет закрыто..." Что не так? Confused

Вот ее определение и вызов в MapBasic:

Declare Function PathToApp lib "явный путь" (ByVal KeyName As String) As String

path_word = PathToApp("SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe")

Вот сама функция в дельфи:

function PathToApp(KeyName: string):string; export;
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
If Not reg.OpenKeyReadOnly(KeyName) Then
Exit;
Result := reg.ReadString('Path');
finally
reg.CloseKey;
reg.Destroy;
end;
end;

exports
PathToApp;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Ср Июл 15, 2009 5:14 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

1) string в параметрах MapBasic врядли поймет, да и утечку памяти получите. Обычно в DLL используют PChar и т.п.
2) модификатор stdcall неплохо было бы прописать
function PathToApp(KeyName: string):string; stdcall; export;
3) Воспользуйтесь стандартными dll для доступа к реестру:

Define HKEY_CURRENT_USER &H80000001

Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Integer, ByVal lpSubKey As String, lpValue As String * 255, lpcbValue As Integer) As Integer

Dim RStr As String * 255
Dim D, Size As Integer

Size = 255
D = RegQueryValue(HKEY_CURRENT_USER, "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe", RStr, Size)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Чт Июл 16, 2009 4:33 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Да что за беда.. Про все новые сообщения в почту объявления приходят, кроме этой моей темы.
Прозевала ответ Sad
Уже переделала функцию в DLL - не путь получаю, а просто ворд запускаю. и только что подсказали про несовместимость типов. Передаю теперь "pchar". Это и надо было сразу мне прописывать, сама не догадалась.
Про реестр учту, скоро пригодится. Спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru