Page 1 sur 1

[resolu] demarrage auto vraiment bizarre

Publié : lun. 02/nov./2009 13:24
par Ar-S
Salut,

je viens de m'apercevoir d'un bug très étrange avec mon avertisseur d'anniversaire.
je ne peux pour le moment pas vous filer le code mais déjà auriez vous une idée pour expliquer le symptôme.

J'explique :

Le logiciel, au choix de l'utilisateur, peut démarrer avec windows, pour cela rien de difficile, le logiciel inscrit son chemin dans la bdr ici :

Code : Tout sélectionner

"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"
. Donc le soft se lance bien au démarrage de windows à ce moment.

Le truc bizarre est qu'à l'ouverture il ne prend pas en compte mon fichier contacts ! Pourtant le chemin de celui-ci est bien déclaré en global. Le plus étrange est que si quitte le programme et que je le ré-ouvre dans la foulée, les contacts sont bien là. ça ne le fait que si je démarre le logiciel avec windows.

Auriez vous une idée de la cause du problème ?

Si vous voulez tester avec des contactes fictifs :
Lien du soft : http://ldvmultimedia.com/fr/downloads/ldvmr.zip

Re: Soucis de demarrage auto vraiment bizarre

Publié : lun. 02/nov./2009 13:44
par Fred
T'as tracé pour voir si le fichier était bien trouvé et ouvert ?

Re: Soucis de demarrage auto vraiment bizarre

Publié : lun. 02/nov./2009 13:58
par Ar-S
Fred a écrit :T'as tracé pour voir si le fichier était bien trouvé et ouvert ?
Ben le soucis est qu'il ni a pas de raison qu'il ne s'ouvre pas vu que si on lance le programme manuellement, il trouve le fichier sans soucis (qui se trouve d'ailleurs dans le même dossier que le programme).

Re: Soucis de demarrage auto vraiment bizarre

Publié : lun. 02/nov./2009 15:39
par Ar-S
voilà une capture d'ecran du logiciel affichant les infos au démarrage du programme.
ça illustre bien le soucis, c'est le même exe que je relance la seconde fois.
Je deviens fou là.

Image

Re: Soucis de demarrage auto vraiment bizarre

Publié : lun. 02/nov./2009 16:05
par Le Soldat Inconnu
Et tu es bien sous XP ?

Tu n'as pas d'erreur d'ouverture ? essai avec un code de ce type

Code : Tout sélectionner

If Openpreference()

Else
  Messagerequester("Erreur", "Pref pas ouverte")
Endif

Re: Soucis de demarrage auto vraiment bizarre

Publié : lun. 02/nov./2009 16:10
par Ar-S
Le Soldat Inconnu a écrit :Et tu es bien sous XP ?

Tu n'as pas d'erreur d'ouverture ? essai avec un code de ce type

Code : Tout sélectionner

If Openpreference()

Else
  Messagerequester("Erreur", "Pref pas ouverte")
Endif
C'est exactement ce que j'ai fait pour toutes les requêtes d'ouvertures du fichier contact ! Et je suis bien sous xp.
Mais comme je le dis, si je lance le programme une fois windows chargé et non en démarrage auto, il trouve les contacts ! Alors que c'est le même exe, le même fichier de contacts.. :?

je suis en train de coder un exemple plus leger que mon soft pour re tester mais c'est trop anormal à mon goût comme phénomène.

Re: Soucis de demarrage auto vraiment bizarre

Publié : lun. 02/nov./2009 16:58
par Cls
On voit que le fichier contact a changé entre les 2 ouvertures, ça ne vient pas de là ?

L'un est sur C:, l'autre sur E:.

Re: Soucis de demarrage auto vraiment bizarre

Publié : lun. 02/nov./2009 17:24
par Ar-S
Cls a écrit :On voit que le fichier contact a changé entre les 2 ouvertures, ça ne vient pas de là ?

L'un est sur C:, l'autre sur E:.
Bon dieu mais bien sur que ça doit venir de là !! Mais la question est : POURQUOI ?
a aucun moment je ne demande au soft d'aller piocher sur le bureau !

Pour que vous puissiez tester, voilà un exemple qui vous montrera de A à Z le soucis.

Pour l'inscription/suppression du registre j'utilise la Droopy lib, si vous ne l'avez pas je vous laisse modifier le code (je ne me rappelle pas des API a utiliser)

Pensez bien à compiler le programme avant de le tester

1- compilez le soft ou vous voulez
2 - creez un contact
3 - activez le demarrage auto
4 - redemarrez le pc

Code : Tout sélectionner

; Test de lecture de fichier Pref au démarrage de windows. PB 4.30 / Ar-S
;{- Enumerations / DataSections

Enumeration
  #Win : #BT_REG : #BT_UNREG : #List : #BT_CREER : #String_5 : #String_6 : #Text_7 : #Text_8
EndEnumeration

Global CleAutoRun$="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" ; Clé pour démarrage auto
Global DefPath$=GetCurrentDirectory() ; repertoire courant
Global NomFichierPref$="testpref.txt" ; fichier pref
Global FichierPref$=DefPath$+NomFichierPref$ ; chemin complet du fichier pref
Global DefEexeName$=GetProgramName() ; Nom de l'exe

Declare ListeContacts()

Procedure OpenWindow_Win()
  If OpenWindow(#Win, 721, 552, 282, 363, "Test demarrage auto et Prefs", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    ButtonGadget(#BT_REG, 0, 290, 280, 35, "Activer le démarrage Auto avec Windows")
    ButtonGadget(#BT_UNREG, 0, 327, 280, 35, "Supprimer la clé du registre")
    ListViewGadget(#List, 5, 10, 270, 170)
    ButtonGadget(#BT_CREER, 155, 204, 125, 85, "Creer pref")
    StringGadget(#String_5, 5, 205, 145, 25, "")
    StringGadget(#String_6, 5, 263, 145, 25, "")
    TextGadget(#Text_7, 5, 185, 95, 20, "Entrez un nom")
    TextGadget(#Text_8, 5, 240, 95, 20, "Entrez un prénom")
  EndIf
EndProcedure

Procedure PremierLancement()
  ; Test pour voir si le fichier existe
  TestPref.q = FileSize(FichierPref$)
  If TestPref=-1 ; Si le fichier est inexistant
    If CreatePreferences(FichierPref$) ; s'il n'existe pas on le crée
      ClosePreferences()
      Debug "Le fichier de contact vient d'être créé"
    Else
      Debug "Impossible de créer le fichier pref"
    EndIf
  Else 
    Debug "Le fichier de contact a été trouvé"
  EndIf
EndProcedure


Procedure ListeContacts()
  ClearGadgetItems(#List)
  NewList Contacts.s()
  If OpenPreferences(FichierPref$)
    ExaminePreferenceGroups()
    While NextPreferenceGroup()
      AddElement(Contacts())
      Contacts()=PreferenceGroupName()
      AddGadgetItem(#List,-1,Contacts())
      Debug Contacts()
    Wend
    ClosePreferences()
  Else
    MessageRequester("Erreur","Ficher Contact introuvable ! [Erreur ligne 48]")
  EndIf  
EndProcedure

PremierLancement()
OpenWindow_Win()
ListeContacts()

;{- Event loop
Repeat
  Select WaitWindowEvent()
      ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #BT_REG
            RegCreateKeyValue(CleAutoRun$,"TESTpref",DefPath$+DefEexeName$,#REG_SZ,".")
            MessageRequester("Information","Le programme se lancera avec windows"+Chr(10)+"clé : HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"+Chr(10)+"Nom : TESTpref"+Chr(10)+"Données : "+DefPath$+DefEexeName$)

        Case #BT_UNREG
           RegDeleteValue(CleAutoRun$,"TESTpref",".")
           MessageRequester("info","La clé a été supprimé du registre, le programme ne démarrera plus avec windows")
         
          
        Case #BT_CREER
          Nom$=GetGadgetText(#String_5)
          Prenom$=GetGadgetText(#String_6)
          If Nom$<>"" And Prenom$<>""
            Group$=Nom$+" "+Prenom$
            If OpenPreferences(FichierPref$)
              PreferenceGroup(LCase(Group$))
              WritePreferenceString("NOM",Nom$)
              WritePreferenceString("PRENOM",Prenom$)
              ClosePreferences()
              Group$="" ;On reinitialise le groupe (contact) recherché 
              ListeContacts()
            Else
              MessageRequester("Erreur","Fichier contact introuvable [Erreur ligne 86]")
            EndIf
          Else
            MessageRequester("Erreur","Entrez un nom et un prénom avant de cliquer sur créer")
          EndIf
          
      EndSelect
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Win
          CloseWindow(#Win)
          Break
      EndSelect
  EndSelect
ForEver
Si le problème persiste c'est que ça vient de l'interaction de windows/pb au demarrage.

Re: Soucis de demarrage auto vraiment bizarre

Publié : lun. 02/nov./2009 18:04
par Cls
Il y a peu de temps quelqu'un a eu un souci du même genre. La solution était de mettre ceci en début de code:

Code : Tout sélectionner

SetCurrentDirectory(GetPathPart(ProgramFilename()))

Re: Soucis de demarrage auto vraiment bizarre

Publié : lun. 02/nov./2009 18:40
par Ar-S
Cls a écrit :Il y a peu de temps quelqu'un a eu un souci du même genre. La solution était de mettre ceci en début de code:

Code : Tout sélectionner

SetCurrentDirectory(GetPathPart(ProgramFilename()))
8O 8O Houaaa t'es un chef !! ça venait de là !
Maintenant j'aimerai tout de même comprendre pourquoi cette ligne est obligatoire alors que le chemin est indiqué dans le registre mais bon...
Mille fois merci !!

Re: [resolu] demarrage auto vraiment bizarre

Publié : lun. 02/nov./2009 19:49
par Octavius
Ah oui c'était moi qui avait eu un problème similaire !

Si ça peut t'aider à comprendre, c'était ici : http://www.purebasic.fr/french/viewtopic.php?f=1&t=9856.

Re: [resolu] demarrage auto vraiment bizarre

Publié : mar. 03/nov./2009 11:54
par Le Soldat Inconnu

Code : Tout sélectionner

SetCurrentDirectory(GetPathPart(ProgramFilename()))
ce bout de code, je le mets au début de tous mes programmes.

Pourquoi ? Et bien dès qu'on a un raccourci au quoi que ce soit qui ouvre le programme sans dossier de démarrage, le dossier par défaut est celui de l'utilisateur.

Donc pour tous les fichiers en relatif, c'est mort.

Alors je change le répertoire de travail par le répertoire ou se trouve le programme.


Attention : Pour compiler le code en phase de développement, il faut cocher "Créer l'exe dans le répertoire du code *.pb" (ou dans le genre)

Re: [resolu] demarrage auto vraiment bizarre

Publié : mar. 03/nov./2009 13:01
par Ar-S
J'ai pas pigé ta dernière phrase..
pour les tests de ce genre de soft je crée un exe via japbe dans un dossier prevu à cet effet, je vois pas d'option "a cocher"

Re: [resolu] demarrage auto vraiment bizarre

Publié : mar. 03/nov./2009 13:29
par Cls
Via l'éditeur classique, il faut cocher une case ;)