Newsgroup: it.comp.lang.visual-basic
Titolo: Associazioni ai file

Io vorrei che cliccando su file con estensione "*.db" vengano aperti in
automatico dal mio programma dbase6.exe.
Nel mio programma ho messo un
    If Right(Command,3)=".db" then ...
E se io eseguo il programma in questo modo (da Start/Esegui):
    Dbase6.exe file.db
Il file viene aperto correttamente, mentre se imposto nella finestra "Apri
Con" che il file DB venga aperto dal programma dbase6.exe, viene avviato il
programma ma il file non viene aperto. Perchè ?
Cosa vuol dire quel "%1" che il Windows ha messo in "Modifica Tipo di File":
Open
Dbase6.exe "%1"
Posso risolvere la faccenda usando i comandi DDE ?
Se sì, cosa sono questi comandi DDE e come si usano ?
Infine, qualcuno sa come si crea un'associazione automatica ad un tipo file
da VB ?
Occorre scrivere nel registro ?
Grazie infinite

 Cosa vuol dire quel "%1" che il Windows ha messo in "Modifica Tipo di
File":
%1 vuol dire che in quel punto verrà inserito il nome del file sul quale hai
cliccato.
Attenzione cje nel %1 viene anche inserito la path, per cui
controlla che da Start/Esegui ti funzioni, ad esempio questo:
dbase6.exe c:\miadir\file.db
Ciao
Sir Jo

 Occorre scrivere nel registro ?
Questo post (mi pare di Marco Minerva) può esserti utile.
Ciao Francesco
**************************
Bisogna giocare con le API e il registro di configurazione:
-------------------
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_DYN_DATA = &H80000006
Public Const REG_SZ = 1
Public Const REG_DWORD = 4
Public Const ERROR_MORE_DATA = 234
Public Const ERROR_SUCCESS = 0&
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA"
(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegSetValueExString Lib "advapi32.dll" Alias
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData
As Long) As Long
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Function WriteString(ByVal key As Long, ByVal subKey As String,
ByVal szEntry As String, ByVal Stringa As String) As Integer
   Dim hkeySub As Long
   Dim rc, dwWhat As Long
   rc = RegCreateKey(key, subKey, hkeySub)
   If rc <> ERROR_SUCCESS Then
      MsgBox "Errore"
      WriteString = rc
      Exit Function
   End If
   rc = RegSetValueExString(hkeySub, szEntry, 0, REG_SZ, Stringa,
Len(Stringa))
   RegCloseKey (hkeySub)
   WriteString = rc
End Function
Public Sub AssociaFile(ByVal estensione As String, ByVal descrizioneFile As
String, ByVal pathAppAssociata As String, ByVal pathIcona As String)
   Dim PercorsoChiaveSecondaria As String
   Dim risultato As Long
   PercorsoChiaveSecondaria = estensione
   risultato = WriteString(HKEY_CLASSES_ROOT, PercorsoChiaveSecondaria, "",
descrizioneFile)
   PercorsoChiaveSecondaria = descrizioneFile & "\DefaultIcon"
   risultato = WriteString(HKEY_CLASSES_ROOT, PercorsoChiaveSecondaria, "",
pathIcona)
   PercorsoChiaveSecondaria = descrizioneFile & "\shell\Apri\command"
   risultato = WriteString(HKEY_CLASSES_ROOT, PercorsoChiaveSecondaria, "",
pathAppAssociata & " %1")
   PercorsoChiaveSecondaria = descrizioneFile
   risultato = WriteString(HKEY_CLASSES_ROOT, PercorsoChiaveSecondaria, "",
descrizioneFile)
End Sub
-------------------------------
Stupido esempio di utilizzo:
-----------------------------
AssociaFile ".txt", "Documento di testo", "C:\WINDOWS\NOTEPAD.EXE" ,
"C:\Programmi\Plus!\Themes\Scienza Risorse del computer.ico"
-----------------------------

Grazie ad entrambi per le dritte.

 Grazie ad entrambi per le dritte.
Prego! :-)
Ciao Francesco

 programma ma il file non viene aperto. Perchè ?
magari la finestra dell'Apri Con ti riporta il nome del file tutto in
maiuscolo, e tu effettui un confronto case sensitive  :)
prova, invece del tuo Right, a fare
If StrComp(Right$(Command$, 3), ".db") = 0 Then ...
Ciao
Faber