Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Прикрепление файла в дискорде. Поле для ввода адреса файла имеет случайный хэндл каждый раз
Automaton
сообщение 2.1.2020, 12:29
Сообщение #1


**

Neophyte
Сообщений: 47
Регистрация: 18.12.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.472
Возраст: 27



Пытаюсь прикреплять файл в дискорде, во время этого действия открывается окно с названием "Открытие", в котором можно выбрать файл или путь к файлу. Дальше я бы вставил в поле для ввода готовый путь к нужному файлу, но как оказалось, поле для ввода имеет свой хэндл и не имеет названия, по которому можно было бы этот хэндл вычислить. Возможно ли как то еще найти через пилот, хэндл поля для ввода в окошке, хэндл которого известен?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 2.1.2020, 12:43
Сообщение #2


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



См. WindowFromPoint функцию
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 2.1.2020, 12:58
Сообщение #3


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Возможно ли как то еще найти через пилот, хэндл поля для ввода

По классу окна через плагин:
https://forum.uokit.com/index.php?showtopic=28991
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Automaton
сообщение 2.1.2020, 13:11
Сообщение #4


**

Neophyte
Сообщений: 47
Регистрация: 18.12.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.472
Возраст: 27



Cockney, эта функция не нашла хендл элемента окна.

cirus, как установить этот плагин? Попробовал dll поместить в папку пилота, получаю сообщение "Символ не распознан pos:1 WindowStatus.minimized"
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 2.1.2020, 13:13
Сообщение #5


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



С флагом abs и привязкой к окну Открытие ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 2.1.2020, 13:18
Сообщение #6


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
как установить этот плагин?

В папке с пилотом создать папку Plugins, в неё закинуть длл.
Код
set %a WindowStatus.find (1111 ** Notepad)   // найти окно блокнота по классу окна
log хендл окна:    %a [1 1]
end_script
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Automaton
сообщение 2.1.2020, 13:23
Сообщение #7


**

Neophyte
Сообщений: 47
Регистрация: 18.12.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.472
Возраст: 27



Cockney, В этой функции же нет привязки к окну? Из документации: "Привязка к окну: Нет"
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Automaton
сообщение 2.1.2020, 13:37
Сообщение #8


**

Neophyte
Сообщений: 47
Регистрация: 18.12.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.472
Возраст: 27



Цитата(cirus @ 2.1.2020, 13:18) *

В папке с пилотом создать папку Plugins, в неё закинуть длл.


Сделал, но не уверен что стало работать.


Код
set %a WindowStatus.find (1111 ** Notepad)   // найти окно блокнота по классу окна
msg    %a [1 1]
end_script


Просто выводится надпись "WindowStatus.find (1111 ** Notepad)"
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 2.1.2020, 13:42
Сообщение #9


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Просто выводится надпись "WindowStatus.find (1111 ** Notepad)"

Значит нет длл в папке Plugins.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Automaton
сообщение 2.1.2020, 13:47
Сообщение #10


**

Neophyte
Сообщений: 47
Регистрация: 18.12.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.472
Возраст: 27



На самом деле есть, я создал папку Plugins в папке пилота и закинул в нее WindowStatus.dll из той темы, ссылку на которую вы оставили выше.
На всякий случай я еще попытался параллельно закинуть WindowStatus.dll в папку luaPlugins, но и это не помогло.

Перезапустил пилот, похоже теперь плагин подключился.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Automaton
сообщение 2.1.2020, 13:58
Сообщение #11


**

Neophyte
Сообщений: 47
Регистрация: 18.12.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.472
Возраст: 27



cirus, по классу окна у меня нашлось множество окон, в т.ч. нужное мне. Подскажите пожалуйста, как определить из всех нужное? У меня должно быть распространенное имя класса окна "Edit". Текст (имя) окна отсутствует.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 2.1.2020, 14:04
Сообщение #12


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
как определить из всех нужное?

Сравнить другие параметры. windowSize или parentAndChild.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Automaton
сообщение 2.1.2020, 14:27
Сообщение #13


**

Neophyte
Сообщений: 47
Регистрация: 18.12.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.472
Возраст: 27



Решил сравнивать по параметру ширины и циклом while проверить массив со всеми найденными окнами. Подскажите пожалуйста, как в цикле while сделать так, что бы он выполнялся, покуда в массиве находится какое либо значение?

Код
set %a WindowStatus.find (1111 ** Edit)

set #s 1

while %a [1 #s] // цикл выполняется, пока находятся ячейки массива с числовым значением, т.е. пока столбец массива не закончился
    if %a [1 #s] = 123 // ширина окна, соответствующая той которую я ищу
        break
    end_if
    set #s #s + 1
end_while


В данном случае, while %a [1 #s] приводит к ошибке, как это дополнить?

.......

Сработало сравнение на предмет больше нуля
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 2.1.2020, 14:51
Сообщение #14


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Код
set %a WindowStatus.find (1111 ** Edit)

set #s 1
while %a [1 #s] > 0
    set %b WindowStatus.windowSize (%a [1 #s])
    if  %b [1 2] = 123
        break
    end_if
    set #s #s + 1
end_while
log   #s     %a[1 #s]
end_script
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Automaton
сообщение 2.1.2020, 15:28
Сообщение #15


**

Neophyte
Сообщений: 47
Регистрация: 18.12.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.472
Возраст: 27



Спасибо. Если вдруг кому то понадобится, вот полный вариант прикрепления файла в дискорде (с использованием плагина WindowStatus.dll):

Код
set #dhandle FindWindow ("основной") // находим и заносим хэндл дискорда в переменную dhandle по названию канала

set workwindow #dhandle // привязываем к пилоту окно дискорда
left 353 932 #dhandle // кликаем по координатам плюсика возле поля для ввода сообщений

set %a WindowStatus.find (1111 ** Edit)   // в открывшемся окне выбора файла, ищем поле для ввода по классу окна
set #s 1
while %a [1 #s] > 0
    //msg %a [1 #s]
    set %b WindowStatus.windowSize (%a [1 #s]) // ширина окна поля ввода
    if %b [1 2] = 183 // ширина окна, соответствующая искомой
         break
    end_if
    set #s #s + 1
end_while

set workwindow %a [1 #s] // привязываем пилот к полю для ввода
wait 2s
send C:\UO Pilot\image.bmp // отправляем локальный адрес картинки
wait 2s
send {Enter}
wait 2s
left 840 590 #dhandle //кликаем по кнопке отправить файл

end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 2:36
Designed by Nickostyle