Что нового

Send в окно по известному PID или хенделу

polzavatel

Новичок
Сообщения
50
Репутация
2
Вот у меня есть 2 окна с одинаковыми title, как мне заставить controlsend отправлять команду в нужное мне первое окно?
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Посмотри справку по controlsend. Отлавливай окна по ControlID.
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
о_О изменить например тайтл на другое название и использовать его WinSetTitle
 
Автор
P

polzavatel

Новичок
Сообщения
50
Репутация
2
Спасибо большое, я даже не думал про это).


Добавлено:
Сообщение автоматически объединено:

А нет, новая трабла, оно само переименовывает обратно, как этого избежать?
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
А нет, новая трабла, оно само переименовывает обратно, как этого избежать?
странно

попробуй индентификацию по пиду делать
Код:
$PID = ProcessExists("BLA.exe")
WinSetTitle("Blaaa Bla Bla","",$PID)


если нет то class/name

:scratch: поидее не должен меняться

.....и не забудь
Код:
#RequireAdmin


ЗЫ
Код:
Opt("WinTitleMatchMode",2)
в справке сам прочитаешь для чего
 

darkwhite

Знающий
Сообщения
129
Репутация
5
Ничего не понимаю
название окна поменять можешь ? а найти его Хендл нет? :shok:
нашел хендл и работаешь с ним - пока окно существует он не меняется
Код:
WinGetHandle ( "title" [, "text"] )
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
title одинаковый написал же он..два окна
Код:
WinGetHandle ( "title" [, "text"] )
как тут потом различить окна а ?
 

darkwhite

Знающий
Сообщения
129
Репутация
5
lirikmel
title одинаковый написал же он..два окна Код: AutoIt [Выделить]
WinGetHandle ( "title" [, "text"] )
как тут потом различить окна а ?
polzavatel
А нет, новая трабла, оно само переименовывает обратно, как этого избежать?

Значит он уже его нашел раз меняет на нем название или я ошибаюсь.
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
как переключаться между окнами у которых хендл берется на основе title ....и title одинаковый ?
 
Автор
P

polzavatel

Новичок
Сообщения
50
Репутация
2
Всё более-менее норм, работает через хендл, но выполняет команды с задрежкой от 0 сек в плоть до того что команда не проходит, можно ли как то ускорить процесс?
 

winstan

Эксплотатор)
Сообщения
406
Репутация
79
polzavatel [?]
Всё более-менее норм, работает через хендл, но выполняет команды с задрежкой от 0 сек в плоть до того что команда не проходит, можно ли как то ускорить процесс?
А какой код сейчас получился?
 
Автор
P

polzavatel

Новичок
Сообщения
50
Репутация
2
Код:
HotKeySet("^a", "fun")
HotkeySet("^s", "s")
HotKeySet("^d", "d")
HotKeySet("^f", "f")
HotKeySet("^g", "g")
local $aa

func fun()
	$aa = WinGetHandle('[ACTIVE]') 
EndFunc

func s()
	ControlSend($aa,'','','{F1}')
 EndFunc
 
func d()
	ControlSend($aa,'','','{F2}')
EndFunc
func f()
	ControlSend($aa,'','','{F3}')
EndFunc
func g()
	ControlSend($aa,'','','{F4}')
	EndFunc


while 1
	sleep(1)
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
ArtInt [?]
Локалка в функциях видиться не будет
Будет:

Код:
Local $Var = "Test"

Test()

Func Test()
	MsgBox(64, 'Title', $Var)
EndFunc


Если переменные используются вне функций и в начале скрипта, то можно совсем не объявлять их, они и без этого будут глобальными.
 

ArtInt

Знающий
Сообщения
135
Репутация
18
CreatoR, а зачем тогда вообще использовать Global и Local отдельно? В самом теле можно и локал использовать, и глобал, всё равно функции увидят, а функциях глобал вообще юзать запрещено... ??? _ ???
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481

darkwhite

Знающий
Сообщения
129
Репутация
5
Будет:

Код:
Local $Var = "Test"

Test()

Func Test()
    MsgBox(64, 'Title', $Var)
EndFunc
Правильно, потому что в данном случае она равна Global так как объявленна как Local для Главного тела программы. Вот Видна ли Local во вложенной функции относительно main в другой функции)
 
Верх