//alternative windowed mode v1.1
//-----------------------------------------------------------
//A_LCLICK
SUB(A_LCLICK, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0201,0x0001,$A_x+($A_y*65536))
waitms($A_press_delay)
postmessage($A_hwnd,0x0202,0x0001,$A_x+($A_y*65536))
END_SUB
//-----------------------------------------------------------
//A_LDOWN
SUB(A_LDOWN, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0201,0x0001,$A_x+($A_y*65536))
END_SUB
//-----------------------------------------------------------
//A_LUP
SUB(A_LUP, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0202,0x0001,$A_x+($A_y*65536))
END_SUB
//-----------------------------------------------------------
//A_DBLCLICK
SUB(A_DBLCLICK, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0203,0x0001,$A_x+($A_y*65536))
END_SUB
//-----------------------------------------------------------
// A_RCLICK
SUB(A_RCLICK, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0204,0x0002,$A_x+($A_y*65536))
waitms($A_press_delay)
postmessage($A_hwnd,0x0205,0x0002,$A_x+($A_y*65536))
END_SUB
//-----------------------------------------------------------
//A_RDOWN
SUB(A_RDOWN, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0204,0x0002,$A_x+($A_y*65536))
END_SUB
//-----------------------------------------------------------
//A_RUP
SUB(A_RUP, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0205,0x0002,$A_x+($A_y*65536))
END_SUB
//-----------------------------------------------------------
// A_MCLICK
SUB(A_MCLICK, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0207,0x0010,$A_x+($A_y*65536))
waitms($A_press_delay)
postmessage($A_hwnd,0x0208,0x0010,$A_x+($A_y*65536))
END_SUB
//-----------------------------------------------------------
//A_MDOWN
SUB(A_MDOWN, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0207,0x0010,$A_x+($A_y*65536))
END_SUB
//-----------------------------------------------------------
//A_MUP
SUB(A_MUP, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0208,0x0010,$A_x+($A_y*65536))
END_SUB
//-----------------------------------------------------------
//A_MOVE
SUB(A_MOVE, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0200,0,$A_x+($A_y*65536))
END_SUB
//-----------------------------------------------------------
//A_KEYPRESS
SUB(A_KEYPRESS, $A_key, $A_hwnd)
postmessage($A_hwnd,0x0100,$A_key,0)
waitms($A_press_delay)
postmessage($A_hwnd,0x0101,$A_key,0)
END_SUB
//-----------------------------------------------------------
//A_KEYDOWN
SUB(A_KEYDOWN, $A_key, $A_hwnd)
postmessage($A_hwnd,0x0100,$A_key,0)
END_SUB
//-----------------------------------------------------------
//A_KEYUP
SUB(A_KEYUP, $A_key, $A_hwnd)
postmessage($A_hwnd,0x0101,$A_key,0)
END_SUB
//-----------------------------------------------------------
//A_GETSCREEN
SUB(A_GETSCREEN, $A_x1, $A_y1, $A_x2, $A_y2, $A_hwnd)
WNDGETINFO ($A_hwnd, $A_x0, $A_y0, $A_width, $A_height)
IF($A_x1+$A_y1+$A_x2+$A_y2 = 0)
$A_x2 = $A_width
$A_y2 = $A_height
END_IF
GETSCREEN($A_x0+$A_x1,$A_y0+$A_y1,$A_x0+$A_x2,$A_y0+$A_y2)
END_SUB
//-----------------------------------------------------------
//A_SCREENSHOTEX
SUB(A_SCREENSHOTEX, $A_x1, $A_y1, $A_x2, $A_y2, $A_pref, $A_format, $A_hwnd)
WNDGETINFO ($A_hwnd, $A_x0, $A_y0, $A_width, $A_height)
IF(($A_x1+$A_y1+$A_x2+$A_y2) = 0)
$A_x2 = $A_width
$A_y2 = $A_height
END_IF
SCREENSHOTEX($A_x0+$A_x1,$A_y0+$A_y1,$A_x0+$A_x2,$A_y0+$A_y2,$A_pref,$A_format)
END_SUB
//-----------------------------------------------------------
//A_PXL
SUB(A_PXL, $A_x, $A_y, $A_hwnd)
WNDGETINFO ($A_hwnd, $A_x0, $A_y0, $A_width, $A_height)
$A_return1 = PXL($A_x0+$A_x, $A_y0+$A_y)
END_SUB
//-----------------------------------------------------------
//A_PXLCOUNT
SUB(A_PXLCOUNT, $A_x1, $A_y1, $A_x2, $A_y2, $A_color, $A_hwnd)
WNDGETINFO ($A_hwnd, $A_x0, $A_y0, $A_width, $A_height)
$A_return1 = PXLCOUNT ($A_x0+$A_x1,$A_y0+$A_y1,$A_x0+$A_x2,$A_y0+$A_y2, $A_color)
END_SUB
//-----------------------------------------------------------
//A_PXLXOR
SUB(A_PXLXOR, $A_x1, $A_y1, $A_x2, $A_y2, $A_hwnd)
WNDGETINFO ($A_hwnd, $A_x0, $A_y0, $A_width, $A_height)
$A_return1 = PXLXOR($A_x0+$A_x1,$A_y0+$A_y1,$A_x0+$A_x2,$A_y0+$A_y2)
END_SUB
//-----------------------------------------------------------
//A_PXLCRC
SUB(A_PXLCRC, $A_x1, $A_y1, $A_x2, $A_y2, $A_hwnd)
WNDGETINFO ($A_hwnd, $A_x0, $A_y0, $A_width, $A_height)
$A_return1 = PXLCRC($A_x0+$A_x1,$A_y0+$A_y1,$A_x0+$A_x2,$A_y0+$A_y2)
END_SUB
//-----------------------------------------------------------
//A_IFPIXELIN
SUB(A_IFPIXELIN, $A_x1, $A_y1, $A_x2, $A_y2, $A_color, $A_hwnd)
WNDGETINFO ($A_hwnd, $A_x0, $A_y0, $A_width, $A_height)
IF_PIXEL_IN($A_x0+$A_x1,$A_y0+$A_y1,$A_x0+$A_x2,$A_y0+$A_y2, $A_color)
$A_return1 = $_return1-$A_x0
$A_return2 = $_return2-$A_y0
else
$A_return1 = 0
$A_return2 = 0
END_IF
END_SUB
//-----------------------------------------------------------
//A_IFPICTUREIN
SUB(A_IFPICTUREIN, $A_x1, $A_y1, $A_x2, $A_y2, $A_file, $A_bgcolor, $A_currency, $A_hwnd)
WNDGETINFO ($A_hwnd, $A_x0, $A_y0, $A_width, $A_height)
IF_PICTURE_IN($A_x0+$A_x1,$A_y0+$A_y1,$A_x0+$A_x2,$A_y0+$A_y2, $A_file, $A_bgcolor, $A_currency)
$A_return1 = $_return1-$A_x0
$A_return2 = $_return2-$A_y0
else
$A_return1 = 0
$A_return2 = 0
END_IF
END_SUB
//-----------------------------------------------------------
//A_SCANPICTURE
SUB(A_SCANPICTURE, $A_x1, $A_y1, $A_x2, $A_y2, $A_file, $A_bgcolor, $A_currency, $A_hwnd)
WNDGETINFO ($A_hwnd, $A_x0, $A_y0, $A_width, $A_height)
SCANPICTURE($A_var,$A_x0+$A_x1,$A_y0+$A_y1,$A_x0+$A_x2,$A_y0+$A_y2,$A_file,$A_bgcolor,$A_currency)
FOR($i=0, $i < ARRSIZE($A_var),2)
$A_var[$i] = $A_var[$i]-$A_x0
$A_var[$i+1] = $A_var[$i+1]-$A_y0
END_CYC
END_SUB
//-----------------------------------------------------------
//A_SCANPXL
SUB(A_SCANPXL, $A_x1, $A_y1, $A_x2, $A_y2, $A_color, $A_hwnd)
WNDGETINFO ($A_hwnd, $A_x0, $A_y0, $A_width, $A_height)
SCANPXL($A_var,$A_x0+$A_x1,$A_y0+$A_y1,$A_x0+$A_x2,$A_y0+$A_y2,$A_color)
FOR($i=0, $i < ARRSIZE($A_var),2)
$A_var[$i] = $A_var[$i]-$A_x0
$A_var[$i+1] = $A_var[$i+1]-$A_y0
END_CYC
END_SUB
//-----------------------------------------------------------
//A_COLORMODE
SUB(A_COLORMODE, $A_mode, $A_x1, $A_y1, $A_x2, $A_y2, $A_hwnd)
WNDGETINFO ($A_hwnd, $A_x0, $A_y0, $A_width, $A_height)
IF(($A_x1+$A_y1+$A_x2+$A_y2) = 0)
$A_x2 = $A_width
$A_y2 = $A_height
END_IF
COLORMODE ($A_mode, $A_x0+$A_x1,$A_y0+$A_y1,$A_x0+$A_x2,$A_y0+$A_y2)
END_SUB
//-----------------------------------------------------------
//A_CHECK_PXL
SUB(A_CHECK_PXL,$A_hwnd)
WNDGETINFO ($A_hwnd, $A_x0, $A_y0, $A_width, $A_height)
GETSCREEN
print("(",$_xmouse-$A_x0,",",$_ymouse-$A_y0,") // ",PXL($_xmouse,$_ymouse))
END_SUB
//-----------------------------------------------------------
//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
#include "alt_winmode.cms"
$hwnd1 = WNDFIND ("Заголовок первого окна")
$hwnd2 = WNDFIND ("Заголовок второго окна")
A_MOVE(10,10, $hwnd1)
wait(1)
A_GETSCREEN(0,0,0,0,$hwnd1)
A_IFPIXELIN(400,700,500,800, 11465971, $hwnd1)
IF($A_return1>0)
A_MOVE($A_return1,$A_return2-20, $hwnd1)
waitms(50)
A_LCLICK($A_return1,$A_return2-20, $hwnd1)
waitms(50)
END_IF
THREAD(win_2)
#include "alt_winmode.cms"
A_LDOWN (155, 170, $hwnd2)
waitms(50)
A_MOVE(231, 170, $hwnd2)
waitms(50)
A_LUP(231, 170, $hwnd2)
wait(5)
A_KEYPRESS(#enter, $hwnd2)
waitms(50)
END_THREAD
//A_KEYSTRING для clickermann v.4.13 b3
SUB(A_KEYSTRING, $A_str, $A_delay, $A_hwnd)
FOR($A_nstr=1,$A_nstr<STRLEN ($A_str)+1)
$A_md5 = strmd5(strcut2($A_str, $A_nstr, $A_nstr ))
FOR($A_ntxt=1,$A_ntxt<TFCOUNT ("keys_v4.13.txt")+1)
IF(STRPOS (TFREAD ("keys_v4.13.txt",$A_ntxt),$A_md5) > 0)
postmessage($A_hwnd,0x0102,int(STRCUT (TFREAD("keys_v4.13.txt",$A_ntxt),1,STRPOS(TFREAD ("keys_v4.13.txt",$A_ntxt)," "))),0)
$A_ntxt=TFCOUNT ("keys_v4.13.txt")+1
waitms($A_delay)
END_IF
END_CYC
END_CYC
END_SUB
//-----------------------------------------------------------
//пример:
//нужную строку обязательно записываенм в начале в переменную
$text = "English, Русский...! # $ % & ' ( * + , - . / 14890 : ; < = > ? @ [ \ ] ^ _ ` { | } ~ ¤ ¦ § © « ¬ ® ° ± µ ¶ · » "
//и только после этого вызов подпрограммы.
A_KEYSTRING ($text,100,197534)
HALT
GETSCREEN в привязке и GETSCREEN по всему экрану это разные вещи. Можешь попробовать.да, всё верно. но A_GETSCREEN бал сделан лишь для того, чтобы вводить область GETSCREEN в независимости от местоположения окна. да, будет одинаково работать и с стандартным GETSCREEN, кроме как с разницей скорости выполнения команды, а тем самым нагрузки на цп.
В твоём варианте, как бы ты не делал, внутри буфера координаты останутся абсолютными, а не относительными.
#include "alt_winmode.cms"
$hwnd1 = WNDFIND ("Блокнот")
wait(1)
$t=$_ms
A_GETSCREEN(0,0,0,0,$hwnd1)
print($_ms-$t) //12мс
SCREENSHOT
wait(1)
$t=$_ms
GETSCREEN
print($_ms-$t) //58мс . ведь скрин делается сразу двух рабочих столов 1920х1080х2, если для работы скрипта использовать дополнотельный монитор.
SCREENSHOT
halt
#include "alt_winmode.cms"
$hwnd1 = 727230 // текстовое поле первого блокнота
$hwnd2 = 1186412 // текстовое поле второго блокнота
wait(1)
A_KEYPRESS(#A, $hwnd1) //в первом пишем "а"
waitms(50)
A_GETSCREEN(0,0,0,0,$hwnd1) //скриним первый
SCREENSHOT
wait(1)
A_KEYPRESS(#BACKSPACE, $hwnd1) //стираем в первом "а"
waitms(50)
A_GETSCREEN(0,0,0,0,$hwnd2) //скриним второй
SCREENSHOT //и видим, что в первом асталось "а", хотя в самом деле там пусто. да и вообще это поле осталось в буфере и никуда не делось.
halt
первый скрин //A_DBLCLICK
SUB(A_DBLCLICK, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0203,0x0001,$A_x+($A_y*65536))
END_SUB
добавьте вот это тоже:добавил. спс.
[spoiler]Code: (clickermann) [Select]//A_DBLCLICK
[/spoiler]
SUB(A_DBLCLICK, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0203,0x0001,$A_x+($A_y*65536))
END_SUB
это прекрасно, ждем пока кто то все команды для этого режима пропишет через сабыда в принципе и добавлять то и нечего :D . кручение колеса в разных окнах по разному себя ведет... а больше я и не знаю что еще нужно, связки кнопок shift+ ctrl+ alt+ нужно.
SUB(test, $n)
waitms(8)
print("вне потока ", $n)
END_SUB
test("вне потока")
THREAD(thr_test)
SUB(test, $n)
waitms(10)
print("в потоке ", $n)
END_SUB
test("в потоке")
END_THREAD
в логе:15:47:28 в потоке вне потока
15:47:28 вне потока вне потока
15:47:28 вне потока вне потока
15:47:28 в потоке 0
15:47:28 вне потока в потоке
15:47:28 в потоке 0
15:47:28 вне потока в потоке
15:47:28 в потоке вне потока
15:47:28 вне потока в потоке
15:47:28 в потоке вне потока
15:47:28 вне потока в потоке
15:47:28 в потоке вне потока
15:47:28 вне потока в потоке
15:47:28 в потоке вне потока
15:47:28 вне потока 0
15:47:28 вне потока вне потока
15:47:28 в потоке вне потока
15:47:28 вне потока в потоке
15:47:28 в потоке 0
15:47:28 вне потока в потоке
15:47:28 в потоке 0
15:47:28 вне потока в потоке
15:47:28 в потоке в потоке
15:47:28 вне потока вне потока
#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)
//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
$hw = HGET(310,177) // координата окна блокнота (белое пространство)
A_KEYSTRING ("Hello:- world! Проверка: связи*", 20, $hw)
HALT
#include "alt_winmode.cms"
$hw = HGET(310,177) // координата окна блокнота (белое пространство)
A_KEYSTRING ("Hello:- world! Проверка: связи*", 0, $hw)
HALT
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
Функция поиска окон по заголовку возвращает hwnd окна, но проблема в том что нам нужно внутреннее окно блокнота, только туда можно вводить текст.Может оно по идее и так, но у меня всё печатает.
Есть другой вариант. В оконном режиме KEYSTRING в точности печатает заданные символы. Можно временно включить оконный режим и напечатать.
ПримерCode: (clickermann) [Select]A_KEYSTRING ("Hello:-) world! Проверка: связи*", 310,177)
Есть другой вариант. В оконном режиме KEYSTRING в точности печатает заданные символы. Можно временно включить оконный режим и напечатать.
ПримерCode: (clickermann) [Select]A_KEYSTRING ("Hello:-) world! Проверка: связи*", 310,177)
Чота мне эта строчка не нравится.
После текста вроде должна идти задержка и нумер окна.
... либо функцией возвращающей hwnd по координате HGET.Code: (clickermann) [Select]...
$hw = HGET(310,177) // координата окна блокнота (белое пространство)
A_KEYSTRING ("Hello:- world! Проверка: связи*", 20, $hw)
Есть другой вариант. В оконном режиме 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-окна куда пишем)
// 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//Останавливаем скрипт
Что я сделал не так?
А что здесь странного? HGET команда с глобальными координатами, иначе зачем бы она была нужна.Code: (clickermann) [Select]$hw2 = HGET(100,100) // определяем hwnd текстового поля блокнота (как ни странно, 100,100 от угла экрана, а не от окна)
Цифра 2 означает что цикл повторится 5 разС этой логикой не поспоришь...
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
SUB(A_KEYSTRING, $str, $hwnd)
Переменные используемые в подпрограмме $str и $hwnd после окончания подпрограммы будут обнулены. Поэтому не стоит использовать переменные с темже именем где то еще.Что я сделал не так?
А ЧЯДНТ? Смотри скрин :D.А что здесь странного? HGET команда с глобальными координатами, иначе зачем бы она была нужна.Code: (clickermann) [Select]$hw2 = HGET(100,100) // определяем hwnd текстового поля блокнота (как ни странно, 100,100 от угла экрана, а не от окна)
С логикой вообще спорить бесполезно! ;DQuoteЦифра 2 означает что цикл повторится 5 разС этой логикой не поспоришь...
Верный код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
"После этого HWND на главной форме меняться уже не будет..." — вот это момент вообще не понял. Меняется за милую душу когда мышью елозишь.:o У тебя точно программа Clickermann? ;D ;D
НЕ В РЕДАКТОРЕ.
A_MDOWN (1000,560, 131540) //скролл вниз
A_MOVE(1000,600, 131540)
WAIT(1)
A_LCLICK (1000,650, 131540)
HALT
А скроллинг мышью как делать? Конкретно есть код крутить колесо мыши вниз, т.е WHEELDOWN?А про WHEELDOWN в привязке забудте. Колесо мыши действует по разному, в зависимости от положения указателя.
GETSCREEN
SCREENSHOT
получаю черный экран.$hwnd1 = 3805494
а при указании имени окна - получаю черный экран (правда с какой то белой полосой).$hwnd2 = WNDFIND ("Имя - Google Chrome")
#include "alt_winmode.cms"
$hwnd1 = 3805494
$hwnd2 = WNDFIND ("Имя - Google Chrome")
while($var1 < 2)
A_GETSCREEN(0, 0, 0, 0, $hwnd1)
A_SCREENSHOTEX(0, 0, 0, 0, Number, 0, $hwnd1)
inc($var1)
end_cyc
while($var2 < 2)
A_GETSCREEN(0, 0, 0, 0, $hwnd2)
A_SCREENSHOTEX(0, 0, 0, 0, Name, 0, $hwnd2)
inc($var2)
end_cyc
[/spoiler]
окна Chrome с flash игрой.Ключевое слово "flash"! Окно флэша это не окно браузера. Привязываться нужно именно к окну флэша, по имени это не сделать, только по координатам.
...
Направьте пожалуйста на путь истинный, как использовать по наименованию окна?
Ключевое слово "flash"! Окно флэша это не окно браузера. Привязываться нужно именно к окну флэша, по имени это не сделать, только по координатам.
A_GETSCREEN(0, 0, 0, 0, $hwnd1)
A_SCREENSHOTEX(0, 0, 0, 0, pref, 0, $hwnd1)
WAIT(2)
"нельзя чтобы окно было закрыто другим окном"
WNDPOS(hwnd, $_xmax, $_ymax)
WNDPOS(hwnd, $_xmax, 0)
Почему не задвинуть окно за край до максимума?
Хочешь руками, хочешь командой
Минус, что процесс не видно, контролировать хочется :)Хм. А зачем тогда привязка?
THREAD(whide, 1)
IF(ISKEYDOWN(#F9) = 1)
$hiden = $hiden ^ 1
IF($hiden = 1)
WNDPOS(WNDFIND("Входящие", 0), $_xmax, 0)
ELSE
WNDPOS(WNDFIND("Входящие", 0), 50, 50)
END_IF
WAITMS(500)
ELSE
WAITMS(100)
END_IF
END_THREAD
//основной скрипт
#include "alt_winmode.cms"
LOGCLEAR // очищаем лог
// Получение hwnd окна
HINTPOPUP ("нажмите СКМ для запуска")
WHILE(iskeydown(4)=0) // ждёт нажатие левой=1 (средней=4) кнопки мыши
WAITMS(50)
END_CYC
$hwnd1=HGET ($_xmouse, $_ymouse) // выбор окна при нажатии СКМ
print ("hwnd окна:", $hwnd1)
WHILE(iskeydown(4)=1) // ждёт отпускание левой=1 (средней=4) кнопки мыши
WAITMS(50)
END_CYC
THREAD(whide, 1)
IF(ISKEYDOWN(#F9) = 1)
$hiden = $hiden ^ 1
IF($hiden = 1)
WNDPOS(WNDFIND("Mozilla Firefox", 0), $_xmax, 0)
ELSE
WNDPOS(WNDFIND("Mozilla Firefox", 0), 0, 0)
END_IF
WAITMS(500)
ELSE
WAITMS(100)
END_IF
END_THREAD
CYCLE: // основной цикл
A_GETSCREEN(0, 0, $_xmax, $_ymax, $hwnd1)
A_COLORMODE(6, 0, 0, $_xmax, $_ymax, $hwnd1)
A_SCREENSHOTEX(0, 0, 0, 0, "Wind_", 0, $hwnd1)
WAIT(30)
GOTo (CYCLE)
GETSCREEN(0,0, $_xmax+10,$_ymax+10)
COLORMODE(6, 0,0, $_xmax+10,$_ymax+10)
LOGCLEAR
$xmax = $_xmax
THREAD(whide, 1)
IF(ISKEYDOWN(#F9) = 1)
$hiden = $hiden ^ 1
IF($hiden = 1)
WNDPOS(WNDFIND("Mozilla Firefox", 0), $xmax, 0)
ELSE
WNDPOS(WNDFIND("Mozilla Firefox", 0), 0, 0)
END_IF
WAITMS(500)
ELSE
WAITMS(100)
END_IF
END_THREAD
// Получение hwnd окна
HINTPOPUP("нажмите СКМ для запуска")
WHILE(iskeydown(4) = 0) // ждёт нажатие левой=1 (средней=4) кнопки мыши
WAITMS(50)
END_CYC
$hwnd1 = HGET($_xmouse, $_ymouse) // выбор окна при нажатии СКМ
HSET($hwnd1, 1)
LOGWRITE("hwnd окна:", $hwnd1)
WHILE(iskeydown(4) = 1)
WAITMS(50)
END_CYC
WHILE(1)
HINTPOPUP("Скрин!", "")
GETSCREEN
COLORMODE(6)
SCREENSHOT("Wind_")
//SCREENSHOTEX(0, 0, 0, 0, "Wind_", 0)
WAIT(1)
HINTPOPUP("", "")
WAIT(5)
END_CYC
в общем пробуй расширить твой рабочий стол.В дровах копался, виртуальные столы попробовал, гуглил. Пока не нашел вариантов.. Ну кроме как отдать ноут под Clickermann :)
Потому что так не прокатит. За экраном работает только стандартная привязка, а не альтернативная.Вроде у меня при альтернативной привязке скринит, но не отрисовывается. А при стандартной привязке flash не видно, черный экран (и через лупу).
Если обычный режим эмуляции, то заскринить за пределами экрана не выйдет и получить GETSCREEN и COLORMODE. Там проверяется на не превышение $_xmax, $_ymax. Обычная же привязка прекрасно гетскринит задвинутые окна.
ставь виртуальную машину, и проблема решится, и ноут свободен :).Пробовал, до того как начал экран анализировать. Просто кликал по координатам, но неудобно, координаты не привяжешь, карта игры (FoE) больше экрана, приходится при старте скрипта тыкать по зданиям, указывая местонахождение. Остановил скрипт, что то сделал, карту сместил и заново.
Вроде у меня при альтернативной привязке скринит, но не отрисовывается. А при стандартной привязке flash не видно, черный экран (и через лупу).
Не использовать хром. Отключить аппаратное ускорение у flash. ПКМ... перезапустить. Всё видит прекрасно.
Спасибо за совет, но тормозит то как раз потому, что отключается аппаратная производительность компа (не берусь утверждать, думаю видеокарта) и идет программная обработка, соответственно нагружающая процессор и т.п. Если при включенном аппаратном ускорении все летает, плюс еще открыто несколько десятков окон, то при выключенном ускорении Adobe Flash забирает 75-80% процессора.Да, видит, но при отключении аппаратного ускорения, тормозит flash жутко. При загрузке отрисовывает картинку 10 минут. Видать Flash довольно прожорлив.Обновите железо, уменьшите разрешение экрана, отключите фоновые процессы.
Интересует, может есть все таки возможность фонового использования Clickermann и Flash игрухи без отключения аппаратного ускорения?
GETSCREEN
SCREENSHOT
halt
и.... чудо, скрин на выходе с разрешением 7936х2160, и вссе окна отображаются :D, и весит этот скрин 65.3 мб :oсамому интересно стало, неужели без физического монитора не возможно вкл его?Спасибо за Ваше участие. У меня после нажатия кнопки "найти", ничего не появилось. Вероятно у Вас аппаратно есть еще один видео-выход (интегрированный видеовыход, при использовании внешней карты).
оказалось, это очень просто!!!
тестировал на вин7.
идем сюда - Панель управления\Все элементы панели управления\Экран\Разрешение экрана , или на рабочем столе пкм, и сразу разрешение экрана.
жмем кнопку "найти" , появляется мониторчик справа от основного.
тыкаем на него, и ниже, там где "несколько мониторов: экран не выбран" меняем на " попытаться в любом случае подключиться к: vga".
Всем доброго времени суток, а можно ли как то реализовать нажатие в окнах кнопок Enter, ctrl ? Интересует комбинация crtl+V но что то не выходит.. только V печатаются в текстовом поле.пробуй вот этот вариант http://crapware.aidf.org/forum/index.php?topic=1728.msg9846#msg9846
A_KEYDOWN (#CTRL)
WAITMS (50)
A_KEYDOWN (#V)
WAITMS (50)
A_KEYUP (#V)
A_KEYUP (#CTRL)
работает. в некоторых работает, но с лишней буквой "V". в некоторых не работает. //создаем A_LCLICK
SUB(A_LCLICK, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0201,0x0001,$A_x+($A_y*65536))
waitms($A_press_delay)
postmessage($A_hwnd,0x0202,0x0001,$A_x+($A_y*65536))
END_SUB
// кликаем в свёрнутом окне 782,556
A_LCLICK(782,556,1639690)
WAITMS(200)
Нужно чтобы в определённом свёрнутом окне виндовс автоматически производились клики в одну точку.Здравствуйте, спрашивал в вконтакте мне вроде и ответили, только я не понял как это использовать, поэтому решил спросить в теме, которую это касается.Сорри, отсутствовал, праздников уж очень много было.Code: (clickermann) [Select]//создаем A_LCLICK
Нужно чтобы в определённом свёрнутом окне виндовс автоматически производились клики в одну точку.
SUB(A_LCLICK, $A_x, $A_y, $A_hwnd)
postmessage($A_hwnd,0x0201,0x0001,$A_x+($A_y*65536))
waitms($A_press_delay)
postmessage($A_hwnd,0x0202,0x0001,$A_x+($A_y*65536))
END_SUB
// кликаем в свёрнутом окне 782,556
A_LCLICK(782,556,1639690)
WAITMS(200)
Hwnd окна я указал правильно, и клики производятся только в нём. Но они не производятся по указанной координате. Куда ведёшь мышь туда и идут клики.
Во вконтакте мне посоветовали вот это.
"Сначала привязка к окну, потом определение и указание нужных вам координат, именно в таком порядке."
Но я так и не понял как это использовать.
Вообще когда перешёл на десятку появлялись проблемы с автоматической записью скрипта. Может быть десятка как-то и на это влияет?
Включаем в настройках видеокарты дополнительный монитор и перетаскиваем наши окна на рабочий стол дополнительного монитора.
http://crapware.aidf.org/forum/index.php?topic=2111.msg21592#msg21592Включаем в настройках видеокарты дополнительный монитор и перетаскиваем наши окна на рабочий стол дополнительного монитора.
Вы имеете в виду подключить второй монитор? или утилита позволяющая это сделать?
Будьте добры по подробней.
Есть возможность добавить горизонтальный "скролинг". В интернете встречал отдельные программы, которые позволяют расширить горизонтальные границы рабочего стола, при это есть возможность прокрутки.
Но к сожалению чистой программы не удалось найти.
GETSCREEN(1100,100,1500,500)
SCREENSHOTFIX(1100,100,1500,500, "file.jpeg", 1)
waitms(400)
Все как у Вас получились, но только не соображу - как перейти на второй монитор, туда задвинул окно, а как перейти?!что значит "туда задвинул окно, а как перейти?!"? все, окно задвинул, бот там делает все что нужно. если нужно посмотреть что там происходит, то тут уж нужно думать. вот один из вариантов http://crapware.aidf.org/forum/index.php?topic=2111.msg25800#msg25800 . я в таких случаях просто делаю подробное логирование, дабы быть в курсе всех дел. еще, как вариант, подключить второй монитр :D
//A_LUP
SUB(A_LUP, $A_x, $A_y, $A_hwnd)
//A_RUP
SUB(A_RUP, $A_x, $A_y, $A_hwnd)
Файл alt_winmode.Заменил.
строка 38 и 39.Code: [Select]//A_LUP
SUB(A_LUP, $A_x, $A_y, $A_hwnd)
Тут наверное ошибка, нужно заменить наCode: [Select]//A_RUP
SUB(A_RUP, $A_x, $A_y, $A_hwnd)