Newsgroup: it.comp.lang.visual-basic
Titolo: Non capisco il comando ShellExecute per aprire un'applicazione

Ciao a tutti devo fare un programmino semplicissimo che sia in grado di
aprire un'applicazione a partire da un documento ad essa associato.
Ad esempio vorrei aprire il file "prova.txt", il programma dove vedere che
in Windows è associato "Notepad" e quindi aprire in Notepad il file
"prova.txt"
Nell guida in linea ho trovato il comando "ShellExecute", ho già introddo un
modulo con la relativa API di sistema e poi associato a un bottono ho
scritto il seguente codice:
Private Sub Command1_Click()
    On Error Resume Next
    Dim X As Long
    X = ShellExecute("Prova", "Open", "c:\prova,txt", 0&, 0&,
SW_SHOWMAXIMIZED)
End Sub
Ma no fa esattamente nulla! dov'è che sbaglio??
Spero in un vostro aiuto. Ringrazio tutti in anticipo.
Ciao da Emiliano - Webmaster di EmiCAD® - Tutto per AutoCAD
e-mail:  
webm...@emicad.it
web:  
www.emicad.it

 SW_SHOWMAXIMIZED)
Se ben ricordo il 4° e 5° parametro sono delle directory, "0" non è una
directory valida.
Prova con vbNullString
Ciao

 aprire un'applicazione a partire da un documento ad essa associato.
VB Declaration
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)
Description
Finds the file name of the program that is associated with a specified file
and either runs the program for the file or prints the file. The Windows
registration editor can be used to associate types of files with particular
applications. For example, text files that have the extension .TXT are
typically associated with the Windows Notepad (NOTEPAD.EXE). Specifying any
file with the .TXT extension to this function will either launch the Notepad
program using the file name as a parameter, or will print the specified
file.
Use with VB
No problem.
Parameter Type/Description
hwnd Long-A handle to a window. Sometimes it is necessary for a Windows
application to show a message box before it has created its own main window.
If this occurs, the window specified by this parameter will be used as the
parent window of the message box. Under Visual Basic you would usually use
the window handle of the active form for this parameter.
lpOperation String-The string "Open" to open the lpFile document or "Print"
to print it. This may be vbNullString to default to "Open."
lpFile String-A program name or the name of a file to print or open using
the associated program.
lpParameters String-A string containing parameters to pass to the executable
file if lpszFile is an executable file. vbNullString
if lpszFile refers to a document file or if no parameters are used.
lpDirectory String-The full path of the default directory to use.
nShowCmd Long-A constant value specifying how to show the launched program.
This matches the nCmdShow parameter to the ShowWindow API function described
in Chapter 5.
Return Value
Long-Greater than 32 on success. Refer to the description of the
FindExecutable function for a list of error codes.
Platform
Windows 95, Windows NT, Win16
come vedi il primo parametro deve essere long (prova zero, se gli metti
l'handle della windows VB NON FUNZIONANO i file che si basano su DDE
(excell, word ....)


Ho provato ma non funziona...


 (excell, word ....)
Ciao,
ti ringrazio per l'aiuto, ma non ci sono ancora riuscito, non è che potresti
scrivermi la stringa da utilizzare per aprire il file "C:\prova.txt" in
Notepad.
Io ho provato con:
Private Sub Command1_Click()
    On Error Resume Next
    Dim X As Long
    X = ShellExecute(0, "Open", "c:\prova.txt", 0&, 0&, SW_SHOWNORMAL)
End Sub
ma non succede niente e se vado nel Task Manager di WinXP mi trovo il
notepad aperto ma io non lo vedo!
Spero vivamente in un tuo aiuto.


 Ma no fa esattamente nulla! dov'è che sbaglio??
prova ad usare un . al posto della virgola :-P .txt non ,txt :-P


Gia fatto, mi sono infatti accorto dell'errore ma continua a non funzionare
lo stesso.
--


Ma no fa esattamente nulla! dov'è
che sbaglio??
Rispondo solo perché l'ho appena usato in un'applicazione.
Il primo parametro non deve essere una stringa ("Prova"), ma l'handle del
form che chiama la funzione.
A me questo funziona...
Option Explicit
Const SW_SHOWMAXIMIZED = 3
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)
Private Sub
Command1_Click()
Dim retVal As Long
On Error Resume Next
retVal = ShellExecute(Form1.hDC, "Open",
"C:\WINNT\Profiles\Administrator\Desktop\pippo.txt", "",
"C:\WINNT\Profiles\Administrator\Desktop", SW_SHOWMAXIMIZED)
End Sub
Vedi qui:
http://216.26.168.92/vbapi/ref/s/shellexecute.html
Ciao
-- 
Giorgio
--------------------------------
Inviato via 
http://usenet.iol.it
 

>Ma no fa esattamente nulla! dov'è che sbaglio??
Aggiungo che per aprire file di AutoCad (ad esempio), si deve scrivere:
retVal = ShellExecute(0, "Open",
"C:\WINNT\Profiles\Administrator\Desktop\Pippo.dwg", "",
"C:\WINNT\Profiles\Administrator\Desktop", SW_SHOWMAXIMIZED)
Ciao



Provato sulla mia pelle!
Se metti come primo parametro l'handle del form che chiama la funzione, non
ti apre file i di word e tutti quei file che vengono passati
all'applicazione assocata tramite DDE.