Code:
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As Any, phkResult As Long, lpdwDisposition As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const REG_CREATED_NEW_KEY = &H1
Private Const REG_OPENED_EXISTING_KEY = &H2
Private Const REG_SZ = 1
Private Const STANDARD_RIGHTS_ALL = &H1F0000
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
Private Const KEY_CREATE_SUB_KEY = &H4
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const KEY_CREATE_LINK = &H20
Private Const SYNCHRONIZE = &H100000
Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
Private Sub Command1_Click()
Dim lRegKey As Long
Dim lResult As Long
Const sApp = "Notepad.exe %1" 'Application to Launch
Const sExt = ".xyz" 'Extension to Associate
Const sExtDesc = "XYZ File" 'Extension Description
Const sIcon = "C:\MyApp.exe,0" 'Icon Resource for Extension
'Create the Extension Entry
Call RegCreateKeyEx(HKEY_CLASSES_ROOT, sExt & "\", 0&, "", 0&, KEY_ALL_ACCESS, ByVal 0&, lRegKey, lResult)
If lResult = REG_CREATED_NEW_KEY Or lResult = REG_OPENED_EXISTING_KEY Then
'Reg Opened/Created Successfully, set Reference to the Application Key
lResult = RegSetValueEx(lRegKey, "", 0&, REG_SZ, ByVal sExtDesc, Len(sExtDesc))
Call RegCloseKey(lRegKey)
If lResult = 0 Then
'Value set successfully, Assign Extension Icon
Call RegCreateKeyEx(HKEY_CLASSES_ROOT, sExtDesc & "\DefaultIcon\", 0&, "", 0&, KEY_ALL_ACCESS, ByVal 0&, lRegKey, lResult)
If lResult = REG_CREATED_NEW_KEY Or lResult = REG_OPENED_EXISTING_KEY Then
'Key Created, Set Icon Resource
lResult = RegSetValueEx(lRegKey, "", 0&, REG_SZ, ByVal sIcon, Len(sIcon))
Call RegCloseKey(lRegKey)
End If
'Create Associated App Key
Call RegCreateKeyEx(HKEY_CLASSES_ROOT, sExtDesc & "\Shell\Open\Command\", 0&, "", 0&, KEY_ALL_ACCESS, ByVal 0&, lRegKey, lResult)
If lResult = REG_CREATED_NEW_KEY Or lResult = REG_OPENED_EXISTING_KEY Then
'Reg Opened/Created Successfully..
lResult = RegSetValueEx(lRegKey, "", 0&, REG_SZ, ByVal sApp, Len(sApp))
If lResult = 0 Then
MsgBox "Extension Associated"
Else
MsgBox "Failed to Associate Extension"
End If
End If
End If
End If
Call RegCloseKey(lRegKey)
End Sub