Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - m.igel

Pages: [1] 2
1

Ну и в чём проблема создать папку?
Code: (clickermann) [Select]
EXECUTE("cmd.exe", " /C md C:\a\b\c")
- создаст весь недостающий путь к C:\a\b\c, т.е. папки "a", "b", "c".

О! Спасибо!
Теперь никаких проблем!  ;)

2
Через буфер всё нормально вставится.

Может и вставится, пока не проверял, но запись файла по несуществующем пути не идёт.
Т.е. сперва надо создать папку, а лишь потом сохранить туда файл.

3
Просто выразился недостаточно четко. Как нажать Ctrl+S я знаю, вопрос был в том, что делать дальше, как задать папку, куда сохранить, как изменить название сохраняемого файла.
Вот как раз здесь ничего сложного.
Code: (clickermann) [Select]
...

TOCLIP("C:\Documents and Settings\Имя\Рабочий стол\Новости.html")

...



Т.е. вместо имени вбиваем полный путь с именем? От я лопух!

Только меня терзают смутные сомнения, что вместо "C:\" получим "C^\"
Во всяком случае с набором стороки именно так и происходит. Или через буфер иначе?
Не могу пока сам проверить, потому и спрашиваю.

4

Просто вставляем из буфера сформированный полный путь с папками и именем.

Дык, вопрос был не в этом, а в том, как попасть в нужную стороку. Когда я про F4 допёр, стало понятно.

5
Вот как сделать тот же Ctrl+S на странице сайта?

как обычно.
Окно браузера должно быть в фокусе.


Я, конечно, человек темный, но не до такой степени  ;)
Просто выразился недостаточно четко. Как нажать Ctrl+S я знаю, вопрос был в том, что делать дальше, как задать папку, куда сохранить, как изменить название сохраняемого файла.
Впрочем, кое-что я нашел — задать папку можно по F4, а дальше, видимо, табами.

6
И вопрос, а нафига тебе привязка?

Привязка к кнопкам и полям?
А как без них? Не, можно обойтись тыкая по координатам, но это неправильно на мой взгляд. Вот как сделать тот же Ctrl+S на странице сайта? Да, мне это прям сейчас не нужно, но всё же...

С другой стороны в 1С полная Ж с кнопками. Они все называются одинаково, объединены в блоки, в результате тот же маусробот вроде видит кнопку, но тыкает в совершенно другую, т.к. не может различить. Пробовал Automatic Mouse and Keyboard. У него поиск по картинке хорошо сделан, но тоже какая-то ерунда с раскладками. СМ мне кажется более замороченными, зато более гибким. Больше надо писать руками, зато и написать можно больше.
Опять же, поговорить есть с кем ;-)

------------------

Ищите и обрящете!

Ctrl+S
F4
...
Profit!


8
Здесь все за расширение функционала.

но завтра дуб срубят
А если завтра улицу переименуют вместе с городом? (привет декоммунизация в отдельно стоящей стране  :D)

Кликер он как бы... более приземлённый и ближе к человеку. Там где ботов общающихся запросами спалить легче простого, здесь мы действуем приближённо к человеку. Да это дольше. Дольше переключить табами или лень найти по картинке/цвету.

А функционал пусть расширяется, только мало получить хэндл окна и его класс, нужны ещё функции умеющие с ними работать. Тут или получать координаты и размеры не только по hwnd, а и по хэндлу классу или получать по ним сам hwnd? что вроде не всегда можно.
Или слать им сообщение напрямую по этим данным, тоже нужна функция.
А в курсе, что на разных версиях винды одни и те же элементы могут быть разного класса? Оп, нужна функция получающая версию винды и функция получающая битность... Короче, много их.

Если бы у тебя был не академический интерес, а конкретная задача, засимбиозили бы и попробовали получить твои элементы не кликером.


Да, везде есть плюсы и минусы.
Аналогия с легендой, как и любая аналогия, не описывает всё.

Что касается "спалить", то это не мой случай, поэтому я и не рассматриваю такие аспекты. Подозреваю, чтобы всем угодить надо искать окно по классу, определять координаты и кликать по ним мышой. Пробема с версией винды решается "тыканием" в окно, т.е. мышкой выбираем окно и говорим, что с ним делать. Так работает MouseRobot. Тоже не идеальный вариант, но эта его фишка хороша.

С помощью кликера я делаю костыли для работы с 1С и cs-cart. Понимаю, что это неправильно, по-взрослому надо изучать сами эти системы, но некогда. Заказывать обработки и доработки нет смысла, т.к. объемы малы. Перелопачивать вручную можно, но муторно. Тут-то и выручает кликер.

9
в CM два варианта найти окно (в понимании ОС) - по имени (части) или по координатам
так что элемент-кнопку "Со&хранить" найти можно. а вот поле имени файла уже не выходит.

нет поиска окна по имени класса. может попросим Джонни расширить функционал WNDFND?


Причем координаты абсолютные. Vint в соседней теме показал решение, когда берем свойства окна, прибавляем к координатам сколько надо и кликаем куда следует. Можно и табами, но уж как-то это коряво, неспортивно. Объекты есть, информация есть, а мы на пальцах объясняем.

Это как езда по карте и по легенде. Да, легенду сделать проще: направо, налево, возле старого дуба опять налево..." но завтра дуб срубят или не там свернул и всё, даже назад не проедешь по этой легенде. Да, пока это микроскрипт уровня "Hello world!", можно и табами по легенде. Но в целом мне это напоминает гипотетическую ситуацию, когда курьера отправляете не по адресу, а по легенде. По дюжине адресов. В городе миллионнике. Как думаете, он вернется?  ;)

Так что я за расширение функционала.

Quote
элемент-кнопку "Со&хранить" найти можно.


Чота не выходит. "Родительское" окно нашел, а кнопку никак...

11
Quote
Цифра 2 означает что цикл повторится 5 раз
С этой логикой не поспоришь...
С логикой вообще спорить бесполезно!  ;D

Верный код
Code: (clickermann) [Select]
SUB(A_KEYSTRING, $str, $hwnd)
   HSET($hwnd,1)
   KEYSTRING($str)
   HSET($hwnd,0)
END_SUB

//=============================================

EXECUTE("notepad.exe")//Запускаем программу notepad.exe. Команда EXECUTE равносильна окну "Выполнить" в Виндовс (Win+R).
WAITMS(1000)

$hw = wndfind("Блокнот") // получаем HWND окна Блокнота
WNDGETINFO($hw, $px, $py, $sx, $sy)
$hw = HGET($px+100,$py+100)

FOR($i=0, $i < 2) //Начало цикла. Цифра 2 означает что цикл повторится 2 раза
   
   A_KEYSTRING("Hello:-/ world! Проверка: связи*", $hw)
   WAITMS(50)
   KEYPRESS(#ENTER)
   WAITMS(50)
   
END_CYC

HALT


Логичненько.
Верный код это хорошо, спасибо. Но хотелось бы понять откуда вылез этот "дребезг клавиш".

12
Что я сделал не так?

А ЧЯДНТ? Смотри скрин  :D.


Code: (clickermann) [Select]
$hw2 = HGET(100,100)  // определяем hwnd текстового поля блокнота (как ни странно, 100,100 от угла экрана, а не от окна)
А что здесь странного? HGET команда с глобальными координатами, иначе зачем бы она была нужна.

Шаман, аднака!
Поставил вместо Hello... просто 5, так он мне аж 53 штуки напечатал. Но ашей гораздо больше.

А вот с глобальными координатами непонятно.
Из хелпа:
"После этого HWND на главной форме меняться уже не будет, он будет отображать рабочий элемент. Так же изменятся координаты, отображаемые в редакторе сценария, поскольку каждое отдельное "окно"-элемент обладает собственной относительной системой координат, где (0,0) находится в левом верхнем углу элемента. Относительная она потому что если передвигать окно по экрану, его "внутренняя" система координат не изменится.
Сам синтаксис сценариев является единым и для обычного режима, и для оконного. "
Поэтому я и решил, что в оконном режиме координаты оконные. Думал, что привязавшись к окну и развернув его до заданных размеров, можно будет тыкать мышкой куда надо. Но не прокатило. пришлось извращаться.

"После этого HWND на главной форме меняться уже не будет..." — вот это момент вообще не понял. Меняется за милую душу когда мышью елозишь.

13
Ерунда какая-то!

Попробовал пойти по второму варианту, с включением оконного режима. Чуток подшаманил, вроде должно работать, но — индейская изба! Печать идёт в стиле:
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeelllllllllllllllllllllllllllllllllllllllllllllllllllllloooooooooooooooooooooooo
только залипания ещё больше. Что я сделал не так?

Code: (clickermann) [Select]
// 12.01.2017 6

#name "Запись в notepad"//Имя нашего скрипта

EXECUTE("notepad.exe")//Запускаем программу notepad.exe. Команда EXECUTE равносильна окну "Выполнить" в Виндовс (Win+R).

WNDSTATE(WNDFIND("Блокнот"), 1)//Разворачиваем окно в заголовке которого есть строка "Блокнот". 1 - означает развернуть, 0 - свернуть.

WAITMS(1000)//Ждем чтобы блокнот окончательно запустился. 500 мс достаточно

$hw = wndfind("Блокнот") // получаем HWND окна Блокнота
//print   ($hw)

WNDPOS($hw,10,10)  // помещаем Блокнот в угол экрана
 
HSET($hw,1) // включаем в Блокноте оконный режим
$hw2 = HGET(100,100) // определяем hwnd текстового поля блокнота (как ни странно, 100,100 от угла экрана, а не от окна)
 
HSET($hw2,1) // включаем оконный режим в текстовом поле блокнота
KEYSTRING("Hello:- world! Проверка: связи*", 50) // пишем Привет...
HSET($hw2,0) // снимаем оконный режим.

print   ( $hw )
print   ( $hw2 )

//SUB(A_KEYSTRING, $str, 10,$hw)
//   //$hw = HGET($a_cx,$a_cy)
//      //$hw = wndfind("Безымянный") // (мой изврат) получаем HWND окна notepad
//   HSET($hw,1)
//   KEYSTRING($str)
//   HSET($hw,0)
//END_SUB

////--------------------
//$hwnd1 = wndfind("Clickermann -") // получаем HWND окна кликера
//$hwnd2 = wndfind("Блокнот") // получаем HWND окна Блокнота

//SETKBLAYOUT($hwnd1, 1033) // устанавливаем английскую раскладку для окон
//SETKBLAYOUT($hwnd2, 1033)
//print   ($hwnd1)
//print   ($hwnd2)

////или
////    SETKBLAYOUT($hwnd1, 1049) // устанавливаем русскую раскладку для окон
////    SETKBLAYOUT($hwnd2, 1049)
////--------------------

//FOR($i, $i < 2)//Начало цикла. Цифра 2 означает что цикл повторится 5 раз
//   
//   A_KEYSTRING("Hello:-/ world! Проверка: связи*", 20, $hw)//Вводим текст. 20 означает задержку в 20 мс между вводом каждой буквы
//   
//   KEYPRESS(#ENTER)//Нажимаем Enter чтобы перевести строку. #ENTER - код клавиши Enter
//   
//   print   ($hw)
//   
//END_CYC//Заканчиваем цикл

HALT//Останавливаем скрипт

Установка одинаковых раскладок не помогает.

Если вместо KEYSTRING использовать
KEYPRESS(#1)
KEYPRESS(#2)
KEYPRESS(#3)
то всё прекрасно работает!

14
Не умеет.
Но в твоей конкретной задаче можно после ввода имени просто нажать ENTER
Code: (clickermann) [Select]
KEYPRESS(#ENTER)
И обычно почти всё можно решить клавиатурными командами. Окна то известны и они не меняются. Всякие там TAB,  SHIFT+TAB,  ALT, стрелки, энтеры и прочие эскейпы.


Так не интересно  ;)
Я неспроста хотел папку назначения поменять. А так-то да, можно и табами подогнать. Пять табов и все дела  ;D

Может есть ещё более правильные команды?

15
Общие вопросы / Кнопки и адресные строки
« on: January 13, 2017, 12:43:53 PM »
Добрый день.

Помогите, пожалуйста, разобраться в основах.
Верно ли я понимаю, что СМ может находить окна в "человеческом" понимании, т.е. "Блокнот", "Калькулятор" и т.п., но не может оперировать с элементами этих окон, такими, как адресная строка, название файла, кнопка [Сохранить] и единственный выход — искать картинки?

Положим, я хочу сохранить эту страницу. Жму Ctrl+S, указываю в адресной строке нужную папку (Ctrl+V путь), изменяю название файла, чтобы оно не было слишком длинным и не содержало запретных символов, жму [Сохранить].
В другом хорошем кликере MouseRobot это делается на раз, т.к. он распознаёт отдельные элементы. Не везде и не всегда, но как правило. Но как можно решить эту задачу в СМ?

Подозреваю, что сохранить страницу можно и без этих плясок, но я не знаю как.
В любом случае задача учебно-тренировочная, нужна в первую очередь для понимания.

Pages: [1] 2