CLIPBOARDSPY - ESPIONNEZ L'ACTIVITÉ DU PRESSE-PAPIER

mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017 - 24 juil. 2007 à 19:19
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 26 juil. 2007 à 16:17
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43561-clipboardspy-espionnez-l-activite-du-presse-papier

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 juil. 2007 à 16:17
Les grands esprits se rencontrent ^^
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
26 juil. 2007 à 16:12
c'est drole... j'ai une source qui porte presque le même nom : http://www.csharpfr.com/codes/CLIPBOARDSPY-ESPIONNER-PRESSE-PAPIER-TOUT-SIMPLEMENT_35649.aspx
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
26 juil. 2007 à 00:24
une classe pour la facilite d'utilisation pour les initité comme pour les debutants

ont ajoute le fichier cls puis on utilise les proprietes sans ce soucier du reste.

@+
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
26 juil. 2007 à 00:00
Très bon travail, mais je ne vois pas l'utilité d'implémenter un module de classe pour arriver au résultat voulu...
En plus je dois être nul, mais la sub "InitiateSubClassing", je n'y comprends rien...
En tout cas, tes codes fonctionnent bien.
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
25 juil. 2007 à 19:28
Suffisait de demander ;)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 juil. 2007 à 09:05
Mise à jour effectuée.

Projet décliné sous differentes formes.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 juil. 2007 à 07:24
Suffit d'ajouter le .ctl dans le projet, au pire :p
mais je vais, dans la journée, proposer trois versions de ce code...
CTL
CLS
FRM

"le changement de la chaîne d'écoute du Clipboard"
en fait, Windows previent (en gros) la premiere appli enregistrée des evenements du Clipboard.
Cette appli a la tache de refiler l'info a la fenetre qui suit, qui a pour tache de retransmettre le message a celle qui suit, etc, etc.

lorsqu'une fenetre F est fermée, la chaine doit se remettre a jour : F-1 devra desormais envoyer ses messages à F+1...

plus clair ?
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
25 juil. 2007 à 01:22
Salut Renfield!
çà veut dire quoi "le changement de la chaîne d'écoute du Clipboard"?
Parce que le code de l'API Guide gère l'évènement du changement du clipboard; il répond quand on fait un "copier" à partir d'une autre application, le Bloc-notes par ex.
Et admet quand même qu'il est plus simple à comprendre que ton code...en tout cas pour moi.
Et je suis d'accord avec EBARTSOFT, je ne comprends pas l'utilité d'un Usercontrôle, qui est tj un peu délicat à mettre en oeuvre (il faut l'enregistrer, etc).
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 juil. 2007 à 23:57
MimiZanzan, le code 'de fond' utilisé est exactement le même, on fait appel a la même API.
mais c'est la même raison qui m'a poussé a faire un UserControl, je souhaitais faire quelque chose de simple a mettre en place...
remarques, un
Private WithEvents moClipboardSpy As CClipboardSpy

n'est pas très très complexe ^^

pour l'exemple de l'API guide, il illustre parfaitement l'API en question, mais ne gère pas le changement de la chaine d'ecoute du Clipboard, et le Subclassing tel qu'utilisé rend l'IDE instable.

EB> content que le coté technique attire ton attention
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
24 juil. 2007 à 23:45
mimiZanzan > Tout juste mimi le presse papier a été concu de telle sorte que n'importe application puisse echanger des données et interagir entre elle du coup il exite un bon nombre de fonction qui permete de le manipuler sans trop ce casser la tete.

J'aurais plutot vu une classe plutot qu'un control car il n'y a rien de "visuel" dans le fait de receptionner des evenemtn du clipboard. Neanmoins c'est techniquement sympa

@+
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
24 juil. 2007 à 19:19
Ton code est intéressant, mais il y a un moyen beaucoup plus simple de surveiller le presse-papier, que l'on peut trouver dans l'API-Guide (http://www.allapi.net/), dans l'exemple donné pour la fonction SetClipboardViewer.
Je le retranscris ci-dessous:
Dans une form1:
Private Sub Form_Load()
'Subclass this form
HookForm Me
'Register this form as a Clipboardviewer
SetClipboardViewer Me.hwnd
End Sub
'
Private Sub Form_Unload(Cancel As Integer)
'Unhook the form
UnHookForm Me
End Sub
'
Private Sub Command1_Click()
'Change the clipboard
Clipboard.Clear
Clipboard.SetText "Hello !"
End Sub

Dans un module standard:
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetClipboardViewer Lib "user32" (ByVal hwnd As Long) As Long
Public Const WM_DRAWCLIPBOARD = &H308
Public Const GWL_WNDPROC = (-4)
Dim PrevProc As Long
'
Public Sub HookForm(F As Form)
PrevProc = SetWindowLong(F.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
'
Public Sub UnHookForm(F As Form)
SetWindowLong F.hwnd, GWL_WNDPROC, PrevProc
End Sub
'
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
If uMsg = WM_DRAWCLIPBOARD Then
'MsgBox "Clipboard changed ..."
Form1.Print " Le contenu du Presse-papier a changé à " & FormatDateTime(Now, vbLongTime)
End If
End Function

Et çà marche!
Bravo quand même pour ton code, quoique je n'ai pas encore tout compris....
Rejoignez-nous