Results 1 to 2 of 2

Thread: File Associations

  1. #1
    Guest

    Post

    I woudl like to know how you could associate your program with a certian file extension. like lets say i want to make it so when you click a file with the extension .abc it would open up in my application, how would you do that?

  2. #2
    Fanatic Member
    Join Date
    Oct 1999
    Location
    MA, USA
    Posts
    523

    Post

    Code:
    'Make a new project. Add a module. To the form add a command button. 
    
    'Code:
    'Add this code to the module:
    
    Option Explicit
    
    Public Const REG_SZ As Long = 1
    Public Const REG_DWORD As Long = 4
    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 ERROR_NONE = 0
    Public Const ERROR_BADDB = 1
    Public Const ERROR_BADKEY = 2
    Public Const ERROR_CANTOPEN = 3
    Public Const ERROR_CANTREAD = 4
    Public Const ERROR_CANTWRITE = 5
    Public Const ERROR_OUTOFMEMORY = 6
    Public Const ERROR_INVALID_PARAMETER = 7
    Public Const ERROR_ACCESS_DENIED = 8
    Public Const ERROR_INVALID_PARAMETERS = 87
    Public Const ERROR_NO_MORE_ITEMS = 259
    
    Public Const KEY_ALL_ACCESS = &H3F
    Public Const REG_OPTION_NON_VOLATILE = 0
    
    Public Declare Function RegCloseKey Lib "advapi32.dll" _
       (ByVal hKey As Long) As Long
    
    Public 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, _
        ByVal lpSecurityAttributes As Long, _
        phkResult As Long, _
        lpdwDisposition As Long) As Long
    
    Public Declare Function RegOpenKeyEx _
        Lib "advapi32.dll" Alias "RegOpenKeyExA" _
       (ByVal hKey As Long, _
        ByVal lpSubKey As String, _
        ByVal ulOptions As Long, _
        ByVal samDesired As Long, _
        phkResult As Long) As Long
    
    Public 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 lpValue As String, _
        ByVal cbData As Long) As Long
    
    Public Declare Function RegSetValueExLong _
       Lib "advapi32.dll" Alias "RegSetValueExA" _
      (ByVal hKey As Long, _
       ByVal lpValueName As String, _
       ByVal Reserved As Long, _
       ByVal dwType As Long, _
       lpValue As Long, _
       ByVal cbData As Long) As Long
    
    
    Public Sub CreateAssociation()
    
       Dim sPath As String
       
      'File Associations begin with a listing
      'of the default extension under HKEY_CLASSES_ROOT.
      'So the first step is to create that
      'root extension item
       CreateNewKey ".xxx", HKEY_CLASSES_ROOT
       
       
      'To the extension just added, add a
      'subitem where the registry will look for
      'commands relating to the .xxx extension
      '("MyApp.Document"). Its type is String (REG_SZ)
       SetKeyValue ".xxx", "", "MyApp.Document", REG_SZ
       
       
      'Create the 'MyApp.Document' item under
      'HKEY_CLASSES_ROOT. This is where you'll put
      'the command line to execute or other shell
      'statements necessary.
       CreateNewKey "MyApp.Document\shell\open\command", HKEY_CLASSES_ROOT
       
       
      'Set its default item to "MyApp Document".
      'This is what is displayed in Explorer against
      'for files with a xxx extension. Its type is
      'String (REG_SZ)
       SetKeyValue "MyApp.Document", "", "MyApp Document", REG_SZ
       
       
      'Finally, add the path to myapp.exe
      'Remember to add %1 as the final command
      'parameter to assure the app opens the passed
      'command line item.
      '(results in '"c:\LongPathname\Myapp.exe %1")
      'Again, its type is string.
       sPath = "c:\LongPathname\Myapp.exe %1"
       SetKeyValue "MyApp.Document\shell\open\command", "", sPath, REG_SZ
       
      'All done
       MsgBox "The file association has been made!"
       
    End Sub
    
    
    Public Function SetValueEx(ByVal hKey As Long, _
                               sValueName As String, _
                               lType As Long, _
                               vValue As Variant) As Long
    
       Dim nValue As Long
       Dim sValue As String
       
       Select Case lType
          Case REG_SZ
             sValue = vValue & Chr$(0)
             SetValueEx = RegSetValueExString(hKey, _
                                              sValueName, _
                                              0&, _
                                              lType, _
                                              sValue, _
                                              Len(sValue))
             
          Case REG_DWORD
             nValue = vValue
             SetValueEx = RegSetValueExLong(hKey, _
                                            sValueName, _
                                            0&, _
                                            lType, _
                                            nValue, _
                                            4)
       
       End Select
       
    End Function
    
    
    Public Sub CreateNewKey(sNewKeyName As String, _
                            lPredefinedKey As Long)
    
      'handle to the new key
       Dim hKey As Long
      
      'result of the RegCreateKeyEx function
       Dim r As Long
       
       r = RegCreateKeyEx(lPredefinedKey, _
                          sNewKeyName, 0&, _
                          vbNullString, _
                          REG_OPTION_NON_VOLATILE, _
                          KEY_ALL_ACCESS, 0&, hKey, r)
       
       Call RegCloseKey(hKey)
    
    End Sub
    
    
    Public Sub SetKeyValue(sKeyName As String, _
                           sValueName As String, _
                           vValueSetting As Variant, _
                           lValueType As Long)
    
      'result of the SetValueEx function
       Dim r As Long
       
      'handle of opened key
       Dim hKey As Long
       
      'open the specified key
       r = RegOpenKeyEx(HKEY_CLASSES_ROOT, _
                        sKeyName, 0, _
                        KEY_ALL_ACCESS, hKey)
                        
       r = SetValueEx(hKey, _
                      sValueName, _
                      lValueType, _
                      vValueSetting)
                      
       Call RegCloseKey(hKey)
    
    End Sub
    
    'Add this code to the command button:
    
    Private Sub Command1_Click()
    CreateAssociation
    End Sub
    ------------------
    Visual Basic Programmer
    ------------------
    PolComSoft
    You will hear a lot about it.


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width