Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> послать текст активному полю ввода текущего активн, послать текст активному полю ввода текущ 
:(
    Опции темы
kastron
  Дата 28.11.2012, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Код

var
  h:hwnd;
  PID:dword;
  lpgui: tagGUITHREADINFO;
  hCaret:HWND;
  txt:string;
begin
  txt:='TEXT';
  h:=GetForegroundWindow;
  PID:=GetWindowThreadProcessId(h);
  lpgui.cbSize:=sizeof(tagGUITHREADINFO);
  GetGUIThreadInfo(PID, lpgui);
  hCaret:=lpgui.hwndCaret;
  SendMessage(hCaret,WM_SETTEXT,0,DWORD(PChar(txt)));
end;

PM MAIL   Вверх
kami
Дата 29.11.2012, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Один из вариантов, нужный текст "набирается клавиатурой" в активном поле ввода, делалось 3 года назад в качестве разминки, в D7. Под юникодные версии Delphi не адаптировалось, не было необходимости.
Код

function TForm1.GetVKCode(Ch: Char): Word;
begin
  Result := VkKeyScanEx(Ch, GetKeyboardLayout(0));
  if Result = High(Word) then
    begin
      Beep;
      Memo1.Text := 'Error';
      Caption:=Ch;
    end;
end;
//=============================================
var
  ch: Char;
  Input: TInput;
  IsUpperCase: boolean;
begin
  for i:=1 to Length(FBuf) do // FBuf - строка, которую нужно набрать.
    begin
      ch := FBuf[i];

      IsUpperCase := HiByte(GetVKCode(Ch)) <> 0;

      Input.Itype := INPUT_KEYBOARD;
      Input.ki.dwFlags := 0;
      Input.ki.time := 0;
      Input.ki.dwExtraInfo := 0;

      if isUpperCase then
        begin
          Input.ki.wVk := VK_SHIFT;
          SendInput(1, Input, SizeOf(TInput));
          //Sleep(20);
        end;

      Input.ki.wVk := LoByte(GetVKCode(ch));
      SendInput(1, Input, SizeOf(TInput));
      Sleep(10);

      Input.ki.dwFlags := KEYEVENTF_KEYUP;
      SendInput(1, Input, SizeOf(TInput));
      Sleep(10);

      if isUpperCase then
        begin
          Input.ki.wVk := VK_SHIFT;
          SendInput(1, Input, SizeOf(TInput));
          //Sleep(20);
        end;
      inc(FBufPos);
  end;
end;


Это сообщение отредактировал(а) kami - 29.11.2012, 07:57
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

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


 




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


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

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