Je fais cela en C#, mais, je suppose, ce n'est pas problème spécifique de la langue ...modifier le contenu du presse-papiers presse-papiers changement
J'ai quelques exemples de code sur la façon de détecter le moment où le contenu des changements de presse-papiers. Maintenant, je veux modifier le texte qui vient d'être copié (dépouiller quelques étiquettes) et remplacer le texte du presse-papiers par un texte fixe. Mais si je SetDataObject() lorsque je détecte que le contenu du Presse-papiers a changé, cela générera le message que le contenu du Presse-papiers a de nouveau changé. En théorie, je suppose, cela ressemble à une boucle infinie (en pratique pour une raison quelconque ce n'est pas le cas).
Quelle est la stratégie pour faire cette modification une fois, et a envoyé le message dans la chaîne de surveillance du presse-papiers?
P.S. Comme un test que je suis en train de suivre, mais ce qui se passe est Clipboard.SetDataObject .. ligne est appelée deux fois. Je ne comprends pas pourquoi, je m'attendrais à le faire infiniment.
case Win32.Msgs.WM_DRAWCLIPBOARD:
String clipboardText = GetClipboardText();
if (!String.IsNullOrEmpty(clipboardText))
{
Clipboard.SetDataObject("test(" + clipboardText + ")!");
}
Win32.User32.SendMessage(_ClipboardViewerNext, m.Msg, m.WParam, m.LParam);
Il attend une boucle inifinite, mais ne voyant que cela se produire deux fois dans cet exemple ... – cjk
Mais ce n'était pas la question. La vraie question était de savoir comment gérer cela correctement. L'évitement de la boucle infitite est probablement dû au fait de ne pas passer le message Windows (le piégeant) lorsqu'il gère le message. –
il y a un meilleur moyen (un général) pour empêcher la récursivité. Voir ma réponse ci-dessous. – Giorgi