lancer un exe au demarrage

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: lancer un exe au demarrage

Message par djes »

Ar-S a écrit :Je me doutais bien que l'unicode allait me faire un coup de traf.. ma variable longueur semble pourtant bonne.
Cependant comme le l'ai indiqué, le module de Ts-Soft fonctionne au poil. testé en simple reg_sz et et Dword.
Me suis fait un petit soft pour activer/désactiver le transfert TCP/IP sous windows.
Tu as bien fait, son module est très propre.
zaphod_b
Messages : 76
Inscription : mar. 09/déc./2014 20:02

Re: lancer un exe au demarrage

Message par zaphod_b »

salut à tous,

chez moi (win 10 x64 pro) et avec pb 5.61 x64 ou x86 ca marche :

Code : Tout sélectionner

If FileSize(Chemin) > 0
      ;chemin=ReplaceString(chemin,"\","\\")
      Chemin = #DQUOTE$ + Chemin + #DQUOTE$
      *che=AllocateMemory(StringByteLength(chemin,#PB_Unicode)+ SizeOf(CHARACTER))
      PokeS(*che,chemin,-1,#PB_Unicode)
      Debug "Vérif Chemin : " + Chemin                                           ;------- TEST
      Longueur = Len (Chemin)
      RegCreateKey_ (key,@Path,@CurKey)
      RegSetValueEx_ (CurKey,@Value,0, #REG_SZ ,*che, MemorySize(*che)+1)
      RegCloseKey_ (CurKey)
      FreeMemory(*che)
      Succes = 1
    Else
      Succes = 0
    EndIf
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: lancer un exe au demarrage

Message par Ar-S »

Merci zaphod_b, je confirme le bon fonctionnement de ta modif. Même si je vais resté avec le module de ts-soft.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: lancer un exe au demarrage

Message par Zorro »

ma solution a le mérite de ne pas toucher au registre (pour les prg lancé au démarrage ) :)
l'ideal etant de faire un raccourcis et de copier ce raccourcis

comme le fait ce code :
c'est plus respectueux pour le systeme , puisque c'est le raccourcis qui est copié et non pas le prg lui-meme , noter que ce code fonctionne pour tout les Windows ... (en principe )

Code : Tout sélectionner




; *******************************
Declare.s SpecialFolder2(folderno)
#CSIDL_STARTUP=$07   
; *******************************

Global demarrage$=SpecialFolder2(#CSIDL_STARTUP)+"\" ; recupere le path du dossier de demarrage de votre windows


; creer un lien vers mon prg "Starter" situé dans "c:\Starter\"  , et le met dans le dossier de demarrage de windows (toute version)
CreateShellLink("c:\Starter\starter.exe",demarrage$+"Starter.lnk","","Pure FUN",fichier(1)\chemin.s,#SW_SHOWNORMAL,0,"%SystemRoot%\system32\SHELL32.dll",12)





Procedure CreateShellLink(PATH$, LINK$, Argument$, DESCRIPTION$, WorkingDirectory$, ShowCommand.l, HotKey.l, IconFile$, IconIndexInFile.l)

; de Danilo
      ; CreateLink
      ;             - TARGET$ for the Link ("c:\PureBasic\purebasic.exe")
      ;             - LINK$ - name of the Link ("c:\pb.lnk")
      ;             - Argument$ for the target  ("%1")
      ;             - Description$ = Description and Tooltip ("Start PureBasic")
      ;             - Working Directory ("c:\PureBasic\")
      ;             - Show command: #SW_SHOWNORMAL or #SW_SHOWMAXIMIZED or #SW_SHOWMINIMIZED
      ;             - HotKey - no need to use this :)
      ;             - IconFile + Index ( "c:\PureBasic\purebasic.exe" , 1 )
      
      CoInitialize_(0)
      If CoCreateInstance_(?CLSID_ShellLink,0,1,?IID_IShellLink,@psl.IShellLinkA) = 0
            
            Set_ShellLink_preferences:
            
            ; The file TO which is linked ( = target for the Link )
            ;
            psl\SetPath(PATH$)
            
            ; Arguments for the Target
            ;
            psl\SetArguments(Argument$)
            
            ; Working Directory
            ;
            psl\SetWorkingDirectory(WorkingDirectory$)
            
            ; Description ( also used as Tooltip for the Link )
            ;
            psl\SetDescription(DESCRIPTION$)
            
            ; Show command:
            ;               SW_SHOWNORMAL    = Default
            ;               SW_SHOWMAXIMIZED = aehmm... Maximized
            ;               SW_SHOWMINIMIZED = play Unreal Tournament
            psl\SetShowCmd(ShowCommand)
            
            ; Hotkey:
            ; The virtual key code is in the low-order byte,
            ; and the modifier flags are in the high-order byte.
            ; The modifier flags can be a combination of the following values:
            ;
            ;         HOTKEYF_ALT     = ALT key
            ;         HOTKEYF_CONTROL = CTRL key
            ;         HOTKEYF_EXT     = Extended key
            ;         HOTKEYF_SHIFT   = SHIFT key
            ;
            psl\SetHotkey(HotKey)
            
            ; Set Icon for the Link:
            ; There can be more than 1 icons in an icon resource file,
            ; so you have to specify the index.
            ;
            psl\SetIconLocation(IconFile$, IconIndexInFile)
            
            
            ShellLink_SAVE:
            ; Query IShellLink For the IPersistFile interface For saving the
            ; shortcut in persistent storage.
            If psl\QueryInterface(?IID_IPersistFile,@ppf.IPersistFile) = 0
                        ; Ensure that the string is Unicode.
                        mem.s = Space(1000) ;AllocateMemory(1,1000)
                        MultiByteToWideChar_(#CP_ACP, 0, LINK$, -1, mem, 1000)
                        ;Save the link by calling IPersistFile::Save.
                        hres = ppf\Save(mem,#True)
                        Result = 1
                        ppf\Release()
                  EndIf
                  psl\Release()
            EndIf
            CoUninitialize_()
            ProcedureReturn Result
            
            DataSection
                  CLSID_ShellLink:
                  ; 00021401-0000-0000-C000-000000000046
                  Data.l $00021401
                  Data.w $0000,$0000
                  Data.b $C0,$00,$00,$00,$00,$00,$00,$46
                  IID_IShellLink:
                  ; DEFINE_SHLGUID(IID_IShellLinkA,         0x000214EEL, 0, 0);
                  ; C000-000000000046
                  Data.l $000214EE
                  Data.w $0000,$0000
                  Data.b $C0,$00,$00,$00,$00,$00,$00,$46
                  IID_IPersistFile:
                  ; 0000010b-0000-0000-C000-000000000046
                  Data.l $0000010b
                  Data.w $0000,$0000
                  Data.b $C0,$00,$00,$00,$00,$00,$00,$46
            EndDataSection
            
      EndProcedure
      
      Procedure.s SpecialFolder2(folderno)
            listptr=0
            result$=Space(270)
            SHGetSpecialFolderLocation_(0,folderno,@listptr)
            SHGetPathFromIDList_(listptr,@result$)
            ProcedureReturn Trim(result$)
      EndProcedure

Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: lancer un exe au demarrage

Message par Ar-S »

Ce n'est ni plus moins respectueux. Je pense que du moment ou tu copies ce raccourcis dans la section dédiée %appdata% etc.. (ou au redémarrage) l'info est copiée dans la BDR.
Le plus important dans les 2 cas est de prévoir la suppression du raccourcis et/ou de l'enregistrement registre via l'exe sinon en cas de suppression, ça laissera une saleté.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: lancer un exe au demarrage

Message par Zorro »

dans mon cas on ne touche pas au registre , c'est quand meme plus secure pour le systeme :)

et je ne pense pas que Windows le fasse, chez moi les prg se trouvant dans le dossier de démarrage
ne sont pas répertoriés dans la Clef "Run" ou "Run once" de la base de registre ...

il existe plusieurs façons de lancer un prg au démarrage , comme l'autoexec.bat qui en est une autre ...
le registre ne contient pas tout ... ça serai trop simple pour les anti virus ;)

de plus , il existe 2 bases de registre maintenant , celle compatible avec les 32 bits , et la nouvelle compatible uniquement 64 bits ....
c'est pour ça que j'ai signalé que suivant les systemes d'exploitation (XP,Seven Win10 ) passer par le registre peut ne plus marcher
(voir la librairie la Droopy pour avoir plus de detail a ce sujet )

j'ai eu le cas avec mon Starter , que j'ai du migrer dans le dossier de démarrage , la clef "Run" ne marchait plus sous Win10 64 bits !(d'ou le code ci dessus )

extrait de la Droopy Lib
RegMode(Ex,Wow64)



--------------------------------------------------------------------------------

Description : Set Registry access mode

Ex Use Extended Registry Functions
#False (Default) use old Registry functions
True : Use 'New' Registry Functions (Some key cannot be viewed as simple user)

Wow64 Access an Alternate Registry View
By default, a 32-bit application running on WOW64 accesses the 32-bit registry view and a 64-bit application accesses the 64-bit registry view.
The following flags enable 32-bit applications to access redirected keys in the 64-bit registry view and 64-bit applications to access redirected keys in the 32-bit registry view.
These flags have no effect on shared registry keys.
#KEY_WOW64_64KEY Access a 64-bit key from either a 32-bit or 64-bit application. (RegEx(#True) required)
#KEY_WOW64_32KEY Access a 32-bit key from either a 32-bit or 64-bit application.
en clair si tu avais un prg qui ecrivait dans le registre de la version 32 bits (sous Seven on avait acces aux deux , de memoire ... ), sur un Ordi 64 bits, ça pourra ne plus marcher !
car il y a eu une "extension" de la base de registre en 64 bits
(une arborescence de clef suplémentaire avec doublage des noms , par exemple la clef "Run" est présente dans les deux arbo)
d'ou la presence de la fonction " Set Registry access mode" de la Droopy Lib :)

seven 64 bits pouvait fonctionner si la clef 32 bits etait utilisé , mais pour windows 10 64 bits c'est uniquement la version 64 bits qui est retenue...
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: lancer un exe au demarrage

Message par Ar-S »

Pour ce que j'ai testé avec le code suivant sous W10 ça marche très bien. Évidement faut compiler en 64bits avec ton w10 x64 et avec droit admin. Dés que tu touches au registre ou aux fichiers système il est de toute façon préférable de compiler avec les droits admin.
Pour le module de TS-Soft, la valeur Dword que je voulais modifier ne se modifiait qu'avec la compilation avec droit admin sinon l’accès était refusé.

L'avantage de le foutre dans le registre est tout de même de pouvoir ensuite le désactiver directement de l'onglet démarrage du gestionnaire de périph (anciennement via msconfig)

Code : Tout sélectionner

Procedure.b StartWithWindows(Chemin.s, state.b)
  ; Original code by Joakim Christiansen / StartWithWindows(state.b)
  ; Modify by Ar-S / 2012 - Add filepath to the proce and some checks
  ; v2017 Pb 5.46x64 - special thanks to zaphod_b

  Protected key.l = #HKEY_CURRENT_USER ;or #HKEY_LOCAL_MACHINE pour tout les utilisateur de l'ordi
  Protected Path.s = "Software\Microsoft\Windows\CurrentVersion\Run" ;ou RunOnce pour le lancer qu'une fois
  Protected.s Value, String
  Protected CurKey.l
  Protected.b Succes
 

  String.s = GetFilePart(Chemin)
  Debug "String.s : " + String.s                                          ;------- TEST
  Value.s = RemoveString(String, "."+GetExtensionPart(String))
  Debug "Value.s : " + Value.s                                          ;------- TEST
 
  ; Créer la clef
  If state = 1
    ; Avant de créer la clé, on vérifie que le prog existe
    If FileSize(Chemin) > 0
      Chemin = Chr(34) + Chemin + Chr(34)
      Debug "Vérif Chemin : " + Chemin                                           ;------- TEST
      *che=AllocateMemory(StringByteLength(chemin,#PB_Unicode)+ SizeOf(CHARACTER))
      PokeS(*che,chemin,-1,#PB_Unicode)
     Debug "longueur : " + Longueur
      RegCreateKey_ (key,@Path,@CurKey)
      RegSetValueEx_ (CurKey,@Value,0, #REG_SZ ,*Che, MemorySize(*che)+1)
      RegCloseKey_ (CurKey)
      Succes = 1
    Else
      Succes = 0
    EndIf
   
    ; Suppression de clé
  Else
    RegOpenKey_ (key,@Path,@CurKey)
    RegDeleteValue_ (CurKey,@Value)
    RegCloseKey_ (CurKey)
    Succes = 1
  EndIf

  ProcedureReturn Succes
EndProcedure

;- EXEMPLE
; Inscrire la clé
Debug StartWithWindows("D:\_EXE\TicTacToe.exe",1)

; Supprime la clé
;   Debug StartWithWindows("D:\_EXE\TicTacToe.exe",0)

; Dans les 2 cas, retourne 1 si succés ou 0 si erreur (ne peut intervenir que si le programme n'existe pas).
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: lancer un exe au demarrage

Message par Zorro »

Pour illustrer ce que j'ai dis a propos de la base de registre et de son extension sous windows 10

SpyBot montre ça tres bien
sur cette capture montrant ma base de registre actuelle sur mon ordi
vous verrez les 2 clefs de registre AYANT LE MEME NOM surligné en Jaune , mais se situant a deux endroit different dans le registre
la partie surlignée en bleu clair, montre que le contenue de ces 2 clefs sont differents ...

Image

c'est de ça que je parlais lorsque j'ai cité la Droopy lib , avec ses fonctions qui permettent de choisir dans quelles clef (32 ou 64 bits) on ecris !

a l'epoque ou j'ai fait Starter , j'ecrivais dans la clef 32 bits , mais par la suite, en changeant de systeme d'exploitation , passage en win10
mon starter ne démarrai plus ....
c'est pourquoi depuis, je prefere utiliser le dossier de demarrage (Shell:Startup) << la aussi il y en a 2 ; le "global", et le "user"
mon code ouvre le "user" , pour ouvrir le global, j'ai pas cherché .... :)

apres , chacun fait comme il veux , c'est clair , mais je pense qu'il faut savoir ce detail :)


ps: je verifie mon pc , car il y a 3 jour suite a un lancement d'un exe exotique, je me suis retrouvé avec 375 menaces sur mon ordi :lol: :lol:
j'ai pu corrigé le tout , ça me bloquait meme l'utilisation de Adwcleaner ....
ouverture de multiple pages html en automatique , prise de ressources systeme (dont un, pour utiliser mon ordi comme esclave pour miner du bitcoin :lol:
premier reflexe a avoir , couper le reseau , (passer en mode Avion )

je vous dis pas l'eclate a virer tout ça :lol: :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre