Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать что текст с буфера попал в приложенние 
:(
    Опции темы
Sniper_super
Дата 14.4.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 8.5.2007

Репутация: нет
Всего: нет



У меня есть текст в буфере обмена и, например, хендел блокнота, я симулирую нажатие кнопок <ctrl+V> и текст попадает в блокнот. Но когда я работаю, например, с Paint'ом или другими подобными приложениями, то после <ctrl+V> ничего не происходит. 

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

Заранее спасибо.
PM MAIL   Вверх
586
Дата 14.4.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Sniper_super @  14.4.2009,  14:53 Найти цитируемый пост)
И сам вопрос, как мне узнать что в приложение я могу вставлять текст с буфера обмена или не могу?

Проверить состояние пункта меню "Правка->Вставить" - затемнено ли оно (MF_GRAYED) или нет.

Функция GetMenuState. Будет ли эта функция будет работать с чужим меню приложения - не знаю.

Это сообщение отредактировал(а) 586 - 14.4.2009, 16:38
PM   Вверх
Sniper_super
Дата 14.4.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 8.5.2007

Репутация: нет
Всего: нет



Цитата

Проверить состояние пункта меню "Правка->Вставить" - затемнено ли оно (MF_GRAYED) или нет.


Да это можно, но это будет действовать только для конкретных приложений в которых есть меню. Это сузит проблему но она все равно останется
PM MAIL   Вверх
586
Дата 14.4.2009, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата
Это сузит проблему но она все равно останется

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

Если нужно проверить возможность вставки в Edit Control, то нужно проверить стиль ES_READONLY. Для других стандартных контролов возможности вставки нет. Контролы самописные (например в Paint'e), и как там реализована вставка - неизвестно, известно лишь одно - сочетание клавиш Ctrl+C / Ctrl+V.
PM   Вверх
GremlinProg
Дата 14.4.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



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

максимум - можно определить, поддерживает ли содержимое буфера заданный формат(ы): IsClipboardFormatAvailable, EnumClipboardFormats

Добавлено через 11 минут и 19 секунд
можно приспособиться  к коробочным системам разработки, таким как билдер или делфи,
в них эта задача решается стандартными компонентами Action

но пытаться привязываться к таким частным реализациям, очевидно неуниверсально,
эффект в принципе будет тот же, что и перебирать меню: где-то сработает, а где-то - нет

не нужно пытаться перехитрить майкрософт,
очевидно, такая функция потребовала бы поддержку обратной связи с системой при разработке всех оконных приложений, 
оно нам надо, так усложнять GUI?


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Sniper_super
Дата 24.4.2009, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 8.5.2007

Репутация: нет
Всего: нет



Цитата

можно приспособиться  к коробочным системам разработки, таким как билдер или делфи,
в них эта задача решается стандартными компонентами Action


Можно поподробнее, может так попробую
PM MAIL   Вверх
GremlinProg
Дата 24.4.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 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


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GremlinProg
Дата 24.4.2009, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



в принципе, можно поставить сниффер (отложенный буфер) на этот формат и обрабатывать WM_RENDERFORMAT

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

подробности здесь: http://frolov-lib.ru/books/bsp/v17/ch2_4.htm

Добавлено через 7 минут и 20 секунд
+, похоже, это сработает только один раз,
т.е. как только реальные данные появятся в буфере, все последующие его вставки сопровождаться уведомлением уже не будут


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.