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]
16
Есть другой вариант. В оконном режиме KEYSTRING в точности печатает заданные символы. Можно временно включить оконный режим и напечатать.

Пример
Code: (clickermann) [Select]
A_KEYSTRING ("Hello:-) world! Проверка: связи*", 310,177)

Чота мне эта строчка не нравится.
После текста вроде должна идти задержка и нумер окна.

В моем примере такого нет. Задержка не нужна вовсе. А HWND окна берется по координате. При этом кликер работает в обычном режиме эмуляции.
Возможно еще нужно добавить предварительный клик по полю ввода, для фокуса.

Я, конечно, прошу прощения, может чего не понял, но...

Есть другой вариант. В оконном режиме KEYSTRING в точности печатает заданные символы. Можно временно включить оконный режим и напечатать.

Пример
Code: (clickermann) [Select]
SUB(A_KEYSTRING, $str, $a_cx,$a_cy)
   $hw = HGET($a_cx,$a_cy)
   HSET($hw,1)
   KEYSTRING($str)
   HSET($hw,0)
END_SUB


A_KEYSTRING ("Hello:-) world! Проверка: связи*", 310,177)
HALT

и

Пишем
A_KEYSTRING("Текст", 10-задержка, hwnd-окна куда пишем)


17
... либо функцией возвращающей hwnd по координате HGET.

Code: (clickermann) [Select]
...
$hw = HGET(310,177) // координата окна блокнота (белое пространство)
A_KEYSTRING ("Hello:- world! Проверка: связи*", 20, $hw)


Насколько я понял, тут мы жестко забиваем координаты точки в текстовом поле блокнота. Он окно может открыться/быть открыто где угодно. Верно ли я мыслю, что тут возможны два варианта.

1. Привязаться к окну (перейти в оконный режим, да?) и там кликнуть по нужному месту опираясь на "оконные" координаты.

2. Найти окно. Переместить его в 0,0. Задать размер, положим 300*200. Взять координату 150,100 (чтоб наверняка попасть).

18
Есть другой вариант. В оконном режиме KEYSTRING в точности печатает заданные символы. Можно временно включить оконный режим и напечатать.

Пример
Code: (clickermann) [Select]
A_KEYSTRING ("Hello:-) world! Проверка: связи*", 310,177)

Чота мне эта строчка не нравится.
После текста вроде должна идти задержка и нумер окна.

19
Большое спасибо за развернутый ответ!

Функция поиска окон по заголовку возвращает hwnd окна, но проблема в том что нам нужно внутреннее окно блокнота, только туда можно вводить текст.
Может оно по идее и так, но у меня всё печатает.
То, что hwnd окна и рабочего поля разные я заметил. Но при поиске по окну печать идёт.

Про какую скобку идёт речь?
А, понял, про смайлик в печатаемом тексте. Писал для проверки, мелькнула мысль, что это ай-ай, но отвлекся. Зато возник резонный вопрос — что делать, если скобка таки нужна в тексте? Тот же смайлик. Подозреваю, что и другие знаки (слеши, кавычки и т.п.) так же могут попортить картину.




20
Общие вопросы / Re: Типовые алгоритмы
« on: January 12, 2017, 07:11:38 PM »
Функция WNDFIND возвращает hwnd первого попавшегося окна в заголовке которого присутствует слово "блокнот".


ОК, спасибо!

Но в окне кликермана вроде ничего про блокнот нету...
Кроме названия "Блокнот.cms"  ;)
Оно?

Нет. Поменял название .cms — ничего не изменилось. Где там "блокнот" у кликермана?

От я ж слепошарый! Во первых строках кода!
Поменял на
#name "Запись в notepad"//Имя нашего скрипта
и всё заработало.

Ещё раз спасибо!

21
Большое спасибо!

Видимо я чего-то не понимаю.

Code: [Select]
#name "New Script"
WAIT(1)

print("Hello:-) world! Проверка: связи*")

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

//A_KEYSTRING
SUB(A_KEYSTRING, $A_str, $A_delay, $A_hwnd)
   $A_kbl=GETKBLAYOUT($A_hwnd)
   IF($A_kbl ! 1049)
      setkblayout($A_hwnd, 1049)
   END_IF   
   FOR($A_nstr=1,$A_nstr<STRLEN ($A_str)+1)
      $A_l=STRCUT ($A_str, $A_nstr, 1)
      IF(ARRSIZE ($A_keys_arr) = 0)
         TFREADARR ("keys.txt", $A_keys_arr)
      END_IF   
      FOR($A_a=1,$A_a<ARRSIZE ($A_keys_arr),2)
         IF($A_keys_arr[$A_a] = $A_l)
            $A_key = $A_keys_arr[$A_a-1]
            IF($A_key = 46)
               IF(STRMD5($A_l) ! "5058F1AF8388633F609CADB75A75DC9D")
                  $A_key = 48
               END_IF
            END_IF
            IF((($A_key > 64)&($A_key < 91))|(($A_key > 185)&($A_key < 223)))
               $A_mess = 0x0100
            else
               $A_mess = 0x0102
            END_IF
            IF($A_key > 0)
               postmessage($A_hwnd,$A_mess,$A_key,0)
               waitms($A_delay)
            END_IF
            $A_a=999
         END_IF
      END_CYC
   END_CYC
   IF($A_kbl!GETKBLAYOUT($A_hwnd))
      setkblayout($A_hwnd, $A_kbl)
   END_IF
END_SUB
//-----------------------------------------------------------
$A_press_delay = 30

A_KEYSTRING ("Hello:-) world! Проверка: связи*", 20, $A_hwnd)


Ругается на
IF($A_keys_arr[$A_a] = $A_l)




22
Общие вопросы / Re: Типовые алгоритмы
« on: January 12, 2017, 06:50:37 PM »
Заметь, что должна быть включена английская раскладка.
Нельзя ли   процедуру  переключения раскладки  поручить  самой программе, или хотя бы дать понять пользователю , что  у него раскладка не та? 


Попробовал скрестить два учебный скрпта.

Code: [Select]
// 12.01.2017 6

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

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

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

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

//--------------------
$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)//Начало цикла. Цифра 5 означает что цикл повторится 5 раз

   KEYSTRING("The quick brown fox jumps over the lazy dog.", 20)//Вводим текст. 20 означает задержку в 20 мс между вводом каждой буквы

   KEYPRESS(#ENTER)//Нажимаем Enter чтобы перевести строку. #ENTER - код клавиши Enter

END_CYC//Заканчиваем цикл

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

Тело взял тут, а вставку между // ------------ отсюда:
http://crapware.aidf.org/forum/index.php?topic=382.msg3092#msg3092
Ну и русскую раскладку закомментил, понятное дело.

Первоначальный код установки раскладки, тот, что по ссылке, прекрасно работает отдельно. Но будучи вставленным внутрь кода "Запись блокнота" перестаёт работать нормально, т.е. переключает только кликермена, а блокнот остаётся в русской раскладке. Более того, $hwnd2 оказывается равен $hwnd1 и возвращает значение кликермена.
Но всё заработало, когда в
$hwnd2 = wndfind("Блокнот")
вместо "Блокнот" я написал "Безымянный".

Как-то оно странно...

23
Помогите новичку разобраться куды лошадь запрягать!

Уже понял, что KEYSTRING лепит что попало и набрать через него D:\... задача нетривиальная. Пока я поборол её чтением из файла. Но оказалось, что A_KEYSTRING позволяет избежать этих проблем. Я правильно понимаю? Тогда поясните, пожалуйста, куда прицепить этот код и как дальше пользоваться.

Я пока понял так, что сперва кладём текстовик в папку с программой, потом где-то в начале вставляем SUB с A_KEYSTRING, после чего там где надо пишем A_KEYSTRING (Любой текст, который надо вставить) Но лыжи чота не едут...
Да, там же ещё надо куда-то привязаться...

Pages: 1 [2]