Недавние сообщения

Страницы: 1 [2] 3 4 ... 10
11
Общие вопросы по AutoIt / Re: Функция для поиска кнопок
« Последний ответ от joiner Отправлен Вчера в 14:02:45 »
the_gt99  [?]
Цитировать
Неужели было так сложно прочитать полностью и понять вопрос, а не давать глупый, пришедшей первым на ум, ответ?
OffTopicнеужели так сложно прочитать справку,чтобы не задавать глупых вопросов?
12
Общие вопросы по AutoIt / Re: Функция для поиска кнопок
« Последний ответ от gunter123 Отправлен Вчера в 13:59:52 »
В чем проблема? Теперь оно будет искать указанный цвет и близкие к нему оттенки.
Цитировать
Проблема оказалась в том, что на разных ПК в одной и той же игре, с одинаковыми настройками графики, в одном и том же месте - немного разные оттенки.
13
Общие вопросы по AutoIt / Re: Функция для поиска кнопок
« Последний ответ от the_gt99 Отправлен Вчера в 13:56:55 »
Цитировать
shade-variation - Число от 0 до 255, показывающее, на сколько может отличаться красная, зелёная и синяя компоненты цвета. По умолчанию 0 (точное совпадение).
https://autoit-script.ru/autoit3_docs/functions/PixelSearch.htm
Код: AutoIt [Выделить]
$pixel = PixelSearch(0, $y, 1023, 767, $color, 100, Default, "Game_name") ; Заменить строку


Неужели было так сложно прочитать полностью и понять вопрос, а не давать глупый, пришедшей первым на ум, ответ?
14
День добрый профессионалы и любители.
Столкнулся с интересной необходимостью, излагаю суть.

Необходимо чтобы запускаемый процесс (если быть точным - запускаю его от SYSTEM) получил окружение от другого пользователя (если быть точным - то окружение не от SYSTEM, а от работающей учетки условно обзовем ADMIN), а именно:
 - блок переменных окружения (сделал)
 - загруженный куст HKCU от ADMIN (не получилось, это и есть вопрос).

Процесс порождаю этим способом:
Код: AutoIt [Выделить]
DllCall(DllOpen("advapi32.dll"), "bool", "CreateProcessWithTokenW", "handle", сдублированый_токен_от_system_процесса, "dword", 0, "ptr", 0, "wstr", "команда_запуска_с_параметрами", "dword", $dwCreationFlags, "ptr", указатель_на_блок_lpEnvironment, "wstr", "рабочая_папка", "ptr", DllStructGetPtr($SI), "ptr", DllStructGetPtr($PI))

все замечательно, порождается, работает. И даже подставленый блок lpEnvironment взятый от процесса который работает от учетки ADMIN - действительно подставил набор переменных окружения от ADMIN
как видно из параметров запуска процесса (dwLogonFlags: "dword", 0)  - я не использую процесс загрузки профиля (нам ведь не нужно грузить профиль SYSTEM).
на MSDN( CreateProcessWithTokenW ) сказано, что профиль можно грузить единичкой в параметре dwLogonFlags или самостоятельно, предварительно перед вызовом CreateProcessWithTokenW вызвать функцию LoadUserProfile.
Чтож, ок.
Делаем вызов:
Код: AutoIt [Выделить]
$Ret = DllCall("Userenv.dll", "int", "LoadUserProfileW", "ptr", $token, "ptr", DllStructGetPtr($PROFILEINFO))

п.с. $token - взят процесса, работающего от ADMIN
Вроде все сделано корректно, вот только LoadUserProfileW не срабатывает, и профиль не подгружается.

Может кто натолкнуть на идею, как правильно сделать так, чтобы порождаемый процесс от SYSTEM стал использовать уже загруженый в пользовательском сеансе профиль ADMIN?
15
Можно через _SendMessage
Код: AutoIt [Выделить]
#include <SendMessage.au3>

$sTitle = "Безымянный — Блокнот"            ; Заголовок окна
$sControl = "Edit1"                         ; Имя элемента с текстом, смотрим в Autoit Window Info
$hEdit = ControlGetHandle($sTitle, "", $sControl)   ; Получаем хэндл этого элемента
MsgBox(4096, "", _WM_GETTEXT($hEdit))

Func _WM_GETTEXT($h_Edit)                   ; Возвращает текст указанного элемента
    Local Const $WM_GETTEXT = 13, $WM_GETTEXTLENGTH = 14
    Local $iLength = _SendMessage($h_Edit, $WM_GETTEXTLENGTH, 0, 0)
    Local $aTemp = DllStructCreate("char[" & $iLength + 1 & "]")
    If @error Then Return SetError(1, 0, "Ошибка создания структуры")
    _SendMessageA($h_Edit, $WM_GETTEXT, $iLength + 1, DllStructGetPtr($aTemp))
    If @error Then Return SetError(2, 0, "_SendMessageA error")
    Return DllStructGetData($aTemp, 1)
EndFunc

16
Общие вопросы по AutoIt / Re: Функция для поиска кнопок
« Последний ответ от gunter123 Отправлен Вчера в 09:14:03 »
Цитировать
shade-variation - Число от 0 до 255, показывающее, на сколько может отличаться красная, зелёная и синяя компоненты цвета. По умолчанию 0 (точное совпадение).
https://autoit-script.ru/autoit3_docs/functions/PixelSearch.htm
Код: AutoIt [Выделить]
$pixel = PixelSearch(0, $y, 1023, 767, $color, 100, Default, "Game_name") ; Заменить строку

17
Здравствуйте, имеется проблема с командой Controlsend. Я хочу выделить все в подокне виндового-окна и скопировать. Применяю команду вида  controlsend('', '', '', '^a') , язык английский. Как я понял, проблема в окне, так как все буквы по отдельности сами, как команды, запускают поиск автоматом(сбивая выделение), а кнопка insert вызывает другое окно. Вот и получается нажимая ctrl+a сначала нажимается ctrl , потом нажимается "а", затем в таком же порядке отпускается, тем самым дополнительно вводится "а" и запускается поиск в окне. Как сделать так чтобы запустился первым ctrl, потом "а", затем отпустился "а" и только после ctrl. Пробовал  использовать opt("SendKeyDelay") , opt("SendKeyDownDelay") и controlfocus, с различными значениями и по отдельности, проблема частично устраняется в самом лучшем варианте, но все равно возьмет, да проскочит отдельное "а" или insert.

Возможно, я слона не замечаю.

Думал также, на счет варианта отслеживать нажатие в подокне виндового-окна(но это походу не тривиальная задача, с 2мя exe) Видим, что в элемент было отправлено ctrl - первым exe (с удержанием нажатия к примеру в 400 мс), в этот момент , отправляем нажатие "а"  с минимальными задержками на отжатие и посылаем отжатие ctrl ({CTRLUP} - если получится) или просто берем запас повремени больше чем 400 мс.
Или опять же использовать 2 exe,  в первом запускаем второй exe(в котором с задержкой по времени стартует нажатие кнопки "а", взять к примеру 500мс ), далее в первом же нажимаем  сразу же отправить в элемент ctrl с удержанием до 1 сек.

команда вида controlsend('', '', '', '{CTRLDOWN}a{Ctrlup}') не помогает

не прошло и 30 минут

догадался попробовать так controlsend('', '', '', '{CTRLDOWN}a{a up}{Ctrlup}')
посмотрим, как дальше будет вести себя, пока вроде работает
18
Общие вопросы по AutoIt / Функция для поиска кнопок
« Последний ответ от the_gt99 Отправлен Вчера в 02:11:03 »
Всем привет, недавно появилась задача сделать функцию для поиска любого объекта(в моем случае кнопки) на экране.
P.S. да, я не совсем тупой, искать приходилось именно по пикселям!

Логика следующая.
В функцию подается 4 параметра (colour_before,x,y,colour_after).
Цвет который ищем, как только его находим, берем координаты этого пикселя, смещаемся на заданные x,y и смотрим цвет уже в в новом месте, если цвет который мы взяли совпадает с colour_after, значит наша кнопка найдена , иначе уменьшаем границы  pixel_search.

Вот реализация этой функции:
Код: AutoIt [Выделить]
Func serchButton($color,$pix2x,$pix2y,$pix2color)
$y = 0
    while 1
            $pixel = PixelSearch(0,$y,1023,767,$color ,"","","Game_name")
            If Not @error Then
                    $var = PixelGetColor($pixel[0]+$pix2x, $pixel[1]+$pix2y, "Game_name")
                    $var =  Hex($var, 6)
                    if $var == $pix2color Then
                        $return = '1|'&$pixel[0]+$pix2x&'|'&$pixel[1]+$pix2y
                         ExitLoop
                    else
                        $y = $pixel[1]+1
                    endif
            else
                $return = '-1|0|0'
                 ExitLoop
            Endif
    WEnd
return $return
EndFunc


Проблема оказалась в том, что на разных ПК в одной и той же игре, с одинаковыми настройками графики, в одном и том же месте - немного разные оттенки.

Вопрос:

Как мне реализовать поиск кнопки в нужном мне окне по средствам пикселей. К примеру как это сделано в среде "кибор", там есть функция , которая ищем на экране переданную ей фото и можно указать разброс пикселей.
Либо любые другие варианты, что угодно. Подскажите, пожалуйста.
20
Дни рождения / С днём рождения triceraptors!
« Последний ответ от Представитель Сообщества Отправлен Вчера в 01:02:57 »
От имени всего Русского сообщества AutoIt поздравляем Вас triceraptors с днём рождения!



Цитировать
Пусть все мечты исполнятся,
Пусть все желанья сбудутся,
Пусть радости запомнятся,
А горести забудутся.

Здоровье будет крепкое,
В делах всегда согласие,
Любовь навеки верная —
Без ссор и разногласия.

Зарплата только вовремя,
Стабильная, высокая.
Работа будет лёгкая
И не совсем далёкая.

Пусть жизнь Вам дарит самые
Прекрасные мгновения.
Желаем только радости
И счастья, с днем рождения!
Страницы: 1 [2] 3 4 ... 10