home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / WindowsCon4328712202001.psc / Mod_StartUpLink.bas < prev    next >
Encoding:
BASIC Source File  |  2000-01-25  |  5.4 KB  |  161 lines

  1. Attribute VB_Name = "Mod_StartUpLink"
  2. Option Explicit
  3.  
  4. '======================================================================
  5. '=================== PLACE RACCOURCI DANS STARTUP =====================
  6. '======================================================================
  7.  
  8. Private Type SHITEMID
  9.     cb As Long
  10.     abID As Byte
  11. End Type
  12.  
  13. Private Type ITEMIDLIST
  14.     mkid As SHITEMID
  15. End Type
  16.  
  17. Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _
  18.     (ByVal pidl As Long, ByVal pszPath As String) As Long
  19.  
  20. Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" _
  21.     (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
  22.  
  23. Private Declare Function fCreateShellLink Lib "VB5stkit.dll" _
  24.     (ByVal lpstrFolderName As String, _
  25.      ByVal lpstrLinkName As String, _
  26.      ByVal lpstrLinkPath As String, _
  27.      ByVal lpstrLinkArgs As String) As Long
  28.  
  29. '================== PLACE RACCOURCI DANS STARTUP ======================
  30.  
  31. Sub DetectionCheminsPrg()
  32.    Dim Dossier As String
  33.    
  34.    Dossier = DossierSpecial(2)
  35.    If Right$(Dossier, 1) = "\" Then Dossier = Left$(Dossier, Len(Dossier) - 1)
  36.    ParamPrg.RepProgActuel = Dossier
  37.    
  38.    Dossier = DossierSpecial(23)
  39.    If Right$(Dossier, 1) = "\" Then Dossier = Left$(Dossier, Len(Dossier) - 1)
  40.    ParamPrg.RepProgAll = Dossier
  41.    
  42.    Dossier = DossierSpecial(7)
  43.    If Right$(Dossier, 1) = "\" Then Dossier = Left$(Dossier, Len(Dossier) - 1)
  44.    ParamPrg.RepStartActuel = Dossier
  45.    
  46.    Dossier = DossierSpecial(24)
  47.    If Right$(Dossier, 1) = "\" Then Dossier = Left$(Dossier, Len(Dossier) - 1)
  48.    ParamPrg.RepStartAll = Dossier
  49.    
  50.    ParamPrg.NomRaccourci = App.Title & ".lnk"
  51.    
  52.    ParamPrg.RaccourciActuel = ParamPrg.RepStartActuel & "\" & ParamPrg.NomRaccourci
  53.    ParamPrg.RaccourciAll = ParamPrg.RepStartAll & "\" & ParamPrg.NomRaccourci
  54. End Sub
  55.  
  56.  
  57. 'rΘcupΦre un dossier spΘcial style c:\windows, c:\windows\recent...
  58. Function DossierSpecial(ByVal CSIDL As Long) As String
  59.    Dim Ret As Long
  60.    Dim Path As String
  61.    Dim IDL As ITEMIDLIST
  62.  
  63. '   Ret = SHGetSpecialFolderLocation(frmPrincipal.hWnd, CSIDL, IDL)
  64.    Ret = SHGetSpecialFolderLocation(0, CSIDL, IDL)
  65.    If Ret = 0 Then
  66.      Path = Space$(260)
  67.      Ret = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal Path)
  68.      If Ret Then DossierSpecial = Left$(Path, InStr(Path, Chr$(0)) - 1)
  69.    End If
  70. End Function
  71.  
  72. Function CHEMIN_RELATIF(Chemin1 As String, CheminRef As String) As String
  73.    'Renvoie l'adresse de Chemin1 (qui est un dossier) relativement
  74.    'α CheminRef
  75.    'Attention : Chemin1 et CheminRef doivent Ωtre donnΘs sans le \ final
  76.    'Ex : Si Chemin1 = "c:\program files" et CheminRef = "c:\windows"
  77.    'alors CHEMIN_RELATIF = "..\program files"
  78.  
  79.    Dim Morceau1() As String, Morceau2() As String
  80.    Dim TailleMorceau1 As Integer, TailleMorceau2 As Integer
  81.    Dim i As Integer, j As Integer
  82.    Dim Prov As String
  83.    
  84.    ReDim Morceau1(1 To 1)
  85.    ReDim Morceau2(1 To 1)
  86.    
  87.    '*** Marque chaque ΘlΘment du chemin dans un tableau
  88.    '* pour chemin1
  89.    For i = 1 To Len(Chemin1)
  90.        If Mid(Chemin1, i, 1) = "\" Then
  91.            TailleMorceau1 = TailleMorceau1 + 1
  92.            ReDim Preserve Morceau1(1 To TailleMorceau1)
  93.            Morceau1(TailleMorceau1) = Prov
  94.            Prov = ""
  95.        Else
  96.            Prov = Prov & Mid(Chemin1, i, 1)
  97.        End If
  98.    Next i
  99.    
  100.    'rajoute le dernier ΘlΘment (non prΘcΘdΘ d'un slash)
  101.    TailleMorceau1 = TailleMorceau1 + 1
  102.    ReDim Preserve Morceau1(1 To TailleMorceau1)
  103.    Morceau1(TailleMorceau1) = Prov
  104.    
  105.    '* pour CheminRef
  106.    For i = 1 To Len(CheminRef)
  107.        If Mid(CheminRef, i, 1) = "\" Then
  108.            TailleMorceau2 = TailleMorceau2 + 1
  109.            ReDim Preserve Morceau2(1 To TailleMorceau2)
  110.            Morceau2(TailleMorceau2) = Prov
  111.            Prov = ""
  112.        Else
  113.            Prov = Prov & Mid(CheminRef, i, 1)
  114.        End If
  115.    Next i
  116.    
  117.    TailleMorceau2 = TailleMorceau2 + 1
  118.    ReDim Preserve Morceau2(1 To TailleMorceau2)
  119.    Morceau2(TailleMorceau2) = Prov
  120.    
  121.    Prov = ""
  122.    For i = 1 To TailleMorceau2 - 1
  123.        Prov = Prov & "..\"
  124.    Next i
  125.    
  126.    For i = 2 To TailleMorceau1
  127.        Prov = Prov & Morceau1(i) & "\"
  128.    Next i
  129.    
  130.    CHEMIN_RELATIF = Left(Prov, Len(Prov) - 1)  'retire le "\" final
  131. End Function
  132.  
  133. Sub CreerRaccourci(IDDestination As Integer)
  134.    ' ParamΦtre : 0 = Effacer les 2 raccourcis
  135.    '             1 = CrΘer pour utilisateur actuel
  136.    '             2 = CrΘer pour tous les utilisateurs
  137.    Dim Ret As Long
  138.    Dim CheminApp As String
  139.    Dim NomFichier As String
  140.    Dim DossierRelatif As String
  141.    
  142.    CheminApp = App.Path
  143.    If Right$(App.Path, 1) <> "\" Then CheminApp = CheminApp & "\"
  144.  
  145.    NomFichier = CheminApp & App.EXEName & ".exe"   'Nom du fichier exe
  146.      
  147.    'Supprime les deux raccourcis
  148.    If (Dir(ParamPrg.RaccourciActuel) <> "") Then Kill ParamPrg.RaccourciActuel
  149.    If (Dir(ParamPrg.RaccourciAll) <> "") Then Kill ParamPrg.RaccourciAll
  150.       
  151.    ' CrΘation des raccourcis
  152.    Select Case IDDestination
  153.       Case 1:  DossierRelatif = CHEMIN_RELATIF(ParamPrg.RepStartActuel, ParamPrg.RepProgActuel)
  154.                Ret = fCreateShellLink(DossierRelatif, App.Title, NomFichier, "")
  155.       Case 2:  DossierRelatif = CHEMIN_RELATIF(ParamPrg.RepStartAll, ParamPrg.RepProgAll)
  156.                Ret = fCreateShellLink(DossierRelatif, App.Title, NomFichier, "")
  157.       Case Else
  158.    End Select
  159. End Sub
  160.  
  161.