Показать сообщение отдельно
  #3  
Старый 29.03.2011, 21:49
klmmn klmmn вне форума
Прохожий
 
Регистрация: 20.03.2011
Сообщения: 11
Репутация: 10
По умолчанию

Вобщем, получилось так -
Код:
 procedure TLinker.Timer1Timer(Sender: TObject);
  var
   Buf: array[0..5] of char;
   CommaPos, SpasePos: Integer;
   Index: Integer;
   Symbol: String;
   Layout: array[0.. KL_NAMELENGTH] of char;
  begin
   if workLink and workLine then                                     // если в глоб. перем. есть дескр. связываемых окон
    begin
     GetWindowText(WndS, Buf, 6);                                    // в Buf получаем первые 5 символов заголовка окна
     CommaPos:= Pos(',', Buf);                                       // пытаемся найти позицию запятой
     if CommaPos <> 0 then                                           // если найдено
      begin
       Symbol:= Copy(Buf, 1, CommaPos-1);                            // получаем Symbol без запятой
       SpasePos:= Pos(' ', Symbol);                                  // пытаемся найти позицию пробела
       if SpasePos <> 0 then Symbol:= Copy(Buf, 1, SpasePos-1);      // если найдено
      end
     else SpasePos:= 0;                                              // если не найдено запятой, то нет и пробела

     if (CommaPos = 0) and (SpasePos = 0) then Symbol:= Buf;         // если не найдена ни заятая, ни пробел
     if Symbol <> RSymbol then
      begin
       RSymbol:= Symbol;
       SetForegroundWindow(WndP);                                    // активизируем окно внешней программы
       LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE);  // английская раскладка клавиатуры
       for Index:= 1 to SizeOf(RSymbol) do
        begin
         Keybd_event(Ord(RSymbol[Index]),0,0,0);                     //нажать кл. Enter
         Keybd_event(Ord(RSymbol[Index]),0,KEYEVENTF_KEYUP,0);       //нажать кл. Enter
        end;
       Keybd_event(13,0,0,0);                                        //нажать кл. Enter
       Keybd_event(13,0,KEYEVENTF_KEYUP,0);                          //отпустить кл. Enter
      end;
    end;
  end;
end.

Но всёравно не всё работает. Ввод строки побуквенно в текстовое поле происходит нормально. Но почему-то не работает нажатие кнопки Enter - не активирует процесс поиска в окне внешней программы. Хотя если делать вручную - всё работает.

Может есть какие-то способ написать по другому строки процедуры выделенные зелёным? Возможно другой вариант подойдёт...
Ответить с цитированием