Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2010, 04:56   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Не успевает разлочиться клипборд

Посылаю много сочетаний подряд. Типа CTRL+L, CTRL+T и пр. После некоторых сочетаний мне нужно с буфера обмена считать текст. Но, похоже, он не успевает меня обрабатывать, поскольку в него ничего не копируется. Ощущение, что
Код:
Keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
 Keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);
 Keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);
 Keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
Игнорируется полностью.
Я сделал по-другому вызвал контекстное меню:
Код:
Keybd_event(VK_APPS, MapVirtualKey(VK_DOWN, 0), 0, 0);
 Keybd_event(VK_APPS, MapVirtualKey(VK_DOWN, 0), KEYEVENTF_KEYUP, 0);
 Sleep(500);
 Keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
 Keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), KEYEVENTF_KEYUP, 0);
 Sleep(500);
 Keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
 Keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), KEYEVENTF_KEYUP, 0);
 Sleep(500);
 Keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
 Keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), KEYEVENTF_KEYUP, 0);
 Sleep(500);
 Keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
 Keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), KEYEVENTF_KEYUP, 0);
 Sleep(500);
 Keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
 Keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), KEYEVENTF_KEYUP, 0);
 Sleep(500);
 Keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), 0, 0);
 Keybd_event(VK_DOWN, MapVirtualKey(VK_DOWN, 0), KEYEVENTF_KEYUP, 0);
 Sleep(500);
 Keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0);
 Keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), KEYEVENTF_KEYUP, 0);
Им вызвал пункт "Скопировать ссылку".

Эффект нулевой - похоже не хочет он обрабатывать и все тут.

Как поступить?

P.S. Через раз выскакивает сообщение - неможно притронуться к клипборду: (Cannot open clipboard)

причем при трассировке он мне показывает, что буфер пуст, в тот же момент захожу в браузер, нажимаю CTRL+V и вставляетс нужная ссылка.

Вот такая же ситуация: http://www.progz.ru/forum/index.php?...aded&pid=49296

Я тоже использую CTRL+V до этого.

Вот еще аналогично: http://programmersforum.ru/showthread.php?t=22161

Может можно как-то не через буфер эт. делать?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 18.05.2010 в 05:40.
Alex Cones вне форума Ответить с цитированием
Старый 18.05.2010, 10:27   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Алекс, во первых не используйте sleep, а сделайте буфер команд нажатий в отдельном потоке (тот же таймер) и инкрементируйте позицию буфера через временной интервал, а во вторых чем postmessage не устроил-то?

Добавлено
Цитата:
Ну дык я ж не знаю, что за браузер будет
ааа, тады ясно, вопрос снимается

Цитата:
Можете показать, как
так создаешь таймер через timesetevent, делаешь буфер (массив) с набором требуемой последовательности нажатий (кодов клавиш) и по срабатыванию таймера поочередно делаешь выборку из массива и запуск в Keybd_event(), когда весь массив считан, таймер вырубить.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 18.05.2010 в 16:40.
raxp вне форума Ответить с цитированием
Старый 18.05.2010, 16:26   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
а сделайте буфер команд нажатий в отдельном потоке (тот же таймер) и инкрементируйте позицию буфера через временной интервал,
О_о Чет я не очень поянл. Можете показать, как?
Цитата:
а во вторых чем postmessage не устроил-то?
Ну дык я ж не знаю, что за браузер будет.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 19.05.2010, 16:08   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
так создаешь таймер через timesetevent, делаешь буфер (массив) с набором требуемой последовательности нажатий (кодов клавиш) и по срабатыванию таймера поочередно делаешь выборку из массива и запуск в Keybd_event(), когда весь массив считан, таймер вырубить.
Эээээээ.... Как-то не врубился. Там же сочетания по две клавиши одновременно могут быть, а могут и не быть (RETURN, TAB)
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 19.05.2010, 16:19   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

массив двухмерный, отсутствие элемента обрабатываешь.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 19.05.2010, 16:31   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Вот я сейчас в параллельном проекте попробовал так:
Код:
For J := 0 to 1000000000 do K := Random(1);

   ClipBoard.AsText := Name;

   For J := 0 to 1000000000 do K := Random(1);
Вставляет нормальный клипборд, ошибки вроде нет, но скорость программы понизилась раз в 100. Вы предлагали что-то вроде этого?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 19.05.2010, 16:51   #7
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

А может всё-таки послать окну WM_COPY?
пыщь
JTG вне форума Ответить с цитированием
Старый 19.05.2010, 17:02   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
А может всё-таки послать окну WM_COPY?
Дело в том, что браузер не известен заранее. Кому посылать? Browser.handle?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 19.05.2010, 17:07   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

можно взять активное окно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.05.2010, 17:09   #10
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Хм... А как с помощью отправки сообщения можно скопировать ссылку?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает клипборд Alex Cones Общие вопросы Delphi 4 31.07.2009 12:41
Проблема, не успевает удалится файл Lonix Общие вопросы Delphi 6 07.04.2007 17:32