[EX] Niveau Debutant : Comment fonctionnent les handles ?

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Avatar du membre
SrBelial
Niveau 7
Niveau 7
Messages : 335
Enregistré le : jeu. 22 juil. 2010 11:29
Localisation : 81 et 31
Status : Hors ligne

[EX] Niveau Debutant : Comment fonctionnent les handles ?

#1

Message par SrBelial »

Bonjour à tous, aujourd'hui au menu, manipulation des handles !!

=> C'est quoi un handle ?
c'est une sorte d'identifiant unique, que chaque fenêtre, contrôle (bouton, champ de texte, case à cocher, etc..) possède.
Cet identifiant est attribué par le système de gestion des fenêtres en quelque sorte, par conséquent, pour les applications dont les différents composants graphiques ne sont pas gérés par windows (exemple : applications flash/air, applications java, applications "in-browser", ...), il sera plus compliqué, voire dans beaucoup de cas impossible de récupérer un handle !

=> Comment on récupère un handle ?
facile, on fait un appel à ControlGetHandle, ou à WinGetHandle, avec les paramètres qui vont bien (on verra quels sont-ils à la question suivante).
Ces deux fonctions renvoient directement le handle, que vous pouvez stocker proprement dans une variable pour pouvoir le réutiliser comme vous le souhaitez.

=> Comment on sait quels paramètres passer à WinGetHandle ou ControlGetHandle ?
Pour ceux qui ont déjà utilisé des fonctions du genre WinActivate, WinWaitActive, WinSetState, ControlSend, ControlSetText, etc .... , hé bien il s'agit simplement d'utiliser les même paramètres que si vous souhaitiez appeler les fonctions citées précédemment ! (qui se nomment chaque fois "Title", "Text", "ControlID")
Pour ceux qui n'ont pas utilisé ces fonctions auparavant, il faudra peut être lire la doc de ces fonctions si vous voulez tout bien comprendre ...
Ces paramètres, on les trouve en utilisant "AutoIt Window Info Tool" (raccourci clavier : Ctrl+F6 lorsque vous êtes dans l'éditeur SciTE). Apprenez à utiliser cet outil, car sans lui, il vous sera très difficile de trouver les informations nécessaires pour obtenir un handle !

=> Un petit exemple :
Décorticons un peu :
* je récupère le handle du bouton du menu démarrer (avec en paramètres les données que m'a fourni AutoIt Window Info Tool)
* j'appelle ControlSetText avec à la place du paramètre "Title", simplement le handle (du coup les paramètres suivants n'ont pas besoin d'être remplis, j'y place une chaine vide), et en dernier paramètre, je mets le texte que je souhaite voir afficher sur le bouton démarrer
* je pause 2 secondes pour que tout le monde voie bien que ça marche !

* même processus pour récupérer le handle de la barre des tâches
* cette fois je joue avec la transparence parce que c'est lol.

Code : Tout sélectionner

;***************************************************************************************
;**     HANDLE D'UN CONTROLE : LE BOUTON "DEMARRER"
;***************************************************************************************

$handleBoutonMenuDemarrer = ControlGetHandle("[CLASS:Shell_TrayWnd]", "démarrer", "[CLASS:Button; INSTANCE:1]")
ControlSetText($handleBoutonMenuDemarrer, "", "", "Coucou")
Sleep(2000)

;***************************************************************************************
;**     HANDLE D'UNE FENETRE : LA BARRE DES TACHES (Hé oui c'est aussi une fenêtre !)
;***************************************************************************************

$handleBarreDesTaches = WinGetHandle("[CLASS:Shell_TrayWnd]", "")
For $i = 255 To 1 Step -1
    WinSetTrans($handleBarreDesTaches, "", $i)
Next
For $i = 1 To 255 Step 1
    WinSetTrans($handleBarreDesTaches, "", $i)
Next
Ajout : Les handles de fichier + démonstration de l'utilité des handles :

Code : Tout sélectionner

;***************************************************************************************
;**     TEMPS D'ECRITURE :
;***************************************************************************************

;**     SANS HANDLE :
;********************************************
FileDelete("c:\test.txt")
$begin = TimerInit()
For $i=0 TO 10000 Step 1
    FileWriteLine("c:\test.txt", "ceci est une ligne de test, écrite dix-mille fois dans ce fichier")
Next
$timerdiff1 = TimerDiff($begin)

;**     AVEC HANDLE :
;********************************************
FileDelete("c:\test.txt")
$begin = TimerInit()
$handle = FileOpen("c:\test.txt", 1)
For $i=0 TO 10000 Step 1
    FileWriteLine($handle, "ceci est une ligne de test, écrite dix-mille fois dans ce fichier")
Next
$timerdiff2 = TimerDiff($begin)

FileClose($handle)

;**     RESULTATS :
;********************************************
MsgBox(64, "résultats du test de performances", _
"temps d'écriture de 10 000 lignes dans un fichier sans utiliser de handle : " & $timerdiff1/1000 & "secondes" & @CRLF & _
"temps d'écriture de 10 000 lignes dans un fichier en utilisant un handle : " & $timerdiff2/1000 & "secondes" & @CRLF )
 
Vous le constatez, cette fois-ci j'appelle encore une variable handle, mais je ne la récupère pas de la même façon que dans les exemples précédents !? pourquoi donc ?!
Tout simplement parce que pour les fichiers, qui peuvent également fonctionner avec des handles, la fonction permettant d'obtenir ledit handle est la fonction FileOpen !! (qui en plus permet d'avoir quelques petits réglages bien sympathiques, notamment sur le mode d'ouverture du fichier)

Une fois le fichier ouvert, on peut utiliser le handle retourné par la fonction pour remplacer les paramètres "filename" des différentes fonctions de manipulation des fichiers.

Attention à une chose : bien que cela ne soit pas très gênant dans la plupart des cas, il est bien entendu très fortement conseillé de correctement fermer chaque handle de fichier ouvert, cela vous évitera bien des surprises !!

Pour la petite histoire des performances :
Avec un handle, le script n'a pas besoin de réouvrir le fichier à chaque appel de FileWrite ou FileWriteLine ... un gain de temps précieux !
Sur ma bécane, il faut entre 16 et 17 secondes pour écrire de façon "traditionnelle" les 10000 lignes dans le fichier, et moins d'une seconde pour écrire exactement les même lignes, dans le même fichier, lorsque l'on utilise un handle ... ! Faites vos tests, éventuellement avec des fichiers beaucoup plus gros, les résultats parlent d'eux-mêmes !!!!


=> Des Questions ? Posez les ci dessous !
.-SrB-. The One
  • NON ! AutoIt n'est PAS un langage réservé à la réalisation de bots !
  • OUI ! AutoIt est un langage à part entière !
  • Dans SciTE sélectionnez 1 mot puis F1
  • Don't want english doc ?? go to documentation française !! >>ICI<<
[/size]
Avatar du membre
SrBelial
Niveau 7
Niveau 7
Messages : 335
Enregistré le : jeu. 22 juil. 2010 11:29
Localisation : 81 et 31
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#2

Message par SrBelial »

je vois que les handles ne passionnent pas les foules .... est-ce trop confus ou bien tout le monde connaissait-il déjà leur usage ??
:twisted:

je viendrai sous peu rajouter un tout petit détail : une étude de performances pour montrer un peu l'avantage que peuvent amener les handles .....
ainsi qu'un exemple de l'utilisation des handles de fichier. Dans le concept c'est très proche des handles de fenêtres/contrôles, mais dans la pratique c'est un peu différent ...
en attendant, patience ! :twisted:

EDIT : c'est fait !!! en fin d'exemple j'ai ajouté de quoi ruminer un peu plus pour ceux qui n'utiliseraient pas encore les handles pour accéder aux fichiers .... :twisted:
.-SrB-. The One
  • NON ! AutoIt n'est PAS un langage réservé à la réalisation de bots !
  • OUI ! AutoIt est un langage à part entière !
  • Dans SciTE sélectionnez 1 mot puis F1
  • Don't want english doc ?? go to documentation française !! >>ICI<<
[/size]
Avatar du membre
GELDROC
Niveau 6
Niveau 6
Messages : 295
Enregistré le : sam. 10 oct. 2009 10:15
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#3

Message par GELDROC »

moi je me posais la question comment avoirlo L' handles d'un Obj() et surtout comment sens servir avec un GUICtrlsetOnEvent()...
Avatar du membre
SrBelial
Niveau 7
Niveau 7
Messages : 335
Enregistré le : jeu. 22 juil. 2010 11:29
Localisation : 81 et 31
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#4

Message par SrBelial »

haha, bonne question !!
sur un OBJ au sens COM ? dans ce cas, le handle est tout simplement le résultat de l'appel à la fonction ObjCreate("nom de l'objet à créer") !

Pour ce qui est du GuiCtrlSetOnEvent, je t'avouerai que pour l'instant je n'ai encore jamais travaillé avec des interfaces graphiques en AutoIt ...
je me pencherai sur la question dès que j'aurai le temps, mais si quelqu'un souhaite prendre la parole pour expliquer ça .... le champ est libre !

^______^
.-SrB-. The One
  • NON ! AutoIt n'est PAS un langage réservé à la réalisation de bots !
  • OUI ! AutoIt est un langage à part entière !
  • Dans SciTE sélectionnez 1 mot puis F1
  • Don't want english doc ?? go to documentation française !! >>ICI<<
[/size]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#5

Message par Tlem »

Le GuiCtrlSetOnEvent n'à rien à voir avec les handles. :shock:
C'est un mode de gestion des événements de l'interface graphique !!!

Si on veut représenter de manière imagée un handle graphique (fenêtre GUI), je dirais que c'est comme le nom de votre rue.
Ensuite viennent les 'controls ID' (sorte de handle, mais pour les éléments de votre fenêtre) qui sont comme le numéro des maisons dans cette rue.

Pour un handle d'un fichier, c'est pratiquement identique.
Le handle représente la rue et lorsque vous devez effectuer une 'livraison' à un endroit déterminé, vous n'êtes pas obligé de parcourir à chaque fois la totalité de la rue pour connaitre l'endroit de votre destination. :mrgreen:
Le handle, vous permet d'accéder plus rapidement à l'information.
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
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#6

Message par DimVar »

Grand merci pour ces explications.
J'y ai appris bcp de choses.


J'ai apprécié :

- La clarté des propos.
- Les exemples concrets.
- Le test de perf !!! (moi qui logue tout ce que je fais dans mes scripts, tu n'imagine pas le temps que tu vas me faire gagner au boulot !!!)

Puis je permettre une question ?
Comment traduirais tu le terme "handle" en FR ?
[EDIT] Je me suis emmêlé les pinceaux sur le "return value" (code retour d'une fonction)
Modifié en dernier par DimVar le mer. 10 nov. 2010 09:29, modifié 1 fois.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#7

Message par Tlem »

Un "handle" est un identifiant.
C'est comme une plaque minéralogique de voiture, sauf que cet identifiant peux changer à chaque lancement du script. Par contre, il reste identique tant que l'objet concerné n'est pas supprimé.

Par contre, pour la deuxième question, je ne comprend pas ce que vous voulez savoir.
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
SrBelial
Niveau 7
Niveau 7
Messages : 335
Enregistré le : jeu. 22 juil. 2010 11:29
Localisation : 81 et 31
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#8

Message par SrBelial »

voila, Tlem a très bien répondu.

Un terme que j'aime bien employer en lieu et place de "Handle" est "Poignée" ... métaphoriquement parlant c'est un peu ça :
on veut manipuler un objet : on cherche sa poignée et une fois qu'on l'a, il s'agit de la conserver tant que l'on souhaite utiliser l'objet.

La seule différence avec une poignée présente sur un objet physique (sac à main ou tasse ^__^), est que comme l'a expliqué Tlem, un handle est une sorte d'accès dynamique à un objet. Les handles sont générés de façon automatique par le système lors de la création des objets concernés, par conséquent ils sont différents à chaque fois que l'objet est recréé ! (d'ou l'importance des fonctions permettant de récupérer ce handle)

voila voila ... en gros, le handle c'est l'étau qui permet de tenir son objet avant de pouvoir utiliser des fonctions outils dessus ... sans le handle, il faut repartir à la recherche de son objet à chaque coup de marteau qu'on met dessus ... (j'adore les expressions un peu imagées moi !! ^__^)
.-SrB-. The One
  • NON ! AutoIt n'est PAS un langage réservé à la réalisation de bots !
  • OUI ! AutoIt est un langage à part entière !
  • Dans SciTE sélectionnez 1 mot puis F1
  • Don't want english doc ?? go to documentation française !! >>ICI<<
[/size]
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#9

Message par sksbir »

Bravo pour vos efforts de vulgarisation. :D


A propos des handles sur fichier, il faut tout de même savoir un truc :

Quand on utilise un handle sur fichier pour écrire un log , et qu'on veut consulter le log en question en temps réel ( par exemple avec un outils comme l'excellent wintail ), alors le handle va vous jouer des tours, étant donné que le gain de performance s'obtient grace à la mise en cache.
Autrement dit, on ne peut pas voir ce que contient réellement le fichier à l'instant T. Il faut attendre le close du handle pour que toutes les écritures en souffrances ( les fameuses écritures décalées) soient réalisées.

Donc, pour écrire un fichier log, dans certains cas particuliers, il vaut mieux ne pas utiliser de handle.
Avatar du membre
SrBelial
Niveau 7
Niveau 7
Messages : 335
Enregistré le : jeu. 22 juil. 2010 11:29
Localisation : 81 et 31
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#10

Message par SrBelial »

alors je vais peut être dire une bêtise sur ce coup là,
mais il me semble que sans parler d'écriture décalée ou non, le handle est là simplement pour éviter les ouvertures/fermetures de fichier à chaque lecture ou écriture dans le fichier ce qui cause déjà un sacré gain de performances ...

je ne pense pas que l'utilisation d'un handle empêche la consultation temps réel, l'écriture décalée est pour moi un mécanisme différent de ce que l'on fait ici, qui tire parti certes des handles ...

pour vérifier ça, petit travaux pratiques :

=> et si on faisait une très grosse boucle qui écrirait beaucoup de lignes dans un fichier ? et chaque ligne contiendrait un numéro, par exemple le nombre de tours dans la boucle qu'on a déjà réalisés ...

=> si on effectue dans cette même boucle une lecture (sans passer par le handle, en utilisant une fonction de lecture lambda qui travaille simplement avec le nom du fichier) qui va chercher la dernière ligne écrite, et qu'on compare avec l'indice de la boucle, on devrait être fixé (si c'est le même, alors c'est bien qu'il n'y a pas d'écriture décalée, en revanche, si on est pas au bon numéro, alors en effet, écriture décalée et donc petites limitations sur l'utilité des handles ....

allez, que tous ceux qui sont motivés pour tester ça le fassent .... je passe corriger les copies dans un petit moment !! ^___^
.-SrB-. The One
  • NON ! AutoIt n'est PAS un langage réservé à la réalisation de bots !
  • OUI ! AutoIt est un langage à part entière !
  • Dans SciTE sélectionnez 1 mot puis F1
  • Don't want english doc ?? go to documentation française !! >>ICI<<
[/size]
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#11

Message par sksbir »

voila msieur..
► Afficher le texte
Bon, ok, là, ça a l'air de fonctionner correctement. Je me souviens pourtant avoir eu des soucis avec ça, mais c'était avec des versions bien inférieures d'autoit. :wink:
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#12

Message par bloodwolff »

J'aurais une question à propos des handle
Dans la documentation il y est dis
It is important to note that a window handle is not classed as a number or string - it is its own special type.
Donc ma question si l'on reçoit un handle sous la forme d'une chaine de caractère ( comme en lisant un fichier texte ou en le recevant par tcp/udp) Es-ce que le windows handle en forme de chaine sera transformé seul en son "Own spécial type" ou l'on doit procéder par une manipulation avant de l'utiliser?
Compte skype : bloodwolfff
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#13

Message par bloodwolff »

Je crois avoir moi même la réponse :P
HWnd ( expression )
Converts an expression into an HWND handle.
Compte skype : bloodwolfff
Avatar du membre
SrBelial
Niveau 7
Niveau 7
Messages : 335
Enregistré le : jeu. 22 juil. 2010 11:29
Localisation : 81 et 31
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#14

Message par SrBelial »

@sksbir : très bonne copie ^__^
bon moi il arrive pas à ouvrir le fichier en lecture ...

@bloodwolff : c'est bien ça, on devrait créer un forum-concept ou les gens répondraient eux même à leurs questions ^__^
.-SrB-. The One
  • NON ! AutoIt n'est PAS un langage réservé à la réalisation de bots !
  • OUI ! AutoIt est un langage à part entière !
  • Dans SciTE sélectionnez 1 mot puis F1
  • Don't want english doc ?? go to documentation française !! >>ICI<<
[/size]
ivigu
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 04 nov. 2010 00:52
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#15

Message par ivigu »

bien je pense que je vais me lancer pour les handle. avec ce qui a ete dit et montré. je pense que je vais y arriver. de toute maniere si j'ai un probleme je reviendrai vous embeter ^^
ivigu
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 04 nov. 2010 00:52
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#16

Message par ivigu »

bonsoir une petite question:
j'ai remarqué que lorsqu'on appelle une fenêtre celle-ci a bien un handle. suivant ce que j'ai lu a chaque appelle d'un handle il faut fermer ... "l'appel" sous peine de soucis (surement de conflit)

effectivement en ouvrant et en fermant la même fenêtre (pour moi les connexion wifi en me basant sur la ligne de l'adresse ip) je me suis aperçu que le handle change, cependant l' ID lui n'a pas changé. d'où ma question (qui vient enfin), dans quel cas est il plus judicieux d'utiliser le handle et l'ID?
Avatar du membre
SrBelial
Niveau 7
Niveau 7
Messages : 335
Enregistré le : jeu. 22 juil. 2010 11:29
Localisation : 81 et 31
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#17

Message par SrBelial »

désolé pour le délai de réponse, manque de disponibilités tout simplement ...

commençons par la différence entre Handle et ID :
* Handle = unique, outil système permettant un accès à un objet virtuel géré lui aussi par le système, en conséquence à chaque création ou re-création de l'objet, le handle est regénéré et prend une nouvelle valeur.
* ID = nom de l'objet, normalement unique également, prend toujours la même valeur, il dépend essentiellement du type d'objet, auquel sera attaché le plus souvent un numéro. l'ID est la plupart du temps utilisé pour identifier un composant graphique (contrôle) d'une interface. Il reste toujours le même. C'est en quelque sorte un accesseur de l'objet à un plus haut niveau que le handle.

=> quoi que l'on veuille faire :
* pour connaitre le handle on a besoin de l'ID de l'objet à manipuler.
* Manipuler un objet par son ID est (un tout petit peu) plus simple que par son handle.
* Manipuler un objet par son handle est plus efficace que par son ID.

ensuite, pour ce qui est des handles, de deux choses :
¤ le handle d'un objet a plusieurs qualités importantes :
* Il est unique : un seul handle pour un seul objet
* Il est créé en même temps qu'est créé l'objet. => en effet on ferme une fenêtre et on la réouvre : le handle a changé !! il faut donc de nouveau faire un appel à WinGetHandle.

¤ lors de l'utilisation d'un handle, il n'est à priori nul besoin de fermer quoi que ce soit
* Si on parle d'un handle de fenêtre : plusieurs scripts peuvent interragir avec la même fenêtre, chacun ayant récupéré le handle, cela est censé fonctionner aussi bien que si un seul script seulement utilisait ce handle.
* Si on parle d'un handle de fichier : Il y a une petite différence :
Votre fichier est un ensemble de données présentes sur le disque dur. On ne manipule pas directement ces données, le système d'exploitation fourni tout un mécanisme permettant d'y accéder lorsque nécessaire, et qui contient en particulier le concept de "descripteur de fichier".
=> imaginons que vous souhaitiez travailler sur toto.txt.
vous faites un fileOpen qui va vous renvoyer un handle, oui mais le handle c'est pas juste un raccourci vers l'espace disque concerné :
* le système d'exploitation crée un objet virtuel (descripteur de fichier) qui sera l'intermédiaire entre le fichier (physique) et la couche applicative (le script AutoIt)
* cet objet créé va nous être rendu disponible en nous communiquant son handle
* on va manipuler le fichier en faisant appel aux fonctions d'écriture et de lecture sur le handle
* une fois terminé, peu importe ce que l'on fait du handle, de toute façon lorsque l'on fera un FileClose, le descripteur de fichier sera détruit, et donc le handle ne sera plus valide tout simplement.

Donc n'ayez pas peur d'utiliser les handles, et ne vous inquiétez pas de les fermer ou non. Pour rester imagé : "On ne ferme pas une poignée !!"
En revanche, je confirme que si vous faites un FileOpen, il vous faudra faire un FileClose lorsque vous aurez terminé de travailler sur le fichier, ceci fermera le descripteur de fichier. Il est également possible selon l'OS, selon le langage de prog utilisé, et éventuellement selon les plate-formes matérielles utilisées, que les descripteurs de fichiers soient fermés lorsque le processus qui les a sollicités est mort, mais vaut mieux prévoir que ce ne soit pas le cas, quand on veut faire proprement.

un petit schéma parce que j'aime bien (attention, c'est de la vulgarisation très primaire, mal faite, et peut être même partiellement incorrecte, mais ça aide à comprendre) :

[0:DisqueDur] =====> [1:OS] ======> [2:Script]

0: contient les fichiers, c'est du binaire, n'y mettez pas les doigts les enfants, c'est sale !!
1: Operating System (Win-dose), il va créer des objets (descripteurs de fichiers) chaque fois qu'un programme veut accéder à un fichier
2: Script ou tout autre programme : il va soit demander spécifiquement à l'OS un handle vers un descripteur de fichier, pour bidouiller des trucs dedans (puis quand il a fini c'est bon il dit qu'on peut fermer), soit faire des appels système pour écrire dans un fichier chaque fois qu'il en a besoin, et le système va se débrouiller à recréer des descripteurs pour faire ce que monsieur lui demande.


=> allez petite mise en application :
que les plus courageux d'entre vous fassent le petit test suivant :
on va ouvrir un fichier toto.txt et faire afficher le handle dans la console dans les cas suivants :
1) on ouvre plusieurs fois à la suite, on affiche, puis on ferme tout
2) on ouvre une fois le fichier, on affiche le handle, on ferme, plusieurs fois de suite
3) on ouvre le même fichier dans plusieurs scripts, on affiche dans des messagebox, on ferme le fichier à fermeture après
:twisted: :twisted: :twisted:
et après je vous laisse la joie d'interpréter vos résultats !! ^______^

[edit : j'avais oublié de répondre à la question sur les ID, c'est chose faite...]
.-SrB-. The One
  • NON ! AutoIt n'est PAS un langage réservé à la réalisation de bots !
  • OUI ! AutoIt est un langage à part entière !
  • Dans SciTE sélectionnez 1 mot puis F1
  • Don't want english doc ?? go to documentation française !! >>ICI<<
[/size]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#18

Message par Tlem »

Concernant la partie graphique, je voudrais juste rajouter quelques petites choses à ce qu'à dit mon camarade :

LES ID :
Les ID graphique sont créés chronologiquement dans chaque script.
Un ID graphique est lié et ne peut être manipulé que par le script qui l'à créé.
Chaque script crée les ID graphique en utilisant des valeurs décimale croissantes (généralement 3 pour le premier élément, puis 4, puis 5, etc ..).
Un ID graphique est unique par rapport au script qui l'à créé.
Sauf modification de l'ordre de création des objets graphique, chaque éléments ce voit attribué le même ID lors du lancement d'un script.

Les Handles
Un handle graphique est créé à la volée 'sans numérotation particulière'.
Un handle graphique peut être manipulé par n'importe quel (autre) programme/script.
Chaque éléments graphique du script se voit attribué un handle graphique (nombre hexadécimal) par le système.
Un handle graphique est unique pour tout le système.
Le handle d'un objet graphique est différent à chaque lancement du script.
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é".
Olive89
Niveau 1
Niveau 1
Messages : 10
Enregistré le : sam. 02 oct. 2010 15:26
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#19

Message par Olive89 »

Bonjour,

Je suis débutant et j'avoue ne pas avoir compris l'utilité des handles si ce n'est que ça agit graphiquement sur certains élément de windows, donc pas sûr que le titre "Niveau débutant" soit bien adapté un "débutant Avancé" aurait été plus judicieux lol.

Pour info je suis sous Windows 7, dans l'exemple qui est donné la transparence de la barre des taches fonctionnent bien mais pas le "coucou" du bouton démarrer qui quand j'exécute le script via Scite efface automatiquement le script :shock: Voilà c'était juste pour dire que plein de choses m'intéresse dans le forum mais que pour un vrai débutant c'est pas la joie arffff, enfin on va relire encore et encore, merci à tous ceux qui essaye quand même de nous aider :wink:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [EX] Niveau Debutant : Comment fonctionnent les handles ?

#20

Message par Tlem »

Olive89 a écrit :j'avoue ne pas avoir compris l'utilité des handles
:shock:

Malgré tout ce ce qui à été dit ... :cry:

Alors on va essayé de le faire en mode SUPER DEBUTANT. :mrgreen:

Un handle (graphique) est une 'carte d'identité' attribué par Windows à un composant/élément graphique d'un programme (comme une fenêtre, un bouton, etc ...).
Grâce à cette 'carte d'identité', ce composant peut être identifié ou manipulé.

Voilà, j'espère que c'est un peu plus clair. :roll:
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é".
Répondre