Comment puis-je obtenir un accès exclusif au presse-papiers à des fins de test?
Question
J'ai une application qui, en résumé, utilise le presse-papiers pour une partie de son fonctionnement.
Parfois, cependant, pour des raisons que je n'ai jamais parfaitement cernées, le presse-papiers n'est parfois pas disponible. Parfois, le client RDC le bloque, parfois non. Et c’est l’un de ceux qui sont extrêmement difficiles à reproduire lorsque vous avez vraiment besoin de passer des accords.
Peut-on écrire un petit programme d’essai qui, lorsqu’il est lancé, n’autorise aucun autre programme à accéder au presse-papiers?
La solution
Je suppose que vous pouvez appeler OpenClipboard et EmptyClipboard, puis maintenez-le simplement ouvert et appelez CloseClipboard uniquement lorsque l'application de test se ferme, ou quelque chose comme ça ...
MODIFIER À PARTIR DE SCHNAPPLE
C’est donc ce que j’ai fait essentiellement et j’ai trouvé le code C # pour le faire sur ... cet autre site
[ DllImport( "user32.dll" ) ]
extern static bool OpenClipboard( IntPtr hWnd );
[ DllImport( "user32.dll" ) ]
extern static bool CloseClipboard();
[ DllImport( "user32.dll" ) ]
extern static IntPtr GetClipboardData( uint uFormat );
public static void GetSomeDib()
{
OpenClipboard( System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle );
IntPtr img = GetClipboardData(8);
MessageBox.Show("Clipboard Locked");
CloseClipboard();
MessageBox.Show("Clipboard Unlocked");
}
Autres conseils
La solution simple consiste peut-être simplement à configurer manuellement RemDesk pour ne pas surveiller le presse-papiers. C'est une option dans RemDesk ... Mais oui, le maintien du presse-papiers ouvert devrait avoir l'effet souhaité et empêcher les notifications WM_DrawClipboard d'être envoyées aux visualiseurs du presse-papiers.