Récupérer une string du ClipBoard

violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 - 9 févr. 2007 à 19:46
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 - 12 févr. 2007 à 13:19
Violent Ken

Bonjour, j'ai une petite question : comment puis-je récupérer des strings en provenance du ClipBoard ?

Attention, ce n'est pas du texte simple, c'est du texte contenant n'importe quel caractère ASCII. Autrement dit, l'objet ClipBoard de VB ne fonctionne pas (car string terminée par vbNullChar).
Pour les APIs, j'ai bien essayer de faire le tour....sans succès.

Voici la routine que j'ai tenté pour essayer de trouver un format de ClipBoard supportant les strings avec des vbNullChar.... sans succès. Une idée ? Merci, @+



Option Explicit<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>






 






Private Declare Function
OpenClipboard Lib "user32" (ByVal hwnd AsLong) AsLong





Private Declare Function
CloseClipboard Lib "user32" () AsLong





Private Declare Function
GetClipboardData Lib "user32" (ByVal wFormat AsLong) AsLong





Private Declare Function
lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString AsLong) AsLong





Private Declare Sub
CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Long, ByVal ByteLen As Long)





Private Declare Function
IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As Long






 






Private

Sub Form_Load()





Dim
x AsLong






   
For x = 0 To 200000






       
If IsClipboardFormatAvailable(x) Then






            MsgBox Len(GetTextD(x)), , x






       
End
If








   
Next
x







End

Sub







Private

Function GetTextD(ByVal lFormat AsLong) AsString






   
Dim hStrPtr AsLong, lLength AsLong, sBuffer AsString






    OpenClipboard Me.hwnd






    hStrPtr = GetClipboardData(lFormat)






   
If hStrPtr <> 0 Then






        lLength = lstrlen(hStrPtr)






       
If lLength > 0 Then






            sBuffer = Space$(lLength)






            CopyMemory ByVal sBuffer, ByVal hStrPtr, lLength






            GetTextD = sBuffer






       
End
If








   
End
If







   

CloseClipboard





End

Function






 

21 réponses

violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
12 févr. 2007 à 13:19
Violent Ken
Oui. Le problème est que le format Text est compréhensible par tous les logiciels de traitement de texte, c'est pour cela que je voulais l'utiliser. Mais effectibement, la "récupération" de la string par le logiciel cible (coller) s'effectue en prenant le buffer jusqu'au premier vbNullChar. Donc la copie dans le ClipBoard de ma string (avec ces &H0) est alors impossible, dans le sens où la récupération de la chaine dans le logiciel cible tronquera la fin (après le premier &H0).

Alors après, j'ai cherché s'il n'existait pas justement un format standart (dans les constantes des APIs du copie/lecture vers/dans le clipboard) pour permettre le "transport" de mes données, mais je n'ai rien trouvé...

Alors certes Winword ne pourra pas exploiter mes &H0 puisqu'il est tout simplement incapable de les afficher. Mais Notepad++, par exemple, est tout à fait en mesure d'afficher ce genre de caractères, c'est pour çà qu'il aurait été intéressant de pouvoir copier vers ce logiciel. Alors après,  j'ai codé d'autres types de copie (valeurs hexa, valeurs ASCII formatées et valeurs ASCII affichables) pour permettre de copier sans pb dans le clipboard en vue de les envoyer dans des logiciels comme Word. Pour l'exploitation à l'intérieur même de mon logiciel, pas de problèmes en effet.

Je ferais un tour sur vbfrance ce soir ;)
@+
0
Rejoignez-nous