How does the Apple iTunes web site launch the iTunes application on my computer when I click the blue “Launch iTunes” button?

后端 未结 5 455
广开言路
广开言路 2020-12-25 07:46

This is new to me as a desktop developer.

If I could figure out how this is accomplished, it may be relevant to some research I\'m doing, specifically how to migrate

5条回答
  •  轮回少年
    2020-12-25 08:46

    The easiest way is to register a filetype to your application (also called File Association), for example ".myp" and when the user press "start myapp" on the site it downloads a file "startapp.myp".

    Windows will then look at the extention of the file and find that it is registered to your app and start your application with the file as a command-parameter. Your app can then read the file and do stuff depending of it contents.

    Here are code to register a filetype to your application done in VB.Net:
    (Example is taken from http://www.developerfusion.com/article/36/file-assocation/2/ but copied here for persistent reason, check original site for comments)

    '// Registry windows api calls
    Private Declare Function RegCreateKey& Lib "advapi32.DLL" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpszSubKey As String, ByVal lphKey As Long)
    Private Declare Function RegSetValue& Lib "advapi32.DLL" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpszSubKey As String, ByVal fdwType As Long, ByVal lpszValue As String, ByVal dwLength As Long)
    '// Required constants
    Private Const HKEY_CLASSES_ROOT = &H80000000
    Private Const MAX_PATH = 256&
    Private Const REG_SZ = 1
    
    '// procedure you call to associate the tmg extension with your program.
    Private Sub MakeDefault()
        Dim sKeyName As String  '// Holds Key Name in registry.
        Dim sKeyValue As String  '// Holds Key Value in registry.
        Dim ret As Long    '// Holds error status if any from API calls.
        Dim lphKey As Long    '// Holds created key handle from RegCreateKey.
    
        '// This creates a Root entry called "TextMagic"
        sKeyName = "TextMagic" '// Application Name
        sKeyValue = "TextMagic Document" '// File Description
        ret = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey)
        ret = RegSetValue&(lphKey&, Empty, REG_SZ, sKeyValue, 0&)
    
        '// This creates a Root entry called .tmg associated with "TextMagic".
        sKeyName = ".tmg" '// File Extension
        sKeyValue = "TextMagic" '// Application Name
        ret = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey)
    
        ret = RegSetValue&(lphKey, Empty, REG_SZ, sKeyValue, 0&)
    
        '//This sets the command line for "TextMagic".
        sKeyName = "TextMagic" '// Application Name
        If Right$(App.Path, 1) = "\" Then
            sKeyValue = App.Path & App.EXEName & ".exe %1" '// Application Path
        Else
            sKeyValue = App.Path & "\" & App.EXEName & ".exe %1" '// Application Path
        End If
        ret = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey)
        ret = RegSetValue&(lphKey, "shell\open\command", REG_SZ, sKeyValue, MAX_PATH)
    End Sub
    
    Private Sub Form_Load()
        '// ensure we only register once. When debugging etc, remove the SaveSetting line, so your program will
        '// always attempt to register the file extension
        If GetSetting(App.Title, "Settings", "RegisteredFile", 0) = 0 Then
            '// associate tmg extension with this app
            MakeDefault()
            SaveSetting(App.Title, "Settings", "RegisteredFile", 1)
        End If
       '// check command line argument:
        If Command$ <> Empty Then
            '// we have a file to open
            '// Fetch the file name from Command$ and then read the file if needed.
        End If
    
    End Sub
    

提交回复
热议问题