2.1.2. Fonctionnement du presse-papier
Pour qu'une application puisse envoyer des données
dans le presse-papier, il faut d'abord qu'elle réserve un espace
mémoire en utilisant les méthodes GlobalAlloc(), GlobalLock()
et GlobalUnlock(). Ensuite elle ouvre le presse-papier via la
méthode OpenClipboard() , le vide via la méthode
EmptyClipboard(), y place les données via la méthode
SetClipboard() et enfin ferme le presse-papier via la méthode
CloseClipboard().[13]
Figure 2.1 : Transferer les données au fornat
Text dans le presse-papier
Obtenir des données du presse-papier est encore plus
facile et implique d'ouvrir le presse-papier, déterminer lequel des
formats disponible dans le presse-papier est compatible à l'application
(cette opération est spécifique à l'application),
récupérer la donnée puis fermer le presse-papier.
Figure 2.2 : Récupérer les
données au format Text du presse-papier 2.1.2.1. Description du
processus d'extraction des données
L'extraction des données du presse-papier contenues
dans l'espace alloué par le système se déroule en quatre
(04) étapes (Figure 2.3). On identifie d'abord les
fonctions de user32.dll ou win32k.sys
permettant l'accès aux données du presse-papier. Les
fonctions décrites dans ces deux fichiers [14] fournissent un bon point
de départ pour choisir les fonctions les plus appropriées. Puis
on applique le Reverse Engineering16 sur ces fonctions pour
reconstituer la structure du presse-papier. Pendant l'étape suivante, on
ajoute la capacité de rechercher des structures (données dans un
format bien précis) au programme d'analyse de mémoire. Enfin,
23
16 Reverse Engineering : technique de
décompilation d'un programme informatique.
24
on recherche dans l'espace mémoire réservé
au presse-papier des données compatible à l'application et on
effectue la copie du presse-papier.
Reconstituer la structure du presse-papier
Coder les structures dans le programme d'analyse
de mémoire
Exécuter l'analyse de la mémoire sur
l'espace mémoire réservé au presse- papier
Identifier les fonctions appropriées
Figure 2.3 : Reconstitution de la structure du
presse-papier par Reverse Engineering [8]
2.1.2.2. Les fonctions du presse-papier
Le presse-papier via la classe Clipboard expose 24
méthodes (Tableau 2.3). Ces méthodes permettent
d'obtenir des informations sur l'état du presse-papier, de le vider, d'y
envoyer des données, d'extraire son contenu etc. Chacune de ces
méthodes est sollicitées à un moment ou à un autre
du fonctionnement du presse-papier en fonction de l'opération encours.
La classe Clipboard est statique, on n'a donc pas besoin de l'instancier pour
pouvoir l'utiliser.
Tableau 2.3 : Fonctions de la classe Clipboard.
[14]
Nom
|
Description
|
Clear
|
Supprime toutes les données du Presse-papier.
|
ContainsAudio
|
Indique si le Presse-papier contient des données au
format WaveAudio.
|
|
25
ContainsData
|
Indique si le Presse-papier contient des données au
format spécifié ou qui peuvent être converties dans ce
format.
|
ContainsFileDropList
|
Indique si le Presse-papier contient des données au
format FileDrop ou qui peuvent être converties dans ce format.
|
ContainsImage
|
Indique si le Presse-papier contient des données au
format Bitmap ou qui peuvent être converties dans ce format.
|
ContainsText
|
Indique si le Presse-papier contient des données au
format Text ou UnicodeText, selon le système d'exploitation.
|
ContainsText(TextDataFormat)
|
Indique si le Presse-papier contient des données
textuelles au format indiqué par la valeur TextDataFormat
spécifiée.
|
Equals(Object)
|
Détermine si le Object spécifié est
égal au Object actif. (Hérité de Object.)
|
Finalize
|
Autorise Object à tenter de libérer des ressources
et d'exécuter d'autres opérations de nettoyage avant que Object
soit récupéré par l'opération garbage collection.
(Hérité de Object.)
|
GetAudioStream
|
Récupère un flux audio dans le Presse-papier.
|
GetData
|
Récupère des données du Presse-papier dans
le format spécifié.
|
GetDataObject
|
Récupère les données figurant dans le
Presse-papier système.
|
GetFileDropList
|
Récupère une collection de noms de fichiers du
Presse-papier.
|
|
26
GetHashCode
|
Sert de fonction de hachage pour un type particulier.
(Hérité de Object.)
|
GetImage
|
Récupère une image du Presse-papier.
|
GetText
|
Récupère des données textuelles du
Presse-papier dans le format Text ou UnicodeText, selon le système
d'exploitation.
|
GetText(TextDataFormat)
|
Récupère des données textuelles du
Presse-papier dans le format indiqué par la
valeur TextDataFormat spécifiée.
|
GetType
|
Obtient le Type de l'instance actuelle. (Hérité de
Object.)
|
MemberwiseClone
|
Crée une copie superficielle de
l'objet Object actif. (Hérité de Object.)
|
SetAudio( Byte ())
|
Ajoute un tableau Byte au Presse-papier dans le format WaveAudio
après l'avoir converti en Stream.
|
SetAudio(Stream)
|
Ajoute Stream au Presse-Papier dans le format WaveAudio.
|
SetData
|
Ajoute des données au Presse-papier dans le format
spécifié.
|
SetDataObject(Object)
|
Place les données non persistantes dans le Presse-papier
système.
|
SetDataObject(Object, Boolean)
|
Place les données dans le Presse-papier système et
spécifie si les données doivent rester dans le Presse-papier
lorsque l'utilisateur quitte l'application.
|
SetDataObject(Object, Boolean, Int32, Int32)
|
Tente de placer les données dans le Presse-papier
système le nombre spécifié de fois et dans le délai
spécifié entre les tentatives, en laissant éventuellement
les données dans le Presse-papier lorsque l'utilisateur quitte
l'application.
|
|
27
SetFileDropList
Ajoute une collection de noms de fichiers au Presse-papier dans
le format FileDrop.
|
SetImage
|
Ajoute Image au Presse-Papier dans le format Bitmap.
|
SetText(String)
|
Ajoute des données textuelles au Presse-papier dans le
format Text ou UnicodeText, selon le système d'exploitation.
|
SetText(String, TextDataFormat)
|
Ajoute des données textuelles au Presse-papier dans le
format indiqué par la valeur TextDataFormat spécifiée.
|
ToString
|
Retourne un String qui représente le Object actif.
(Hérité de Object.)
|
|
|