… предлагаю для решения простую задачку: посмотреть, как работает пример из этого поста при запущенной вот этой маленькой программке. Выяснить, что и почему происходит, и как с этим бороться.Ну что же, давайте разбираться. Грузим архив, открываем приложение. Видим обычную форму без
Чур без рефлектора:)
Получается, наш TestClipboard.exe
- У меня уже была открыта Visual Studio с
каким-то проектом, и я банально нажал F11, чтобы перейти в режим отладки. Открытый проект совершенно не важен, потому как нам будет нужен Immediate Window. Давайте попробуем из него получить текст из буфера обмена:
Clipboard.GetText() - Студия, как и скайп раньше, не может получить доступ к буферу обмена, только в этот раз у нас куда больше информации:
- Параметр ErrorCode — как раз то, что нам нужно. Поскольку под классом Clipboard находятся нативные функции Windows, мы будем смотреть, что не так у них. Конвертируем -2147221040 в hex, получаем 0x800401d0. Поискав число в MSDN или заглянув в winerror.h, узнаём, что числу соответствует константа CLIPBRD_E_CANT_OPEN.
- Давайте посмотрим теперь, какая функция WinAPI вернула нам такой результат. В описании константы в MSDN это указано:
0x800401D0 CLIPBRD_E_CANT_OPEN
Итак, «виновница» торжества — функция WinAPI OpenClipboard.
OpenClipboard failed.
- Приложение вызывает функцию OpenClipboard для получения доступа к буферу обмена. С этого момента доступ к буферу закрыт для всех остальных приложений.
- Приложение вызывает либо функцию GetClipboardData для получения данных, либо EmptyClipboard для его очистки и SetClipboardData для записи данных в буфер обмена.
- Приложение закрывает буфер обмена при помощи функции CloseClipboard.
OpenClipboard Function (Windows)
Clipboard (Windows)
No comments:
Post a Comment