Открытие файла по ассоциации

  • Автор темы Klido
  • Дата начала
K

Klido

#1
наткнулся на красивый пример Multi-Platform File Launch With LotusScript:

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
Код:
Option Public
Option Explicit
Uselsx "*javacon"

Sub Initialize
Dim workspace As New NotesUIWorkspace
Dim response As Variant
response = workspace.SaveFileDialog(False, "File name", "All Files|*.*", "", "")
If Not Isempty (response) Then
Dim fileName As String
fileName = response(0)
Dim jSession As JavaSession
Dim jClass As JavaClass
Dim jMethod As JavaMethod
Set jSession = New JavaSession()
Set jClass = jSession.GetClass("org/eclipse/swt/program/Program")
Set jMethod = jClass.GetMethod("launch","(Ljava/lang/String;)Z")
Call jMethod.Invoke(, fileName)
End If
End Sub
 
13.03.2009
625
1
#2
еще в копилку способов запуска файлов:
можно юзать свойство автозапуска формы
в бд создаен форму launcher, на нее RT поле , в св-вах формы на третьей закладке "launch first attchment".
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код запуска</div></div><div class="sp-body"><div class="sp-content">
Код:
Function launchAttachment( attObject As NotesEmbeddedObject )
Dim srcItem As NotesRichTextItem
Set srcItem = attObject.Parent 

Dim launcher As New NotesDocument( srcItem.Parent.ParentDatabase )
launcher.Form = "launcher"
launcher.SaveOptions = "0"

' копируем RT поле в launcher
Const LAUNCHER_FIELD = "Body"
Dim launchedItem As NotesRichTextItem
Set launchedItem = srcItem.CopyItemToDocument( launcher , LAUNCHER_FIELD )

' удаляем лишние аттачи
Forall eo In launchedItem.EmbeddedObjects
If eo.Name <> attObject.Name Then eo.Remove
End Forall

' запускаем
Dim ws As New NotesUIWorkspace
Call ws.EditDocument( False , launcher , False )
End Function
 

savl

Lotus team
28.10.2011
2 136
105
#3
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Java-вариант</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>public String tempdir() {
String tempdir = System.getProperty("java.io.tmpdir");
if (!(tempdir.endsWith("/") || tempdir.endsWith("\\")))
tempdir = tempdir + System.getProperty("file.separator");
return tempdir;
}

public static boolean isWindows() {
String os = System.getProperty("os.name").toLowerCase();
return (os.indexOf("win") >= 0);
}

public static boolean isMac() {
String os = System.getProperty("os.name").toLowerCase();
return (os.indexOf("mac") >= 0);
}

//...

if (isWindows()) {
//opening pdf-file from following method suddenly broke....
//better to comment it out until solution is found.
Process p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + filePath);
p.waitFor();
}
else if (isMac()) {
Process p = Runtime.getRuntime().exec("/usr/bin/open " + filePath);
p.waitFor();
}[/CODE]
 

garrick

Lotus team
26.10.2009
911
61
#4
filename = ПОЛНЫЙ_ПУТЬ_И_ИМЯ_ВАШЕГО_PDF_ФАЙЛА

1. LS и @фомулы - URLopen "file:///filename"
2. Java (в LN 8.5) - Desktop.getDesktop().open(filename);
3. Windows API - см. ShellExecute
 

savl

Lotus team
28.10.2011
2 136
105
#5
@URLOpen у меня всегда пытается открыть через FireFox.
LS вариант тоже, потом поставил последний параметр True, стало ок.
Код:
Dim ws As New NotesUIWorkspace
Call ws.URLOpen("file:////C:\\insidenotes.pdf",,,,,,,,True)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 600
277
#6
Если запускаем через Shell надо знать какой программой открыть файл и где она расположена, через ShellExecute WinAPI "запускаем" только файл, который откроется в приложении, связанном с расширением этого файла. Как я уже "упоминал" выше, самый простой платформеннонезависимый способ URLOpen.
яж написал - "не нужно знать" запускаем комнндный просессор (cmd.exe или bash), а в нем:

-винда - просто имя файла (а оно запустит приладу его исполняющую); пример:
Код:
result = Shell({cmd.exe /c "C:\Program Files\lotus\notes\EDGE LL III.pdf"})
-МАК - open, ключик -a , по-моему

-Linux (по тербованиям нотусни - gvfs будет установлена) gvfs-open

Добавлено: но таки да - если пролезет с URLOpen (хотя я б так не закладывался) - то лучше.