Как запустить (открыть) вложение?

fedotxxl

Well-known member
09.11.2005
614
0
#1
Вопрос козалось бы легкий - в документе есть attachment'ы. Нужно их программным образом (LS) запустить (активизировать, открыть...)
Как это сделать я так и не нашел =(
Повторяю, что аттачменты, а не оле. Полагаю, выгрузить на хард и запустить. Выгрузить выгрузил, а вот запуск...
 

lionk

Well-known member
05.04.2007
310
2
#4
модальный запуск подпрограмы, авось пригодится

Код:
запуск файла

' путь к временному каталогу
filepath$=Environ$("TEMP")
'аналогично проверьте переменную среды "TMP" или"TMPDIR"
' или в качестве временного каталога используйте заданный ранее filepath$
If filepath$<>"" Then
filepath$=Trim(filepath$) & "\"
End If 
' во временном каталоге проверьте наличие файла "flag"
If Dir(filepath$ & "flag")<>"" Then
Kill filepath$ & "flag" ' если есть уберите его
End If
' кроме того в этом же каталоге возможно нахождения от предыдущего сеанса командного файла "comm.bat", который собственно и запускает внешнюю программу (cм далее)
If Dir(filepath$ & "comm.bat")<>"" Then
Kill filepath$ & "comm.bat" 
End If
' создайте командный файл:
filenum1%=Freefile()
Open filepath$ & "comm.bat" For Output As filenum1%
' строка, запускающая внешнюю программу "programma.exe"
Print #filenum1,"programmat.exe" 
' а эта строка создает флаговый файл
Print #filenum1,"echo > " & filepath$ & "flag"
Close #filenum1
'запустите командный файл 
taskId=Shell(filepath$ & "comm.bat",7)
' проверьте taskId
....
'ждать пока не закочиться выполнение внешней программы и не создастся флаговый файл
Do While Dir(filepath$ & "flag")=""
Loop
' продолжать выполнение агента
 

morpheus

скриптописец
07.08.2006
3 915
1
#5
lionk
жесть ... а если сбой ?? нетуж лучше т.к. как я привёл выше - ВОТ
 

fedotxxl

Well-known member
09.11.2005
614
0
#6
lionk
Спасибо, почти то... только можно батник часто прекращает исполняться только после закрытия запускаемого файла... решить как-то можно?

Morpheus
program can be the name of an executable file that uses a file name extension of BAT, COM, PIF, or EXE
Если у меня файл другого разрешения, то не запускается / не всегда запускает
 

morpheus

скриптописец
07.08.2006
3 915
1
#7
fedotxxl
не замарачивайтесь с этими батниками, юзайте
скрипт запустить и дождаться окончания работы программы
Код:
 Set WShell = CreateObject("WScript.Shell") 
ReturnCode = WShell.Run("C:\boot.ini", 1, True)
Msgbox "123"
 
S

Sandr

#8
lionk
Спасибо, почти то... только можно батник часто прекращает исполняться только после закрытия запускаемого файла... решить как-то можно?
Уберите
Код:
 Do While Dir(filepath$ & "flag")=""
Loop
Morpheus
Если у меня файл другого разрешения, то не запускается / не всегда запускает
А как Вы думаете винда должна определять, что Вы хотите запустить? :)

А вообще Morpheus прав, бантик этот нужен только для модального запуска..
 

morpheus

скриптописец
07.08.2006
3 915
1
#9
А как Вы думаете винда должна определять, что Вы хотите запустить?
Вообщето да... мне кажеть что этот Shell на самом деле обычная "обёртка" к WinAPI функции ShellExecute ( которую кстати можно задекларировать и юзать напрямую из лотуса ) ... так вот этот ShellExecute запускает файлы с асоциированными программами, тоесть doc файл он запустит в Word и т.д.
 

fedotxxl

Well-known member
09.11.2005
614
0
#10
Sandr
Do While Dir(filepath$ & "flag")=""
Loop
У меня этого кода нет

Morpheus
Не знаю, но Shell не в какую не хочет запускать txt... чем это объяснить?

Странно, но заработало... только при первом запуске убило лотус :) . Последний параметр за что отвечает? За синхронизацию (если true, то будет ждать пока не запуститься приложение?)?
 

morpheus

скриптописец
07.08.2006
3 915
1
#11
fedotxxl
SHell и не будет запускать... читайте что я писал ... я писал про ShellExecute

что бы запустить txt файл есть 2 ваварианта
1.
Код:
	Dim result As Integer
result = Shell( Environ("WinDir") + "\NOTEPAD.EXE C:\boot.ini" , 1)
где C:\boot.ini можно заменить на переменную с путём к txt файлу

ну и 2й вариант запустить и ддождаться пока текстовый файл не закроют
Код:
Set WShell = CreateObject("WScript.Shell") 
ReturnCode = WShell.Run("C:\boot.ini", 1, True)
Здесь True заменить на False и тогда скрипт не бедут дожидаться пока программа выполниться а пайдёть дальше
 
S

Sandr

#12
Вообщето да... мне кажеть что этот Shell на самом деле обычная "обёртка" к WinAPI функции ShellExecute ( которую кстати можно задекларировать и юзать напрямую из лотуса ) ... так вот этот ShellExecute запускает файлы с асоциированными программами, тоесть doc файл он запустит в Word и т.д.
По Вашему это Лотус ассоциирует файлы с программами? :) Все это дело находится в реестре винды.. о чем я выше и написал... естесственно что файл без расширения не запустится...
 

morpheus

скриптописец
07.08.2006
3 915
1
#13
Sandr
Ша та мы как глухой с немым об одном и томже говорим )))
 
N

nnikishi

#14
Можно еще потренироваться с Auto Launch (3 вкладка в свойствах формы)
 

morpheus

скриптописец
07.08.2006
3 915
1
#15
nnikishi
та ну тож автозапуск... и запускает он то что вложенно в документ...
 
S

Sandr

#16
Вообще, если ShellExecute не модет открыть файл, нужно ловить ошибку и в случае, если ошибка, то открывать с эксплоером
Shell("explorer.exe " & filename, 1)

В этом случае и файл без расширения откроется нормально...
 

morpheus

скриптописец
07.08.2006
3 915
1
#17
Sandr
неа. шота нето ... explorer откроет папку . как он откроет файл? он с файлами тут вообще никак не связан. ассоциации как уже говорилось в реестре
 
S

Sandr

#18
Sandr
неа. шота нето ... explorer откроет папку . как он откроет файл? он с файлами тут вообще никак не связан. ассоциации как уже говорилось в реестре
Он откроет его как текстовый файл.
Как вариант, если и эксплоер не окроет его, то предлагаьб сохранять файл на диск.. .я такое уже делал :(
 

morpheus

скриптописец
07.08.2006
3 915
1
#19
если и эксплоер не окроет его, то предлагаьб сохранять файл на диск..
та ну некрасиво.. лучше уж так
Код:
Dim result As Integer
result = Shell( Environ("WinDir") + "\NOTEPAD.EXE C:\boot.ini" , 1)
( в случае если знаеш ассоциации ) или WScript - тут точно правильно запустить