![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Sniper_super |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 8.5.2007 Репутация: нет Всего: нет |
У меня есть текст в буфере обмена и, например, хендел блокнота, я симулирую нажатие кнопок <ctrl+V> и текст попадает в блокнот. Но когда я работаю, например, с Paint'ом или другими подобными приложениями, то после <ctrl+V> ничего не происходит.
И сам вопрос, как мне узнать что в приложение я могу вставлять текст с буфера обмена или не могу? Заранее спасибо. |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Проверить состояние пункта меню "Правка->Вставить" - затемнено ли оно (MF_GRAYED) или нет. Функция GetMenuState. Будет ли эта функция будет работать с чужим меню приложения - не знаю. Это сообщение отредактировал(а) 586 - 14.4.2009, 16:38 |
|||
|
||||
| Sniper_super |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 8.5.2007 Репутация: нет Всего: нет |
Да это можно, но это будет действовать только для конкретных приложений в которых есть меню. Это сузит проблему но она все равно останется |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Твой подход к работе с приложениями изначально не универсальный. Если нужно проверить возможность вставки в Edit Control, то нужно проверить стиль ES_READONLY. Для других стандартных контролов возможности вставки нет. Контролы самописные (например в Paint'e), и как там реализована вставка - неизвестно, известно лишь одно - сочетание клавиш Ctrl+C / Ctrl+V. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
чтобы определить, можно ли вставить содержимое буфера в конкретном приложении, нужно знать формат обмена этого приложения
а поскольку формат буфера обмена может формироваться произвольно, исходя из потребностей разработчика, то эта задача, в общем случае, нерешаема максимум - можно определить, поддерживает ли содержимое буфера заданный формат(ы): IsClipboardFormatAvailable, EnumClipboardFormats Добавлено через 11 минут и 19 секунд можно приспособиться к коробочным системам разработки, таким как билдер или делфи, в них эта задача решается стандартными компонентами Action но пытаться привязываться к таким частным реализациям, очевидно неуниверсально, эффект в принципе будет тот же, что и перебирать меню: где-то сработает, а где-то - нет не нужно пытаться перехитрить майкрософт, очевидно, такая функция потребовала бы поддержку обратной связи с системой при разработке всех оконных приложений, оно нам надо, так усложнять GUI? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Sniper_super |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 8.5.2007 Репутация: нет Всего: нет |
Можно поподробнее, может так попробую |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
http://articles.org.ru/cfaq/index.php?qid=628&catid=34
http://www.delphikingdom.com/asp/vcl.asp?vclID=539 по поводу привязки к делфи - это была ирония, в здравом уме это делать просто ни кто не будет, поскольку любое внедрение в образ изначально сложнее, и менее гарантировано, чем метод, предложенный 586 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
в принципе, можно поставить сниффер (отложенный буфер) на этот формат и обрабатывать WM_RENDERFORMAT
т.е. можно определить момент, когда другое приложение открыло буфер обмена и запросило из него определенный формат данных, но вот что оно дальше с ним сделает - неизвестно: может получить, вставить, а может и отбросить, как неподдерживаемый, это поведение полностью на совести программиста подробности здесь: http://frolov-lib.ru/books/bsp/v17/ch2_4.htm Добавлено через 7 минут и 20 секунд +, похоже, это сработает только один раз, т.е. как только реальные данные появятся в буфере, все последующие его вставки сопровождаться уведомлением уже не будут -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |