Author Topic: Массив окон по заголовку  (Read 1752 times)

0 Members and 1 Guest are viewing this topic.

gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Массив окон по заголовку
« on: September 21, 2019, 11:23:37 PM »
У меня достаточно близкий вопрос, не буду плодить тем.
Открыто несколько окон Блюстака, через его мультиоконный режим. Мне нужно получить массив из их hwnd , чтобы потом переключаться между ними.
Если запрашиваю через WNDFIND

Code: (clickermann) [Select]
$hwnd_tmp = WNDFIND("BlueStacks", 0)
IF($hwnd_tmp > 0)
   print("нашли окно = ", $hwnd_tmp)
   print(hgettext($hwnd_tmp) )
ELSE
   HINTPOPUP("Окно не найдено", "Ошибка")
   HALT
END_IF
halt

то получаю значение только для одного окна. А как найти все окна, содержащие в начале своего названия "BlueStacks"? При этом заранее ввести массив потенциальных названий окон и делать по ним перебор не вполне удобно, т.к. не все они могут быть открыты, или где-то может смениться название, которое идет после "BlueStacks"...

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Массив окон по заголовку
« Reply #1 on: September 22, 2019, 07:51:09 AM »
Тебе нужно скачать Clickermann 4.14.003b
http://crapware.aidf.org/forum/index.php?topic=356.msg33512#msg33512
Новая функция WNDFINDARR возвращает массив окон по заголовку.

Code: (clickermann) [Select]
WNDFINDARR($arr_hwnd, "BlueStacks")
IF(ARRSIZE($arr_hwnd) > 0)
   FOR($i=0,$i<ARRSIZE($arr_hwnd))
      LOGWRITE ("Нашли окно = ", $arr_hwnd[$i])
      LOGWRITE ("Заголовок = ", HGETTEXT($arr_hwnd[$i]))
   END_CYC
ELSE
   HINTPOPUP("Окно не найдено", "Ошибка")
   HALT
END_IF

HALT

4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: Массив окон по заголовку
« Reply #2 on: September 22, 2019, 09:50:20 AM »
Еще варианты из прошлого http://crapware.aidf.org/forum/index.php?topic=3168.0,
тоже может пригодиться.

gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: Массив окон по заголовку
« Reply #3 on: September 22, 2019, 01:39:30 PM »
Еще варианты из прошлого http://crapware.aidf.org/forum/index.php?topic=3168.0,
тоже может пригодиться.
Спасибо за идею, на ее основе все вроде заработало. Скрипт вот такой:
Code: (clickermann) [Select]
   UNDEFINE($windows_hwnd_of_Game)
   $hwnd_tmp=0
   $okno_number_tmp=0
   if($emulator_vybor>0)   // выбор эмулятора, если =1 то для BlueStacks, если =0 то для Nox
      $hwnd_tmp = wndfind("BlueStacks") // получаем HWND окна Блюстака
     if ($hwnd_tmp > 0)
         print("нашли хотя бы одно окно BlueStacks, начинаем цикл обработки окон")
         WHILE($hwnd_tmp > 0) //  работает пока находим новые окна BlueStacks
           $hwnd_tmp=0
           $hwnd_tmp = wndfind("BlueStacks") // получаем HWND окна Блюстака
           IF($hwnd_tmp > 0)
            print("нашли окно №= ", $hwnd_tmp)
            print("...с названием=", hgettext($hwnd_tmp) )
            ARRPUSH($windows_hwnd_of_Game, $hwnd_tmp)  // добавили HWND окна в массив окон с игрой
            HSETTEXT($hwnd_tmp, STRCONCAT("oknoGame_",$okno_number_tmp)) // переименовываем окна в "oknoGame_" с нарастающим номером
            $okno_number_tmp=$okno_number_tmp+1
           ELSE
            HINTPOPUP("Окно не найдено", "Завершаем цикл окон")
            print("Окно не найдено, завершаем цикл окон")
           END_IF
         end_cyc
      else
         print("Ни одного окна BlueStacks не нашли")
      end_if
   else
         print("идентично можно сделать для Nox") 
   end_if


Тебе нужно скачать Clickermann 4.14.003b
...
Спасибо, но вроде задачу получилось решить не меняя версию Кликермана )
« Last Edit: September 22, 2019, 01:41:16 PM by gsukhado »