¿Cómo puedo obtener acceso exclusivo al portapapeles para realizar pruebas?

StackOverflow https://stackoverflow.com/questions/1822996

  •  10-07-2019
  •  | 
  •  

Pregunta

Tengo una aplicación que, para resumir, usa el portapapeles para parte de su operación.

Sin embargo, a veces, por razones que nunca he clavado al 100%, a veces el portapapeles no está disponible. Algunas veces el cliente RDC lo bloquea, otras no. Y es uno de esos extremadamente difíciles de reproducir cuando realmente se necesita algún tipo de trato.

¿Podría uno escribir un pequeño programa de prueba que, mientras se ejecuta, no permite que ningún otro programa acceda al portapapeles?

¿Fue útil?

Solución

Supongo que podría llamar a OpenClipboard y EmptyClipboard, luego simplemente mantenerlo abierto y solo llamar a CloseClipboard cuando la aplicación de prueba salga, o algo así ...

EDITAR DE SCHNAPPLE

Entonces, esto es lo que hice esencialmente y encontré el código C # para hacerlo ... ese otro sitio

[ 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");
}

Otros consejos

La solución fácil puede ser configurar manualmente RemDesk para no monitorear el portapapeles. Es una opción en RemDesk ... Pero sí, mantener abierto el portapapeles debería tener el efecto deseado, y también evitará que las notificaciones WM_DrawClipboard se envíen a los espectadores del portapapeles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top