![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Нужно активировать окно внешней программы и расположить его поверх всех других окон, при этом должно деактивироваться окно, которое было активно до этого.
Использовал Код:
SendMessage(WndP, WM_SETFOCUS,0,0); BringWindowToTop(WndP); Как эмулировать это? - выделить окно, но при этом чтобы всё другие остались деактивировались? Помогите, разобраться, пожалуйста. |
#2
|
|||
|
|||
![]() Код:
SetForegroundWindow(Form1.Handle); SetWindowPos(Form1.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE); взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя ![]() |
Этот пользователь сказал Спасибо Assistant за это полезное сообщение: | ||
T232006 (12.12.2022)
|
#3
|
|||
|
|||
![]() Вобщем, получилось так -
Код:
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 - не активирует процесс поиска в окне внешней программы. Хотя если делать вручную - всё работает. Может есть какие-то способ написать по другому строки процедуры выделенные зелёным? Возможно другой вариант подойдёт... |
#4
|
|||
|
|||
![]() попробуйте через sndkey32 (во вложении), юзать так:
Код:
sndkey32.AppActivate('Подключение к серверу'); sndkey32.SendKeys(PChar('{tab}{tab}{tab}' + ParamStr(1) + '{enter}'),True); sndkey32.AppActivate('Trassir'); sndkey32.SendKeys('^m',false); P.S.: использовал очень давно, но работало так как мне нужно взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя ![]() Последний раз редактировалось Assistant, 29.03.2011 в 21:58. |
#5
|
|||
|
|||
![]() Цитата:
А каким образом подключить этот файл? Я положил файл в папку проекта и пробовал подключить этот файл в основном файле через Код:
{$inqlude sndkey32} В чём может быть ошибка? |
#6
|
||||
|
||||
![]() Какбэ uses...
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#7
|
|||
|
|||
![]() Цитата:
Цитата:
Спасибище огромное за подсказки - всё работает супер. Намучался я с этой прогой. Но теперь всё, ок. |