[..] Erreur qui bloque le programme

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

[..] Erreur qui bloque le programme

#1

Message par TomAijerrie »

Bonjour,

J'ai fait un script qui permet (théoriquement) d'explorer les fichiers et dossiers de mon ordinateur.
A force de vouloir le perfectionner, il se bloque .
J'ai ce problème avec XP (admin et limité) et Seven (limité). (Je n'ai pas eut l'occasion de tester ailleurs.)
► Afficher le texteConsole
Je met ci joint mon code dans son integralité.
► Afficher le texte
Pouvez vous me dire où ça bloque, car moi je suis perdu.

PS:
dll2.dll est une dll que j'ai créée avec autoit.

Code : Tout sélectionner

Exit 0
J'ai ajouté des icones avec ResHacker (@AutoItExe & "\SciTE\AutoIt3Wrapper\ResHacker.exe")

Je vous déconseille de "voir le disque" (création de la liste complète de tous ses dossiers) en entier si il est gros (ça prend du temps).
Fichiers joints
crash1.png
Y01
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 17 nov. 2014 10:46
Status : Hors ligne

Re: [..] Erreur qui bloque le programme

#2

Message par Y01 »

Bonjour,

J'ai testé ton code et l'erreur du crash me fait fortement penser à ça.

Ce lien peut t'aider aussi je pense.

Malheureusement, je n'ai pas les connaissances pour t'aider plus que ça, j’espère que ça suffira à t'aiguiller.

PS : "Analyser" s'écrit comme ça
Y01
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Erreur qui bloque le programme

#3

Message par jguinch »

TomAijerrie a écrit :dll2.dll est une dll que j'ai créée avec autoit.
Ah ? J'étais pas au courant qu'on pouvait créer des DLL avec AutoIt... :lol:
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Erreur qui bloque le programme

#4

Message par Tlem »

Dll2.dll est probablement une DLL de ressources et effectivement elle peux avoir été créée par un utilitaire écrit en AutoIt. ;)

Envoyé de mon appareil mobile avec Tapatalk.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Erreur qui bloque le programme

#5

Message par orax »

J'ai modifié la fonction _GUICtrlTreeView_FileExplorer car c'est dans celle-ci que le plantage était provoqué. J'ai vu ça en commentant certaines parties du code (celles qui sont exécutées après un clic sur la listview).
Les deux lignes en commentaire sont celles qui plantaient le script.
► Afficher le texte
Par contre il ne récupère pas toujours les bons noms de fichiers quand on clique sur la listview.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [..] Erreur qui bloque le programme

#6

Message par TomAijerrie »

Merci Orax
La ligne de code :

Code : Tout sélectionner

 $check= GUICtrlSetState(-1, $GUI_CHECKED)
est en effet de trop.
Elle ne sert à rien à part tout faire planter.
Cependant, le Sleep(10) est nécessaire car si je ne le met pas, ma fonction se lance parfois avant que l'ordinateur comprenne qu'il faut actualiser le treeview,ce qui fait qu'il me retourne le mauvais item, donc le mauvais dossier.
Je passe en résolu dès que j'aurais testé avec le script avec Autoit.
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [..] Erreur qui bloque le programme

#7

Message par TomAijerrie »

jguinch a écrit : J'étais pas au courant qu'on pouvait créer des DLL avec AutoIt...
En regardant les fichiers du pack d'installation d'autoit (version 3.3.8.0 je crois) j'ai vu le fichier "7zip.dll.au3". Je me suis dit qu''il devait s'agir d'un programme Autoit compilé dont l’extension a été remplacée. Si ce n'est pas le cas, c'est quelque chose de semblable car pour moi ça marche.
Y01 a écrit :Ce lien peut t'aider aussi je pense.
Désolé mais je ne comprend pas du tout le PHP, merci quand même.
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [..] Erreur qui bloque le programme

#8

Message par TomAijerrie »

Quand j'ajoute des ligne consoleWrite dans la fonction, je m’aperçois qu'elle tourne en boucle.
Comment faire pour empêcher ça ?
Y01
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 17 nov. 2014 10:46
Status : Hors ligne

Re: [..] Erreur qui bloque le programme

#9

Message par Y01 »

En fait, ça dépend de l'endroit ou tu met ton ConsoleWrite.

S'il est dans la boucle While True, étant donné que c'est une boucle infinie permettant à ton programme de vivre, la console continuera à écrire indéfiniment (jusqu'à fermeture du programme).
Y01
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [..] Erreur qui bloque le programme

#10

Message par TomAijerrie »

Debug to console sur les lignes de la fonction _GUICtrlTreeView_FileExplorer

Code : Tout sélectionner

Func _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    Local $aTVPos, $aPos, $hItem, $hChild, $sTree
    Sleep(10)
    $aTVPos = ControlGetPos($hGui, '', $hTreeview)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $aTVPos = ' & $aTVPos[0] & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $aPos = GUIGetCursorInfo($hGui)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $aPos = ' & $aPos[0] & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
;~     $check= GUICtrlSetState(-1, $GUI_CHECKED)
;~  ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $check = ' & $check & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $hItem = _GUICtrlTreeView_HitTestItem($hTreeview, $aPos[0], $aPos[1] - $aTVPos[1])
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hItem = ' & $hItem & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $hChild = _GUICtrlTreeView_GetFirstChild($hTreeview, $hItem-1)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hChild = ' & $hChild & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    If $hItem Then
        Global $path = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
        $path = StringReplace($path,"Poste de travail\","")
        If $path = "Poste de travail" Then Return
        $path = StringReplace($path,StringSplit($path  , "\" )[1] ,StringLeft($path,1)& ":")
        ExploreFile($path)
    EndIf
;~  If _GUICtrlTreeView_GetExpanded($hTreeview, $hItem) Then Return
;~     _GUICtrlTreeView_BeginUpdate($hTreeview)
;~     If $hChild <> 0 Then
;~         $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
;~         _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
;~     EndIf
;~      $hChild = _GUICtrlTreeView_GetNextChild($hTreeview, $hChild)
;~     _GUICtrlTreeView_EndUpdate($hTreeview)
EndFunc   ;==>_GUICtrlTreeView_FileExplorer
Y01
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 17 nov. 2014 10:46
Status : Hors ligne

Re: [..] Erreur qui bloque le programme

#11

Message par Y01 »

Si j'ai bien lu ton code, ta fonction est dans une boucle(For $j = 2 to $sPath1[0]), c'est donc normale que la console écrit en continue (jusqu'à la fin de la boucle).
Y01
Répondre