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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2010, 21:38   #1
dacorp
Пользователь
 
Регистрация: 12.06.2010
Сообщений: 48
По умолчанию Delphi vs. Буфер обмена

Здравствуйте!
Столкнулся с проблемой при написании программы для автоматизации.
Задача состоит в том, чтобы автоматизировать рабочий процесс путём передачи текстовых данных и нажатий клавиш внутри чужого процесса.
Написал такой код:

Код:
if FindWindow(nil, pChar(Edit1.Text)) = 0 then
  ShowMessage('Окно не найдено')
else
begin
SetTextBuf(pChar(Edit2.Text));
PostMessage(FindWindow(nil,pChar(Edit1.Text)), WM_PASTE, 0, 0);
PostMessage(FindWindow(nil,pChar(Edit1.Text)), WM_keyup, VK_F5, 0);
end;
Передача системного нажатия клавиши F5 проходит нормально, но вот вставлять текст из буфера не хочет... Пытался за место VK_F5 поставить код HEX занчения букв и цифр, к примеру 30 (hex) > 0 (key), но тоже ничего не вышло
Помогите, пожалуйста!

Последний раз редактировалось Stilet; 05.07.2010 в 08:59.
dacorp вне форума Ответить с цитированием
Старый 04.07.2010, 10:12   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

setwindowtext
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 04.07.2010, 17:46   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Помоему ТС хочет менять значение контролов.
Цитата:
Сообщение от dacorp Посмотреть сообщение
PostMessage(FindWindow(nil,pChar(Ed it1.Text)), WM_PASTE, 0, 0);
А куды текст вставляется? Не в форму наверное? Надо искать в этом окне контрол в который текст вставляется. Смотрим через WinSpy или аналогичную команду класс объекта, а затем примерно так (в случае нескольких контролов одного класса придётся проверять дополнительно ещё чего-нибудь, например, координаты на форме)
Код:
var
  hwnd0: HWND;
begin
if FindWindow(nil, pChar(Edit1.Text)) = 0 then
ShowMessage('Окно не найдено')
else
begin
edit2.SelectAll;
edit2.CopyToClipboard;
hwnd0 := FindWindow(nil, pChar(Edit1.Text));
hwnd0 := FindWindowEx(hwnd0, 0, 'TEdit', nil);//допустим 'TEdit' - класс контрола в который вставляем
PostMessage(hwnd0, WM_PASTE, 0, 0);
PostMessage(FindWindow(nil,pChar(Edit1.Text)), WM_keyup, VK_F5, 0);
Цитата:
Сообщение от dacorp Посмотреть сообщение
Пытался за место VK_F5 поставить код HEX занчения букв и цифр, к примеру 30 (hex) > 0 (key), но тоже ничего не вышло
Что-то не понял, зачем с VK_F5 эксперементировать, если
Цитата:
Сообщение от dacorp Посмотреть сообщение
Передача системного нажатия клавиши F5 проходит нормально
eoln вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Буфер обмена Dem6 Общие вопросы Delphi 0 14.12.2009 19:09
буфер обмена olimpus Microsoft Office Excel 2 19.09.2009 08:52
Буфер обмена nusik Общие вопросы Delphi 2 21.05.2009 00:53
буфер обмена __@cmd@__ Общие вопросы Delphi 2 04.02.2009 12:24