Как получить эксклюзивный доступ к буферу обмена для тестирования? - PullRequest
1 голос
/ 01 декабря 2009

У меня есть приложение, которое, короче говоря, использует буфер обмена для части своей работы.

Иногда, хотя, по причинам, которые я никогда не использовал на 100%, иногда буфер обмена недоступен. Иногда клиент RDC блокирует его, иногда нет. И это один из тех, которые чрезвычайно трудно воспроизвести, когда вам действительно нужны какие-то предложения.

Можно ли написать небольшую тестовую программу, которая, пока она работает, не позволяет другим программам получать доступ к буферу обмена?

Ответы [ 2 ]

2 голосов
/ 01 декабря 2009

Полагаю, вы могли бы вызвать OpenClipboard и EmptyClipboard, а затем просто оставить их открытыми и вызывать CloseClipboard только при выходе из приложения тестирования или что-то в этом роде ...

РЕДАКТИРОВАТЬ ИЗ SCHNAPPLE

Итак, это то, что я сделал по сути, и я нашел код C #, чтобы сделать это на ... этом другом сайте

[ 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");
}
0 голосов
/ 15 марта 2010

Простое решение может быть просто вручную настроить RemDesk, чтобы не отслеживать буфер обмена. Это опция в RemDesk ... Но да, сохранение открытого буфера обмена должно иметь желаемый эффект, а также будет препятствовать отправке уведомлений WM_DrawClipboard зрителям буфера обмена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...