Bonjour,

Voilà ce que j'ai trouvé en VB6 pour associer mon programme à un type de fichier (extension) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Sub CreateAssociationFile(EXT As String, FileType As String, FileName As String, IconPath As String)
    Dim b As Object
On Error Resume Next
    Set b = CreateObject("wscript.shell")
    b.regwrite "HKCR\" & EXT & "\", FileType
    b.regwrite "HKCR\" & FileType & "\", App.EXEName
    b.regwrite "HKCR\" & FileType & "\DefaultIcon\", IconPath
    b.regwrite "HKCR\" & FileType & "\shell\open\command\", FileName & " %L"
    b.regdelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" & EXT & "\Application"
    b.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" & EXT & "\Application", FileName
    b.regdelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" & EXT & "\OpenWithList\"
    b.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" & EXT & "\OpenWithList\a", FileName
End Sub
Ou alors :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_LOCAL_MACHINE = &H80000002
Public Const MAX_PATH = 256&
Public Const REG_SZ = 1
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hkey&, ByVal lpszSubKey$, lphKey&) As Long
Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hkey&, ByVal lpszSubKey$, ByVal fdwType&, ByVal lpszValue$, ByVal dwLength&) As Long
 
Public Sub CreateFileAssociation(EXT As String, FileType As String, FileName As String, FilePathEXE As String, IconPath As String)
    Dim NomClef As String
    Dim ValeurClef As String
    Dim RetVal As Long
    Dim ClefHandle As Long
On Error Resume Next
    NomClef = "Software\" & FileName
    ValeurClef = FilePathEXE
    RetVal = RegCreateKey(HKEY_LOCAL_MACHINE, NomClef, ClefHandle)
    RetVal = RegSetValue(ClefHandle, "", REG_SZ, ValeurClef, 0&)
 
    NomClef = FileName
    ValeurClef = FileType
    RetVal = RegCreateKey(HKEY_CLASSES_ROOT, NomClef, ClefHandle)
    RetVal = RegSetValue(ClefHandle, "", REG_SZ, ValeurClef, 0&)
 
    NomClef = EXT
    ValeurClef = FileName
    RetVal = RegCreateKey(HKEY_CLASSES_ROOT, NomClef, ClefHandle)
    RetVal = RegSetValue(ClefHandle, "", REG_SZ, ValeurClef, 0&)
 
    NomClef = FileName
    ValeurClef = FilePathEXE & " ""%1"""
    RetVal = RegCreateKey(HKEY_CLASSES_ROOT, NomClef, ClefHandle)
    RetVal = RegSetValue(ClefHandle, "shell\open\command", REG_SZ, ValeurClef, MAX_PATH)
    ValeurClef = IconPath & ",0"
    RetVal = RegSetValue(ClefHandle, "DefaultIcon", REG_SZ, ValeurClef, MAX_PATH)
End Sub
Ce que je souhaiterai faire, c'est de pouvoir directement faire cela lors de l'installation via InnoSetup.
Je suppose qu'il doit exister une fonctionalité qui fait ça directement.

Je pourrais évidemment écrire via InnoSetup dans la base de registre comme ci dessus (code VB6) ... Cependant, la méthode VB6 qui écrit dans le registre ne marche pas à 100 %

Si je fais un clic droit "Propriétés" sur mon fichier après avoir lancer le module d'association, l'explorer Windows mouline et ne s'arrête pas ...
Par contre si je double clic pour lancer le prog, aucun problème.

Une idée du problème sur mon code VB6 ? Ou alors une solution via InnoSetup ?

Merci d'avance pour votre aide !

++

Merci d'avance pour votre aide