2010-06-02 2 views
3

Мне было интересно, если есть все, чтобы заблокировать и разблокировать буфер обмена с C#. В принципе, я бы написал что-то в этом, и я не хочу, чтобы кто-то еще писал ему, прежде чем я заберу свои вещи.Как заблокировать буфер обмена?

Как я могу это сделать?

+3

Это было бы плохой идеей, ИМХО, и, возможно, невозможно. Возможно, если бы вы подробно рассказали о том, чего вы на самом деле хотите достичь, у кого-то будет лучшее решение. – pdr

+2

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

+2

Это было бы неплохо, это было бы ужасно! Для пользователя было бы очень легко потерять данные, и он даже не знал бы, почему, он будет копировать материал, и большую часть времени он будет работать, но иногда нет. –

ответ

1

Функция API OpenClipboard(), за которой следует EmptyClipboard(), блокирует буфер обмена, пока не вызывается CloseClipboard. Вероятно, вы должны передать оконный дескриптор окна в целевом процессе. Не знаю, действительно ли это будет работать. Посетите pinvoke.net для необходимых деклараций.

+1

Это будет технически работать, но, как все понимают здесь, это вызовет ужасные проблемы для всех других приложений. –

+0

Хм, он пытается ускорить свою программу. Во-вторых, в то время как его программа фокусируется, это не ужасная проблема. –

0

Нет, буфер обмена не работает таким образом. Что делать, если пользователь хотел что-то копировать в другом приложении, но не мог, потому что вы каким-то образом заблокировали его?

Если вы пытаетесь связать два процесса, изучите альтернативы, предназначенные для межпроцессного взаимодействия, такие как удаленные, именованные каналы, сокеты или разделяемая память. Remoting, вероятно, первое место для поиска приложений, написанных на C#.

1

Как @shambulator говорит, что это не то, что предназначен для создания буфера обмена. Возможно, вам стоит попробовать другой подход. Интеграция с устаревшими системами может быть решена многими способами (большинство из них плохие, увы!).

Система, на которую вы можете отправлять нажатия клавиш: это приложение Windows? Можете ли вы копаться в его структуре окна, чтобы явно вводить тексты внутри текстовых полей by their HWNDs? Имеет ли система какие-либо файлы ввода/вывода, которые вы могли бы использовать? Возможно, вы могли бы зарыться в свою базу данных?

3

НЕ ДЕЛАЙТЕ. Буфер обмена существует для удобства ПОЛЬЗОВАТЕЛЯ, а не ПРОГРАММЫ! Вы будете вызывать ошибки и сбои в других программах, которые пытаются (правильно) использовать буфер обмена, включая программы, которые отслеживают обновления.

«Программа не должен передавать данные в нашем из буфера обмена без явного указания от пользователя.»
- Чарльз Петцольд, программирование Windows 3.1, Microsoft Press, 1992