Вверх ↑
Этот топик читают: Гость
Ответов: 53
Рейтинг: 1
#1: 2011-11-23 14:42:01 ЛС | профиль | цитата
Помогите организовать перебор окон в винде (выбор следующего/предыдущего)

Напрашивается самый простой способ - эмулировать горячие сочетания клавиш в компоненте KeyEvent, вот только как-то криво оно работает. Окна вроде и перебираются, но окно перебирающей программы не теряет фокуса (смена окон происходит под окном программы)
Использовал сочетания:
Alt+Esc - переключение между приложениями без вывода панели
Alt+Shift+Esc - переключение между приложениями без вывода панели в другую сторону.

При нажатий комбинаций на клаве все нормально переключается.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#2: 2011-11-23 14:46:29 ЛС | профиль | цитата
Читайте [burl=http://hiasm.com/wiki.html]СПРАВКУ[/burl]

Почему-то не отвечаютНаши правилаПриведи пример своей схемыПомочь сделать прогу
карма: 1

0
Ответов: 53
Рейтинг: 1
#3: 2011-11-23 14:54:24 ЛС | профиль | цитата
Я понимаю, что в справке все есть, но информация по компонентам мне ничем не помогла, поэтому задаю вопрос здесь.
Может я не в том направлении ищу? Подскажите, пожалуйста, что хоть искать в справке?

code_25889.txt
Это пример того, как оно не работает (Alt+Shift+Esc - переключение между приложениями без вывода панели в другую сторону.)
карма: 0

0
файлы: 1code_25889.txt [314B] [114]
Ответов: 5446
Рейтинг: 323
#4: 2011-11-23 15:07:53 ЛС | профиль | цитата
GetChiper, WinEnum FindWindow
карма: 1

0
Ответов: 53
Рейтинг: 1
#5: 2011-11-23 17:45:56 ЛС | профиль | цитата
Думал есть как-то попроще, но попробую... Спасибо!
------------ Дoбавленo в 17.46:
Реализовать получилось, но таким матюком, что аж самому стыдно и только в одну сторону...
Add(MainForm,1912298,49,168)
{
Width=665
Height=457
Caption="Пример использования WinEnum"
Point(Handle)
}
Add(WinEnum,1475972,280,182)
{
Point(GetActiveWindow)
link(onFindWindow,6933435:doEvent1,[])
}
Add(Button,5000268,189,476)
{
Left=18
Top=370
Width=135
Height=40
Caption="Начать перебор"
link(onClick,533024:doTimer,[])
}
Add(Button,5101839,168,175)
{
Left=15
Top=15
Width=190
Height=40
Caption="Список окон/приложений"
link(onClick,197951:doWork2,[])
}
Add(Hub,10753347,238,175)
{
link(onEvent1,5026834:doClear,[(264,181)(264,235)(431,235)(431,209)])
link(onEvent2,1475972:doEnum,[])
}
Add(Length,1721219,364,140)
{
}
Add(If_else,6667343,364,189)
{
Op2=Integer(0)
link(onFalse,5026834:doAdd,[])
link(Op1,1721219:Result,[])
}
Add(Hub,6933435,329,182)
{
link(onEvent1,1721219:doLength,[(352,188)(352,146)])
link(onEvent2,6667343:doCompare,[])
}
Add(HubEx,197951,210,175)
{
link(onEvent,10753347:doEvent1,[])
}
Add(WinEnum,6267344,343,476)
{
Point(GetActiveWindow)
link(onFindWindow,14629087:doEvent1,[(394,482)(394,426)])
link(onEndEnum,11769235:doEvent1,[])
}
Add(WinTools,2139516,567,497)
{
link(Handle,11698423:Value,[])
}
Add(Length,10583812,455,399)
{
}
Add(If_else,11100360,455,448)
{
Op2=Integer(0)
link(onFalse,11698423:doValue,[])
link(Op1,10583812:Result,[])
}
Add(Hub,14629087,399,420)
{
link(onEvent1,10583812:doLength,[(443,426)(443,405)])
link(onEvent2,6788547:doCompare,[(428,433)(428,447)(285,447)(285,545)])
}
Add(Hub,11769235,497,483)
{
link(onEvent1,2139516:doActive,[(543,489)(543,517)])
link(onEvent2,197951:doWork3,[(523,496)(523,365)(214,365)])
}
Add(Timer,533024,245,476)
{
Enable=1
link(onTimer,6267344:doEnum,[])
}
Add(Memory,11698423,567,455)
{
Point(Data)
link(Data,5345702:Var3,[(573,440)(551,440)(551,520)])
}
Add(If_else,13348897,343,539)
{
Op2=Integer(1)
link(onFalse,11100360:doCompare,[(415,552)(415,454)])
link(Op1,5345702:Var2,[])
link(Op2,6267344:GetActiveWindow,[])
}
Add(GetDataEx,5345702,343,515)
{
link(Data,6267344:Handle,[])
}
Add(If_else,6788547,294,539)
{
Type=5
Op2=String(Program Manager)
link(onTrue,13348897:doCompare,[])
}
Add(ListBox,5026834,455,196)
{
Left=15
Top=65
Width=535
Height=300
AddType=1
Point(String)
}
Add(InfoTip,16674942,140,119)
{
Info=#18:Отображение списка|
Width=393
Height=165
}
Add(InfoTip,13443059,175,378)
{
Info=#10:Смена окон|
Width=463
Height=242
}


Все не так просто как кажется. Компонент WinEnum, кроме нужных окон, выдает кучу пустых окнон (без названия), некоторые окна не могут быть отображены в принципе, так как это какието процессы без отображения на экране. В общем, до конца не понятно как это хозяйство функционирует.

В принципе, меня устроит и такой полувариант, но если кто подскажет как сделать "по людски", буду благодарен.
карма: 0

0
Ответов: 8930
Рейтинг: 823
#6: 2011-11-23 18:55:44 ЛС | профиль | цитата
GetChiper, вариант: code_25904.txt
карма: 19

0
файлы: 1code_25904.txt [2.5KB] [147]
Ответов: 53
Рейтинг: 1
#7: 2011-11-23 19:24:29 ЛС | профиль | цитата
Леонид, сохраните схему с русскими буквами, а то некорректно работает.
карма: 0

0
Ответов: 1731
Рейтинг: 68
#8: 2011-11-23 20:16:55 ЛС | профиль | цитата
GetChiper, в настройках браузера юникод выберите и будет нормально.
карма: 1

0
Ответов: 12
Рейтинг: 4
#9: 2012-03-15 20:13:44 ЛС | профиль | цитата
столкнулся с проблемой подобно ТС, а именно: необходимо сделать некий "макрос" в котором через Н-ый период времени Альт+табом переключалось на второе приложение там нажималось пару клавиш и снова альт+таб обратно... сколько непробовал - эмуляцией клавиш табулируется через пятуюточку, даже фоновым приложением писал всеравно табится сначала на хз куда, потом на нужное окно потом обратно на хз куда потом на первоначальное иногда без ХЗкуда обходится... уже весь череп сломал Еслиб процессы были разного имени можно былобы перебор делать хоть по имени (ну я не особо силён в программировании и такую штуку осилил бы), а вот оба окна между которыми нужно табаца имеют еще и один ехе-шник.. блин короче как съэмулировать по-человечески альт+таб?
карма: 0

0
Ответов: 5446
Рейтинг: 323
#10: 2012-03-15 20:47:54 ЛС | профиль | цитата
sdld, а зачем так извращаться? Ищете нужное окно ( FindWindow ), потом активируешь ( WinTools doPopup ), посылаешь нажатия, и тем же doActivate возвращаешься обратно.
карма: 1

1
Голосовали:sdld
Ответов: 12
Рейтинг: 4
#11: 2012-03-16 18:09:28 ЛС | профиль | цитата
iarspider, подскажи пожалуйста пример на какомнить приложении запущеном в 2 копии... я по перебору вообще запутываюсь =\
долбаный перебор =\ на тоже окно перебирает.. хотяб простенький пример покажите с 2 блокнотами запущеными пожалуйста.. нифига непонимаю
------------ Дoбавленo в 18.09:
Add(Hub,11902000,96,62)
{
OutCount=4
link(onEvent1,2187294:doBeep,[(116,68)(116,36)])
link(onEvent2,8278637:doFind,[(198,75)(198,61)])
link(onEvent3,11931388:doActive,[(198,82)(198,117)])
link(onEvent4,6235233:doPress,[(124,89)(124,95)])
}
Add(Timer,4285270,36,62)
{
Interval=3000
AutoStop=1
Point(doInterval)
link(onTimer,11902000:doEvent1,[])
}
Add(Beep,2187294,121,30)
{
Freq=800
Duration=1500
}
Add(WinTools,11931388,287,97)
{
link(Handle,8278637:Handle,[])
}
Add(WinEnum,8278637,287,48)
{
Point(GetActiveWindow)
link(Caption,10611460:Var,[])
}
Add(GlobalVar,10611460,287,19)
{
Name="okno"
Data=String(Калькулятор)
}
Add(KeyEvent,6235233,139,89)
{
Code=50
}
Add(Service,2953706,56,140)
{
Wait=0
}


Вот например с калькулятором.. запускаю их 2 штуки и активным окном ставлю блокнот к примеру.. через 3 секунды БИП и активируется окно калькулятора в нем жмаеца "2".. я даже не делаю пока вернутся обратно в блокнот, ибо там ваще заблужусь... Тут все нормально, но что мне нужно так не работает, а именно: запускаю программу, делаю активным 1 из калькуляторов (не имеет значения какой из 2х) и запускаю программу.. точнее запускаю и делаю активным калькулятор.. и через 3 сек БИИП и "2" жмется в этом калькуляторе и никак не хочет прыгать на 2й и в него жмать Как вот сделать чтобы программа независимо от того какое приложение активно (дубль одного и тогоже приложения или нет) - прыгала на "заднее" окно жмала там чтото и активировало "первое" не "цепляя" при этом саму фоновую программу, как это случается с эмуляцией альт+таба и еще чего нить не зацепила ненароком..
Всего 3 действия сделать нада а уже череп ломит =\
карма: 0

0
Ответов: 3889
Рейтинг: 362
#12: 2012-03-16 18:29:40 ЛС | профиль | цитата
sdld, onFindWindow кому у WinEnum сделан? А точка Handle? А такая же, только сверху - у KeyEvent?
карма: 1

1
Голосовали:sdld
Ответов: 12
Рейтинг: 4
#13: 2012-03-17 15:53:24 ЛС | профиль | цитата
1nd1g0, спасибо ) сделал другое, но даже лучше чем хотел слона то и не приметил!
карма: 0

0
Ответов: 1376
Рейтинг: 197
#14: 2012-03-17 16:41:23 ЛС | профиль | цитата
sdld,
code_27206.txt
карма: 1

1
файлы: 1code_27206.txt [6.6KB] [118]
Голосовали:CriDos
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)