Поиск дочернего окна

Обсуждение программ nnCron и nnCron LITE

Поиск дочернего окна

Postby Burunduk » Wed, 09 Oct 2013, 11:02

Есть главное окно GPSCockpit*. Внутри него есть дочерние окна.
В окне "GPS Information" есть кнопка с текстом "Sync PC time".
Нужно её нажать.

Code: Select all
Time: 0 */3  * * * *
Action:
WIN-EXIST: "GPSCockpit*"
IF
   MSG: "GPSCockpit* существует."
   WIN-ACTIVATE: "GPSCockpit*"
   MSG: "GPSCockpit* активирован."
   WIN-EXIST: "GPS Information"
   IF
      MSG: "GPS Information существует."
      WIN-CLICK: "Sync PC time" "OK"
   ELSE
      MSG: "GPS Information НЕ существует."
   THEN
   
ELSE
   MSG: "GPSCockpit* не найден."
THEN


Результат трассировки:

"GPS Information НЕ существует."
Burunduk
 
Posts: 73
Joined: Thu, 03 Oct 2013, 06:57

Re: Поиск дочернего окна

Postby VoidVolker » Wed, 09 Oct 2013, 14:04

WIN-EXIST ищет окно среди окон верхнего уровня.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Поиск дочернего окна

Postby Burunduk » Thu, 10 Oct 2013, 07:25

Спасибо! В хелпе это не указано.

Значит после WIN-EXIST нужно использовать конструкцию

Code: Select all
FOR-CHILD-WINDOWS: "win_pattern" <...> ;FOR-CHILD-WINDOWS


Возникает вопрос, какими словами считать иннформацию об очередном дочернем окне?

В хелпе молчок.

В одном из обсуждений на форуме нашёл, например,

Code: Select all
GET-WCLASS


Но он в тексте примера, без описания.

Получается, что каждое слово, которого нет в справочнике, нужно мучительно разыскивать по всему интернету?

Быстро просмотрел хелп, на основе книги Броудли. Но там про окна вроде нет ничего. Да и не удивительно. Печатный оригинал, я листал
еще в 80-годах прошлого века. Тогда о виндоус речи и не было.

Еще вопрос, как проверить, что слово, которое я создал уже есть в словаре?
Пробовал создавать сам слова с одинаковым именем в консоли. Получаю сообщение, что уже есть такое слово.
И как откатить повторное определение? Или уже невозможно восстановить первоначальное слово?
Burunduk
 
Posts: 73
Joined: Thu, 03 Oct 2013, 06:57

Re: Поиск дочернего окна

Postby VoidVolker » Thu, 10 Oct 2013, 09:46

Burunduk wrote:Значит после WIN-EXIST нужно использовать конструкцию
Code: Select all
FOR-CHILD-WINDOWS: "win_pattern" <...> ;FOR-CHILD-WINDOWS

Возникает вопрос, какими словами считать иннформацию об очередном дочернем окне?

А какая информация нужна? В цикле по дочерним окнам хэндл окна получается автоматически, а по нему уже можно получить все, что необходимо.
В плагине extwords.spf есть несколько дополнительных слов для работы с окнами.
Burunduk wrote:В одном из обсуждений на форуме нашёл, например, GET-WCLASS Но он в тексте примера, без описания.

См выше.
Burunduk wrote:Еще вопрос, как проверить, что слово, которое я создал уже есть в словаре?

Либо его определением и проверкой сообщений в консоли либо набрать в консоли WORDS и сохранив результат искать в нем.
Burunduk wrote:И как откатить повторное определение? Или уже невозможно восстановить первоначальное слово?

Есть FORGET - но в кронтабе его нет смысла использовать, т.к. оно сотрет и задачи. Да и какой смысл? Перекомпиляция кротабов и всех плагинов очень быстрая - доли секунды. Разве что в консоли.
Если же хочется сделать контекстно-зависимые слова, что это можно сделать с помощью словарей. Создаем новый словарь и в него добавляем новые слова, затем при необходимости просто переключаем поиск на данный словарь.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Поиск дочернего окна

Postby Burunduk » Thu, 10 Oct 2013, 11:07

VoidVolker wrote:А какая информация нужна? В цикле по дочерним окнам хэндл окна получается автоматически, а по нему уже можно получить все, что необходимо.В плагине extwords.spf есть несколько дополнительных слов для работы с окнами.


Мне нужно в цикле определить нужное дочернее окно и щёлкнуть на нем по кнопке с надписью "Sync PC Time".

Вероятно циклы будут вложенные. Усли смотреть дерево окон в WinSpy++, то от главного окна происходят 5 окон класса AfxControlBar42s и одно класса MDIClient. (эти окна без заголовков)

От одного AfxControlBar42s происходит окно класса ToolbarWindow32 на котором похоже нарисованны "безоконные" кнопки. При нажатии на кнопки, в MDIClient появляются различные окна уже с заголовками.
Одно из них мне и нужно. Но это окно тоже составное. В нем сидит окно диалога. На нем пара окон класса Button(с именами) и штук 15 окон Static(без имен, общий класс Static, но разные instance и ClassNN).

Вот на одну кнопку надо и нажать. Это в минимальном варианте.

В расширенном варианте еще нужно считать из одного статика строку с GPS-временем и сравнить с системным. Нажимать на сихронизацию, если расхождения не более 5 мин.
Еще бы научиться нажимать на кнопки тулбара.

Или можно дочерние окна активировать и кликать(читать техт) без прохода по циклам?
Burunduk
 
Posts: 73
Joined: Thu, 03 Oct 2013, 06:57

Re: Поиск дочернего окна

Postby Burunduk » Thu, 10 Oct 2013, 11:16

VoidVolker wrote:Либо его определением и проверкой сообщений в консоли либо набрать в консоли WORDS и сохранив результат искать в нем.


Что происходит при переопределении существующего слова? Я боюсь угробить что-то важное в форт-системе или получить неожиданный побочный эффект. (Как было с задачей по имени REBOOT)

По поводу консоли тоже вопрос - куда и как сохранить список слов, полученных из WORDS?
Burunduk
 
Posts: 73
Joined: Thu, 03 Oct 2013, 06:57

Re: Поиск дочернего окна

Postby VoidVolker » Thu, 10 Oct 2013, 11:34

Burunduk wrote:Что происходит при переопределении существующего слова? Я боюсь угробить что-то важное в форт-системе или получить неожиданный побочный эффект. (Как было с задачей по имени REBOOT)

Для ннкрона не происходит ровным счетом ничего страшного, просто следующий вызов этого слова будет использовать новое определение. Все слова хранятся в словаре и соответственно при компиляции слово ищется в словаре и используется последнее созданное слово с этим именем, при этом предыдущие определения не затрагиваются.
Burunduk wrote:По поводу консоли тоже вопрос - куда и как сохранить список слов, полученных из WORDS?

Да куда угодно - хоть в файл, хоть в таблицу, хоть в БД.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Поиск дочернего окна

Postby Burunduk » Thu, 10 Oct 2013, 17:36

VoidVolker wrote:
Burunduk wrote:Что происходит при переопределении существующего слова? Я боюсь угробить что-то важное в форт-системе или получить неожиданный побочный эффект. (Как было с задачей по имени REBOOT)

Для ннкрона не происходит ровным счетом ничего страшного, просто следующий вызов этого слова будет использовать новое определение. Все слова хранятся в словаре и соответственно при компиляции слово ищется в словаре и используется последнее созданное слово с этим именем, при этом предыдущие определения не затрагиваются.

Т.е. систему я не испорчу, только жизнь себе осложню. Ибо переопределять существующие слова нехорошо, а вдруг понадобятся дальше. Совпадение же имён задач с существующими словами чревато неприятностями.

VoidVolker wrote:
Burunduk wrote:По поводу консоли тоже вопрос - куда и как сохранить список слов, полученных из WORDS?

Да куда угодно - хоть в файл, хоть в таблицу, хоть в БД.


Вот в консоли программы FAR я могу перенаправить вывод в текстовый файл dir *.* > out.txt
Но в форт-консоли > это оператор сравнения вершины и подвершины стека. Или есть специальные слова для сохранения вывода консоли в хоть в файл, хоть в таблицу, хоть в БД?

Но даже если я найду слово списке, то там нет информации что оно делает.
Вот поэтому я и хочу понять где найти описания существуюших слов,
Code: Select all
что бы понимать учебные примеры и лишний раз не изобретать велосипеды и не беспокоить форумчан по пустякам
. Как форт-программисты то работают? Помнят входные и выходные стеки тысяч слов наизусть?

В 80 годы я года 3 писал программы на фортоподобной системе для PDP-11 - ДССП разработки МГУ. Но там был немного другой синтаксис и это было очень давно. Слов и возможностей в современном Форте я думаю гораздо больше чем 20 лет назад.
Burunduk
 
Posts: 73
Joined: Thu, 03 Oct 2013, 06:57

Re: Поиск дочернего окна

Postby Morituruz » Thu, 10 Oct 2013, 18:54

Burunduk wrote:Вот поэтому я и хочу понять где найти описания существуюших слов

Ну чисто теоретически, на каждое слово описаний не понапишешь, жизнь слишком коротка.
Зато можно скачать исходники nncron:
http://www.nncron.ru/download/nnsrc.zip
а так же исходники библиотек товарища Немцова:
http://www.nncron.ru/download/nnlib.zip
User avatar
Morituruz
 
Posts: 727
Joined: Sun, 14 Oct 2007, 01:51

Re: Поиск дочернего окна

Postby VoidVolker » Thu, 10 Oct 2013, 20:05

Burunduk wrote:Вот в консоли программы FAR я могу перенаправить вывод в текстовый файл dir *.* > out.txtНо в форт-консоли > это оператор сравнения вершины и подвершины стека. Или есть специальные слова для сохранения вывода консоли в хоть в файл, хоть в таблицу, хоть в БД?

Эмм... А что мешает просто выделить мышкой или через контекстное меню? Консоль ннкрона - это стандартное консольное окно, обладающее всеми свойствами стандартных консольных окон.

Burunduk wrote:Но даже если я найду слово списке, то там нет информации что оно делает.
Вот поэтому я и хочу понять где найти описания существуюших слов.

Сначала смотреть в мануале - там все основные слова ннкрона описаны. Остальные слова ннкрона, которые простым пользователям никогда не понадобятся, есть в исходниках ннкрона и библиотек Николая, даже с комментариями местами. Все остальные слова есть в мануале и исходниках СПФ. Эти несколько источников покрывают почти все слова. Остальное - легко дизассемблируется.
Burunduk wrote:Как форт-программисты то работают? Помнят входные и выходные стеки тысяч слов наизусть?

Да. А вообще, лично я пишу комментарий к каждому слову, и если что-то подзабыл - всегда можно подглядеть что да как. А зачастую проще дизассемблировать слово и примерно понять что оно там делает :rolleyes:
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Поиск дочернего окна

Postby Aveiro » Thu, 10 Oct 2013, 21:29

Может поможет, у меня задача проходит по надписям кнопок дочерних окон,вот кусок кода:
Code: Select all
         
WIN-EXIST: "Главное окно"
IF
    FOR-CHILD-WINDOWS: "TTntButton.UnicodeClass"    \ цикл проверки надписей кнопок
          S" %WIN-CHILD-HWND GET-WTEXT%" EVAL-SUBST S" /Готово/" RE-MATCH   \ ищется кнопка с надписью "Готово"
           IF   
                   Действие                                                
            THEN
     ;FOR-CHILD-WINDOWS
THEN
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Re: Поиск дочернего окна

Postby VoidVolker » Thu, 10 Oct 2013, 21:34

Ох, опять...
Code: Select all
S" %WIN-CHILD-HWND GET-WTEXT%" EVAL-SUBST

Вот так надо:
Code: Select all
WIN-CHILD-HWND GET-WTEXT

Что же всем так нравится делать пустую работу EVAL-SUBST-ом...
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Поиск дочернего окна

Postby Burunduk » Thu, 10 Oct 2013, 22:12

Aveiro wrote:Может поможет, у меня задача проходит по надписям кнопок дочерних окон,вот кусок кода:
Code: Select all
         
WIN-EXIST: "Главное окно"
IF
    FOR-CHILD-WINDOWS: "TTntButton.UnicodeClass"    \ цикл проверки надписей кнопок
          S" %WIN-CHILD-HWND GET-WTEXT%" EVAL-SUBST S" /Готово/" RE-MATCH   \ ищется кнопка с надписью "Готово"
           IF   
                   Действие                                                
            THEN
     ;FOR-CHILD-WINDOWS
THEN


Спасибо! Теперь я знаю как использовать переменные и как сравнивать строки. :D


1. Этот цикл переберёт все дочерние окна(дочерние окна дочерних и глубже) или только дочерние окна сразу после главных?
2. Как искать по классу окна? Есть окна без заголовка.
3. Есть несколько окон одного класса, но с разными Instanse и ClassNN. Как их изловить?
Burunduk
 
Posts: 73
Joined: Thu, 03 Oct 2013, 06:57

Re: Поиск дочернего окна

Postby VoidVolker » Thu, 10 Oct 2013, 23:15

Burunduk wrote:Спасибо! Теперь я знаю как использовать переменные и как сравнивать строки.

Увы, это не так - см. мануал. Тем более тут есть лишний бесполезный код(см. выше). Сравнения строк тут тоже нет - используется регулярное выражение.
Burunduk wrote:Как искать по классу окна? Есть окна без заголовка.

Code: Select all
WIN-EXIST: "Главное окно"
IF
    FOR-CHILD-WINDOWS: "*"
        WIN-CHILD-HWND GET-WCLASS S" FullWindowClass" COMPARE IFNOT
            \ Действие                                                 
        THEN
    ;FOR-CHILD-WINDOWS
THEN

Burunduk wrote:3. Есть несколько окон одного класса, но с разными Instanse и ClassNN. Как их изловить?

В смысле? Цикл чуть выше найдет все дочерние окна, а имея хэндл окна с ним можно сделать что угодно.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Поиск дочернего окна

Postby Aveiro » Thu, 10 Oct 2013, 23:28

С окнами, по опыту нужно будет проделать множество опытов по поиску, странно некоторые отлавливаются некоторые нет, иногда даже приходилось отловить окно по хэндлу и переименовывать его ,присваивая ОТЛИЧНОЕ от других окон имя..... В общем множество опытов. :) НО все задачи, что я ставил с окнами со временем были решены.
В помощь отличная программа: Window Scanner http://kickme.to/inqsoft
Void Volker-у спасибо, это он давал когда-то на нее ссылку ! Image
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Next

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 2 guests

cron