Réponse acceptée !
Salut,
Si j'ai bien compris, tu veux juste que ton exe se colle dans le démarrage de l'ordi dès la 1ère exécution ?
Je ne connais pas tes motivations. Avant, j'aurais pensé que c'était pour des motifs pas très avouables et d'aucun(e)s m'ont fait remarqué que j'étais trop strict. Quelquepart, c'était vrai.
Finalement, j'ai évolué, pourquoi refuserais-je de redistribuer une connaissance apprise de Microsoft lui-même ? D'autant plus que celui qui lance l'exécution d'une pièce jointe ou de n'importe quel exe sans savoir d'où elle/il provient et ce qu'elle/il est sensé(e) faire est un GROS BLAIREAU. Et les FireWall et autres AntiVirus (surtout s'ils ne sont pas à jour) n'éviteront jamais la CONNERIE du blaireau moyen.
De toutes façons, ce n'est pas avec VB qu'on peut faire le plus de mal.
Alors, voilà un chti code qui va permettre à ton exe de se copier dans le dossier de démarrage (98 ou xp) de l'utilisateur (même s'il l'exécute comme pièce jointe d'un e-mail). C'est du tout vb6 mais on peut l'adapter en vb.net.
Bien sùr, si ton prog utilise des ocx ou dll non présentes sur le PC cible, ça ne fonctionnera pas sans une install de ces dll et ocx, voir la réponse de crenaud76. Il y a des solutions mais pour l'instant, je ne m'étendrai pas la-dessus.
Autre chose, ce code ne fonctionne qu'en exécution. Pour le tester, crée un exe et lance-le. Garantie : tel qu'il est il ne te pourrira pas la vie.
Copie ce qui suit dans ton module principal, dans les propriétés de ton projet\objet de démarrage tu mets "sub main" et, à la place de '... dans le sub main, tu ouvres ta form principale (form.show) ou tu exécutes ce que tu veux :
' Récipient pour un item
Private Type SHITEMID
cb As Long
abID As Byte
End Type
' Récipient pour une liste d'items
Private Type ITEMIDLIST
mkid As SHITEMID
End Type
' Fonction API pour récupérer l'ID d'un dossier spécial de Windows
Private Declare Function SHGetSpecialFolderLocation _
Lib "shell32.dll" _
( _
ByVal hwndOwner As Long, _
ByVal nFolder As Long, _
pidl As ITEMIDLIST _
) As Long
' Fonction API pour récupérer le chemin du dossier spécial
Private Declare Function SHGetPathFromIDList _
Lib "shell32.dll" Alias "SHGetPathFromIDListA" _
( _
ByVal pidl As Long, _
ByVal pszPath As String _
) As Long
Private Function GetSpecialfolder(CSIDL As Long) As String
Dim IDL As ITEMIDLIST
Dim path As String
' Récupération du chemin du dossier spécial choisi
If SHGetSpecialFolderLocation(100, CSIDL, IDL) = 0 Then
path = Space$(512) 'init du buffer
Call SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal path)
' On enlève les chr$(0)'s inutiles
GetSpecialfolder = Split(path, Chr$(0))(0)
End If
End Function
Sub Main()
Dim PathFicArrivee As String
' path où doit arriver l'exe
PathFicArrivee = GetSpecialfolder(&H7) & "\" & App.EXEName & ".exe"
' s'il n'est pas déjà là, on le copie
If Dir(PathFicArrivee) = "" Then FileCopy ".\" & App.EXEName & ".exe", PathFicArrivee
'...
End Sub
Si ce post n'est pas supprimé par un admin aussi chatouilleux que j'étais avant, bonne prog !
-------------------------------------------------
Dresseur de puces, .... normal pour un loup
!?