ShellExecute

Te pregunto cómo hacer para que un archivo de texto se cargue en otro procesador que no sea el asignado por defecto usando API con Visual Basic.
Por ejemplo para cargar un archivo *.txt hago lo siguiente:
En un módulo:
Public 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
Public Const SHOW_OPENWINDOW = 1
En el evento click:
Private Sub Command1_Click()
Dim cargar As Long
cargar = ShellExecute(Me.hwnd, vbNullString, "agenda.txt", vbNullString, "C:\Temp\", SHOW_OPENWINDOW)
End Sub
Esto me carga agenda.txt que se encuentra en la carpeta c:\Temp en el Notepad
¿Cómo hacer para que se cargue en el Word?
Saludos
Enrique
PD:¿Te llegó mi anterior pregunta sobre link.exe y cómo usarlo?
Respuesta
1
La respuesta que me enviaste sobre link.exe la contesté hace tiempo, echa un vistazo a tus mensajes nuevos que seguro que está, y si no dímelo y la vuelvo a enviar.
Sobre esta pregunta. He encontrado un ejemplo que abre un documento HTML con la aplicación predeterminada, al igual que con el código que me has enviado. Lo que pasa es que se abre la aplicación asociada al tipo de archivo que vas a abrir, de forma que si el archivo fuera .doc lo abriría con el word.
Para hacerlo de otra forma, sin usar ShellExecute ni FindExecute, importa la referencia "Microsoft Word 9.0 Object Library" a tu proyecto, pulsa F2 y selecciona la biblioteca "Word", dentro de esa biblioteca el objeto Application es el que maneja la aplicación Word. Como verás la biblioteca es inmensa, así que te recomiendo que mires en la ayuda de visual basic o en www.microsoft.com.
Un ejemplo sobre esto: http://msdn.microsoft.com/vbasic/technical/01pasttips.asp#5-14-01
Ejemplos sobre ShellExecute con Word:
1. Es parecido al que tu me mandas:
Dim FileName As String, Dummy As String
Dim BrowserExec As String * 255
Dim RetVal As Long
Dim FileNumber As Integer
Const SW_SHOWNORMAL = 1 ' Restores Window if Minimized or
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
Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" _
(ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As _
String) As Long
'<Code> ---------
BrowserExec = Space(255)
FileName = "C:\temphtm.HTM"
FileNumber = FreeFile() ' Get unused file number
Open FileName For Output As #FileNumber ' Create temp HTML file
Write #FileNumber, "
" ' Output text
Close #FileNumber ' Close file
' Then find the application associated with it.
RetVal = FindExecutable(FileName, Dummy, BrowserExec)
BrowserExec = Trim$(BrowserExec)
' If an application is found, launch it!
If RetVal <= 32 Or IsEmpty(BrowserExec) Then ' Error
Msgbox "Could not find a browser"
Else
RetVal = ShellExecute(frmMain.hwnd, "open", BrowserExec, _
"www.myurl.com", Dummy, SW_SHOWNORMAL)
If RetVal <= 32 Then ' Error
Msgbox "Web Page not Opened"
End If
End If
Kill FileName ' delete temp HTML file
Esta otra dirección es una aplicación que abre un documento word y le va añadiendo texto usando el control "Word": http://www.statsoftinc.com/stadevvb3.html.
Este otro ejemplo es para abrir Word en segundo plano: http://www.tmworld.com/articles/art7_pc_039748.htm. Al final hay un enlace al código fuente.
Muchas gracias por tus indicaciones siempre tan útiles. Si puedes, por favor, envíame de nuevo la respuesta por el Link.exe porque no la he recibido.
Hasta pronto.
Enrique

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas