
29.03.2011, 21:49
|
Прохожий
|
|
Регистрация: 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 - не активирует процесс поиска в окне внешней программы. Хотя если делать вручную - всё работает.
Может есть какие-то способ написать по другому строки процедуры выделенные зелёным? Возможно другой вариант подойдёт...
|