Clipboard.SetText() и запущенный RDP Client
От: Wissenschaftler http://rsdn_user.livejournal.com
Дата: 12.01.11 20:05
Оценка:
Обнаружил очень странный глюк — если на машине запущен RDP Client (удаленный рабочий стол, он же mstsc), то Clipboard.SetText() срывает крышу:
1. Если вызвать Clipboard.SetText() и сразу же Clipboard.GetText() — GetText() возвращает корректное значение.
2. Если сделать SetText(); Sleep(100); GetText() — вылетает птичка Exception.
3. Если делать SetText() по нажатию на одну кнопку, а GetText() — на другую, последний возвращает пустую строку.
Shift+Insert из всех прочих приложений также ничего не вставляет.

Глюк проявляется не на удаленной машине, открытой через RDP, а на клиентской машине, где физически запущен RDP Client!
Подозреваю, что возникает конфликт между clipboard sharing в RDP-клиенте и .Net-реализацией класса Clipboard. Вопрос — как бороть. Вариант Капитана "не использовать RDP-клиент" работает, но не устраивает, т.к. лень перетаскивать 100500 редкоиспользуемых приложений с сервера на клиентскую машину.

P.S. На машине 2 экрана и RDP Client обычно максимизируется на второстепенный. Может, здесь загвоздка?

13.01.11 11:58: Перенесено модератором из '.NET' — TK
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re: Clipboard.SetText() и запущенный RDP Client
От: TK Лес кывт.рф
Дата: 12.01.11 20:26
Оценка:
Здравствуйте, Wissenschaftler, Вы писали:

W>Shift+Insert из всех прочих приложений также ничего не вставляет.


Не вставляет из_других_приложений или вообще нигде не вставляет?

W>Подозреваю, что возникает конфликт между clipboard sharing в RDP-клиенте и .Net-реализацией класса Clipboard. Вопрос — как бороть.


Берите .net framework sources и смотрите где именно падает / возвращает пустой текст. Работа с clipboard не самая сложная штука — всегда можно написать свой аналог класса Clipboard.

Возможно, что RDP-клиенте просто периодически блокирует доступ к clipboard — попробуйте мониторить содержимое буфера в цикле.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Clipboard.SetText() и запущенный RDP Client
От: Wissenschaftler http://rsdn_user.livejournal.com
Дата: 13.01.11 11:34
Оценка:
Здравствуйте, TK, Вы писали:

TK>Не вставляет из_других_приложений или вообще нигде не вставляет?

MyApp.Clipboard.SetText() -> OtherApp.Shift+Insert не работает с вероятностью больше 90%
OtherApp.Ctrl+Insert -> AnyApp.Shift+Insert и OtherApp.CtrlInsert -> MyApp.Clipboard.GetText() всегда работает
Вроде, достаточно формально описал.

TK>Берите .net framework sources и смотрите где именно падает / возвращает пустой текст.

Ссылку на KB не подбросите? Там, вроде, тучу каких-то флагов в студии надо было проставлять.
TK>Работа с clipboard не самая сложная штука — всегда можно написать свой аналог класса Clipboard.
Таки да. Но у форум-кунов совета спросить всегда быстрее

TK>Возможно, что RDP-клиенте просто периодически блокирует доступ к clipboard — попробуйте мониторить содержимое буфера в цикле.

Думаю, он в цикле вызывает GetText(), чтобы синхронизироваться с удаленной машиной. Буду копать.
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re[2]: Clipboard.SetText() и запущенный RDP Client
От: Pavel Dvorkin Россия  
Дата: 13.01.11 12:33
Оценка:
Здравствуйте, TK, Вы писали:

TK>Берите .net framework sources и смотрите где именно падает / возвращает пустой текст. Работа с clipboard не самая сложная штука — всегда можно написать свой аналог класса Clipboard.


Посмотри лучше сам. Там для этой цели зачем-то OLE приплели.

https://connect.microsoft.com/VisualStudio/feedback/details/92689/clipboard-settext-throws-exception?wa=wsignin1.0

Opened: 14.10.2005 4:58:24

и до сих пор не исправимли,судя по дате последнего сообщения
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.