1 (изменено: F1-12, 2012-08-09 10:54:51)

Тема: AHK: Как правильно проверить окно?

1. Можно писать:

IfWinActive, EditPlus - { 
   MsgBox Запущен текстовый редактор EditPlus 
}

или

If ( WinActive("EditPlus -") ) 
{
      MsgBox Запущен текстовый редактор EditPlus 
}

[ Кстати, ну почему нельзя писать в одну строку как в JavaScript - ужасно раздражает! ]


И даже использую трюк:

if ( isEditPlus() ){ 
          MsgBox Запущен текстовый редактор EditPlus 
 }


isEditPlus(){ 
                  Return WinActive("EditPlus -") ; EditPlus
          }

Я знаю, что это неправильно (так как не для этого предназначено), но ведь работает!!!!
[ Кстати,  вместо false высылает 0x0... ]

2.
Не получается правильно задать RegExp'ы для начала и конца, то есть для заголовков: EditPlus - ****** и ********* - Word соответственно.
Применяю сейчас SetTitleMatchMode, но результат почему-то нестабильный (хотя может просто сбоит в другом месте):

SetTitleMatchMode, 1
IfWinActive, EditPlus -

SetTitleMatchMode,  RegEx
IfWinActive,  * - Word

Я понимаю, что для Word'а можно писать проще:

if WinActive("ahk_class OpusApp")

Но хочу принципиально разобраться, как же правильно!


3.
Также в справке написано: "Какие фрагменты текста в окне требуют режима Slow (и есть ли такие), покажет Window Spy." Вы когда-нибудь с этим сталкивались? Как именно Window Spy должен об этом сообщит?

4.
И что интересно, оказалось, что ahk_class у KMPlayer'а (не буду не кому навязывать, но мне он очень нравится и полностью покрывает мои нужды) имеет тот же заголовок, что и у Winamp (ahk_class Winamp v1.x)! В результате, если они оба запущены возникают коллизии. Сейчас я пользуюсь скриптом из коллекции для Winamp. Нужно как-то переписать этот скрипт, но сам пока не могу, потому что постоянно путаюсь в ньюансах синтакса при обращении к окнам. Просто достало уже! Столько вариантов!! Кто-нибудь может вразумительно объяснить разницу?

2 (изменено: creature.ws, 2012-08-09 13:56:12)

Re: AHK: Как правильно проверить окно?

Как правильно проверить существует ли окно?

WinExist()

WinExist([WinTitle, WinText, ExcludeTitle, ExcludeText]): Returns the Unique ID (HWND) of the first matching window (0 if none) as a hexademinal integer. Since all non-zero numbers are seen as "true", the statement if WinExist("WinTitle") is true whenever WinTitle exists. The parameter WinTitle supports ahk_id, ahk_class, and other special strings. See IfWinExist for details about these and other aspects of window searching.

3 (изменено: F1-12, 2012-08-09 14:35:45)

Re: AHK: Как правильно проверить окно?

Спасибо, creature.ws
     Но справку я уже смотрел на обоих языках. К тому же проблема английской справки (обычно она на порядок полнее русской) - это всё же другой язык: а читая мануал мне, например, не всегда удается дойти до сути даже на родном русском )) Если кто-то сможет объяснить или продемонстрирует, как исходя из советов справки (в данном случае она вообще до безобразия лаконична), я должен переписать вышеприведенные примеры - буду признателен.

4 (изменено: Александр_, 2012-08-09 17:28:53)

Re: AHK: Как правильно проверить окно?

1) не вижу вопроса.
2)

SetTitleMatchMode,  RegEx
IfWinActive,  - Word$

см. документацию о регулярных выражениях.
3) не знаю.
4) проверяй имя исполняемого файла.

5

Re: AHK: Как правильно проверить окно?

F1-12 пишет:

3.
Также в справке написано: "Какие фрагменты текста в окне требуют режима Slow (и есть ли такие), покажет Window Spy." Вы когда-нибудь с этим сталкивались? Как именно Window Spy должен об этом сообщит?

В разделе TitleMatchMode=slow Visible Text

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder