Newsgroup: it.comp.lang.visual-basic
Titolo: Come creare l'associazione con un tipo di file

Qualcuno potrebbe gentilmente mandarmi del codice di esempio per creare
l'associazione con un tipo di file? Ho notato differenze tra Win 95 e 98,
nel senso che in Win 98, una mia applicazione (che la prima volta che viene
avviata crea l'associazione) se installata in una cartella con degli spazi
nel nome apre i documenti ma non ne visualizza correttamente il path e il
nome. Questo problema non si verificava con Win 95. Aggiungendo delle
virgolette nel codice il problema lo risolvo con il 98 e funziona con il 95,
ma che succede in NT?
Questo codice, con qualche modifica,  l'ho preso da "I segreti di Visual
Basic"di H. Davis, Apogeo.
Forse il problema dipende dalle API usate? Cioč sarebbe meglio metterci le
versioni piů recenti delle API?
Grazie.
'-----------Modulo standard------
Public MyExtension as String
Public MyPath as String
'MyExtension č l'estensione
'MyPath č il path dell'applicazione
'-----------Modulo standard------
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA"
(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal
hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData
As String, ByVal cbData As Long) As Long
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal
hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const REG_SZ = 1                         ' Stringa Unicode con
terminazione null
Public Const MAX_PATH = 260
Public Const ERROR_SUCCESS = 0&
'--------------------------------------
'----Routine che crea l'associazione---------
Dim RetVal As Long, sKeyValue As String, sKeyName As String, phkResult As
Long
Dim FileType As String, FileNum As Integer
Dim FileOut As String
FileType = UCase$(Mid$(MyExtension, 2)) & "file"
sKeyName = MyExtension
RetVal = RegOpenKey(HKEY_CLASSES_ROOT, sKeyName, phkResult)
If RetVal = ERROR_SUCCESS Then
RegCloseKey HKEY_CLASSES_ROOT
Else
sKeyName = MyExtension
sKeyValue = FileType
RetVal = RegCreateKey(HKEY_CLASSES_ROOT, sKeyName, phkResult)
RetVal = RegSetValue(phkResult, "", REG_SZ, sKeyValue, 0&)
sKeyName = FileType
sKeyValue = App.Title
RetVal = RegCreateKey(HKEY_CLASSES_ROOT, sKeyName, phkResult)
RetVal = RegSetValue(phkResult, "", REG_SZ, sKeyValue, MAX_PATH)
sKeyName = FileType
'sotto ho aggiunto io i Chr$(34)
'altrimenti i nomi con degli spazi
'Win 98 non me li dava 'correttamente
sKeyValue = Chr$(34) & MyPath & App.EXEName & ".exe" & Chr$(34) & " %1"
RetVal = RegCreateKey(HKEY_CLASSES_ROOT, sKeyName, phkResult)
RetVal = RegSetValue(phkResult, "shell\open\command", REG_SZ, sKeyValue,
MAX_PATH)
sKeyName = FileType
'forse occorrono anche qui sotto dei Chr$(34)
sKeyValue = MyPath & App.EXEName & ".exe,0"
RetVal = RegCreateKey(HKEY_CLASSES_ROOT, sKeyName, phkResult)
RetVal = RegSetValue(phkResult, "DefaultIcon", REG_SZ, sKeyValue, MAX_PATH)
RegCloseKey HKEY_CLASSES_ROOT
RegCloseKey phkResult
End If

non vorrei sbagliarmi, ma sul Sito Comune dovrebbe esserci un progettino....
Ciao,
Moreno
#sirri#@
morenosoft.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.morenosoft.com/MSVBSite/
Home Page - 
http://www.geocities.com/SiliconValley/Bridge/1414/
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
---------------------------------------------------------------------------