Page 1 sur 1

[..] Erreur qui bloque le programme

Posté : lun. 08 déc. 2014 12:45
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).

Re: [..] Erreur qui bloque le programme

Posté : lun. 08 déc. 2014 14:30
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

Re: [..] Erreur qui bloque le programme

Posté : lun. 08 déc. 2014 21:33
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:

Re: [..] Erreur qui bloque le programme

Posté : mer. 10 déc. 2014 19:28
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.

Re: [..] Erreur qui bloque le programme

Posté : mer. 10 déc. 2014 21:16
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.

Re: [..] Erreur qui bloque le programme

Posté : jeu. 11 déc. 2014 12:05
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.

Re: [..] Erreur qui bloque le programme

Posté : jeu. 11 déc. 2014 12:12
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.

Re: [..] Erreur qui bloque le programme

Posté : ven. 19 déc. 2014 09:22
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 ?

Re: [..] Erreur qui bloque le programme

Posté : ven. 19 déc. 2014 09:28
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).

Re: [..] Erreur qui bloque le programme

Posté : ven. 19 déc. 2014 09:49
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

Re: [..] Erreur qui bloque le programme

Posté : ven. 19 déc. 2014 10:24
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).