|
|
|
Вопросы по wait и нецелым числам., Впервые столкнулся за столько лет. :) |
|
|
Kangoshi |
11.2.2021, 3:40
|
Neophyte
Сообщений: 36
Регистрация: 9.8.2011 Группа: Пользователи Наличность: 0
Пользователь №: 13.878
|
Переменную с функцией wait нельзя использовать, да? Пытался увеличивать время паузы с каждой новой итерацией, но получил ошибку. Пытался сделать так: wait #delay Как реализовать-то? Пытался увеличивать значение этой переменной умножением на 1,5 (и с точкой, и с запятой) - в одном случае получал ошибку (вроде), в другом умножение происходило на 1. Но эту проблему решил так: set #delay #delay * 15 / 10 По мне, так криво, но хотя бы работает. По-другому никак? (IMG: style_emoticons/default/smile.gif)
|
|
|
|
Kangoshi |
11.2.2021, 15:31
|
Neophyte
Сообщений: 36
Регистрация: 9.8.2011 Группа: Пользователи Наличность: 0
Пользователь №: 13.878
|
Благодарю за ответ, дало пищу для размышлений, накидал отдельный простенький цикл для теста и оказалось, что дробная часть откидывается. И даже wait #x работает. set #x 250 set logging clear repeat 100 set #x #x * 15 / 10 log #x wait #x end_repeat Значит ошибка в чём-то другом. Скорее всего мозг уже тупил в 3 утра. (IMG: style_emoticons/default/laugh.gif)
|
|
|
|
Kangoshi |
11.2.2021, 23:29
|
Neophyte
Сообщений: 36
Регистрация: 9.8.2011 Группа: Пользователи Наличность: 0
Пользователь №: 13.878
|
Начал переписывать всё в lua и столкнулся с проблемой: в lua один универсальный тип переменной: "Lua динамически типизированный язык. Это означает, что значения не имеют типов; только значения. Язык не имеет определений типов. Все значения несут свой собственный тип." Функция findwindow записывает "неправильные" PID хендлы в случае типа переменной "массив". И если в языке пилота можно использовать числовую переменную, то в lua такой возможности нет. Проверял этим: Код set logging clear set #h FindWindow (AsteriosGame.exe) set %h FindWindow (AsteriosGame.exe) log Clients found: log size(%h) log Handle single variable: log #h log Handles array: for #i 1 size(%h) log %h [#i 1] end_for log Switch to game in 2 seconds. wait 2s set #aw getwindow (0) log Handle active window: log #aw end_script В Lua на одном окне: Код --lua log ("clear") local h = findwindow ("AsteriosGame.exe") log (#h) log ("Handle lua:") log (h[1][1]) log ("Switch to game in 2 seconds.") wait ("2s") local a = getwindow (0) log ("Handle lua active window:") log (a) getwindow в lua работает нормально, потому что результат - одиночное значение и переменная не считается массивом. Однако даже если findwindow найдёт всего одно окно, то тип переменной будет считаться "Lua Table". Вот такая беда... Отдельную тему не стал создавать, т.к. из первоначальной проблемы вылезла эта. PS Значения PID handle в массиве четырёхзначные, в одиночной переменной шестизначные. Например: 3748 и 721550.
|
|
|
|
Fors1k |
12.2.2021, 0:48
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2382
Пользователь №: 18.746
|
Что-то так и не понял в чем проблема, поясните. Запустил у себя, вот выводы: Цитата 1 PID: 2687278 Switch to gam in 2 seconds. PID active window: 921896 Цитата Clients found: 1 PID single variable: 2687278 PIDs array: 2687278 Switch to game in 2 seconds. PID active window: 921896 Данные одинаковые. Сообщение отредактировал Fors1k - 12.2.2021, 0:48
--------------------
Для связи
|
|
|
|
Kangoshi |
12.2.2021, 0:56
|
Neophyte
Сообщений: 36
Регистрация: 9.8.2011 Группа: Пользователи Наличность: 0
Пользователь №: 13.878
|
А у меня разные: Код 0:50:59 2 (autosaved_2.txt, 3): Clients found: 0:51:00 2 (autosaved_2.txt, 4): 1 0:51:00 2 (autosaved_2.txt, 5): PID single variable: 0:51:00 2 (autosaved_2.txt, 6): 721550 0:51:00 2 (autosaved_2.txt, 7): PIDs array: 0:51:00 2 (autosaved_2.txt, 9): 3748 0:51:00 2 (autosaved_2.txt, 11): Switch to game in 2 seconds. 0:51:03 2 (autosaved_2.txt, 14): PID active window: 0:51:03 2 (autosaved_2.txt, 15): 721550 логи скрипта в lua: Код 0:57:01 1 (autosaved_1.txt, 0): 1 0:57:01 1 (autosaved_1.txt, 0): PID: 0:57:01 1 (autosaved_1.txt, 0): 3748 0:57:01 1 (autosaved_1.txt, 0): Switch to gam in 2 seconds. 0:57:03 1 (autosaved_1.txt, 0): PID active window: 0:57:03 1 (autosaved_1.txt, 0): 721550 Клиент игры Asterios, Windows 7 x64, проверял и в обычной, и в Night version. А вы на чём проверяли? Проверил только что на калькуляторах с выключенным клиентом игры - результат тот же, данные в массиве отличаются от данных в переменной числового типа.
|
|
|
|
Kangoshi |
12.2.2021, 1:18
|
Neophyte
Сообщений: 36
Регистрация: 9.8.2011 Группа: Пользователи Наличность: 0
Пользователь №: 13.878
|
Цитата(DarkMaster @ 12.2.2021, 1:14) Мля... Это не PID! Это хендлы! Я почему-то подумал, что в пилотовском варианте оно еще пиды возвращало. Все хендлы прилетают корректно.
Ок... Прошу прощения за то, что попутал термины. Я всё ещё не понимаю почему они у меня разнятся в зависимости от типа переменной? (IMG: style_emoticons/default/smile.gif) Проверял на двух компах, но на обоих Windows 7. Попробую днём на "десятке". Может в "семёрке" не хватает какого-нибудь пакета. PS Отредактировал первое сообщение, оставил зачёркнутые PID для истории.
|
|
|
|
Kangoshi |
12.2.2021, 1:51
|
Neophyte
Сообщений: 36
Регистрация: 9.8.2011 Группа: Пользователи Наличность: 0
Пользователь №: 13.878
|
Цитата(DarkMaster @ 12.2.2021, 1:36) Может у вас просто с аналогичным именем что-то открыто? Например свойства файла. А вообще рекомендую использовать кавычки даже в старом синтаксисе.
Нет, в процессах же видно сколько процессов с таким именем. Да и проверял не только на клиенте игры, а и на калькуляторе. Вот только что проверил на третьем компе с Windows 10 на приложении mspaint.exe - результат тот же. Винда вообще "голая", только после установки, с апдейтами ноября прошлого года. Запишу видео тогда. Только вряд ли сейчас, днём или ближе к вечеру выложу. И ещё надо попробовать "нестабильную" версию, хотя надежды мало. PS Попробовал с кавычками - результат тот же.
|
|
|
|
cirus |
12.2.2021, 3:02
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26708
Пользователь №: 16.971
Возраст: 29
|
Если надо найти хендлы окон, то так: код
Код --lua local ffi = require("ffi") ffi.cdef[[ int FindWindowExA(int hWndParent, int hWndChildAfter, const char* lpszClass, const char* lpszWindow); int GetWindowTextA(int hWnd, char* lpString, int nMaxCount); ]]
function find_window(array, name_window) local WindowName = ffi.new('char[999]') local handle = ffi.C.FindWindowExA(0, 0, nil, nil) while handle > 0 do ffi.C.GetWindowTextA(handle, WindowName, ffi.sizeof(WindowName)) if ffi.string(WindowName):match(name_window) then array[#array+1] = {handle, ffi.string(WindowName)} end handle = ffi.C.FindWindowExA(0, handle, nil, nil) end end
log 'clear' log 'mode compact' local h = {} find_window(h, 'Asterios') -- поиск окна, можно указать часть имени log ('Найдено окон: ' .. tostring(#h)) for i=1, #h do log(h[i][1], h[i][2]) end
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|