1 (изменено: kekom, 2013-05-14 14:46:35)

Тема: АНК: Определение числа

Здравствуйте! Прошу помощи в решении следующей задачи:

Имеется приложение, в котором в заданной области имеется число (которое не считывается window spy). Необходимо определить (распознать, считать) данное число и присвоить его переменной, которую в дальнейшем мы будем сравнивать с заданным пользователем числом, и по результатам сравнеия ( = , > или < )  будет выполняться то или иное действие.

Например: мы задали в программе число 30000. Зайдя в приложение, в указанной области появилось число 34675. Выполняется действие А. через 30 сек в заданной области появилось число 7251 выполняется действие Б.

2

Re: АНК: Определение числа

число (которое не считывается window spy)

Window spy не настолько могуч, чтоб быть последней инстанцией. Если вы абсолютно уверены, что число считать иным способом, кроме распознания символов, не удастся — OCR Library.

3 (изменено: kekom, 2013-05-14 15:03:01)

Re: АНК: Определение числа

Ну дело в том что тогда задачка получается аналогична распознаванию капчи, при этом стиль текста (цифр всегда одинаков), т.е. сохранив все 10 цифр (от 0 до 9) и связав картинки с "реальными" цифрами можно однозначно определить число, но тогда данная задачка сводится к правильности считывания и выстраивания цифр числа в том порядке в каком они идут на экране и воспринимаются глазом человека)

Способ решения задачи не важен, цель - положительный результат))

4

Re: АНК: Определение числа

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

creature.ws, а можете, пожалуйста, огласить все способы?

5

Re: АНК: Определение числа

Нет, все не могу.

6

Re: АНК: Определение числа

Ну хотя бы основные.

7 (изменено: creature.ws, 2013-05-14 20:09:47)

Re: АНК: Определение числа

Если «число» отображено в каком-либо дочернем окне, то «прочитать число» можно c помощью оконных сообщений, применимых для данного типа дочерних окон. Команды  Control и ControlGet работает по этому принципу.
Если речь об игре, то любое потенциально важное для пользователя значение, скорее всего, можно найти в памяти процесса.

8

Re: АНК: Определение числа

Спасибо за ссылку, однако при дальнейшем решении задачи всплыли новые проблемы:

Число в приложении записывается следующим образом, например 25 000 или 1 500 000

И далее, при сравнении считанного числа, с заданным (по наблюдениям), они сравниваются как тексты ( по алфавиту), т.о. получается, что если заданное число 23, то 25000 больше, но 1500000 меньше.

Как можно преобразовать 1 500 000 к виду 1500000 и сравнивать как нормальные числа.

9

Re: АНК: Определение числа

Преобразовать, убрав из строки пробелы и «не цифры». StringReplace

10 (изменено: kekom, 2013-05-15 23:18:37)

Re: АНК: Определение числа

все преобразовал, но попрежнему 10000 < 99, аналогично 100 < 20. Он сразу по первой цифре смотрит, не опознавая его как число. Есть ли какие нить типы переменных (там real, integer  я не знаю)?

11 (изменено: kekom, 2013-05-15 23:23:44)

Re: АНК: Определение числа


x:= magicalText

 StringReplace, x, x, %A_SPACE%, , All
 StringReplace, x, x, l, 1, All
 StringReplace, x, x, I, 1, All
 StringReplace, x, x, i, 1, All
 StringReplace, x, x, _, 5, All

; liveMessage=`n%x%
; ToolTip, %liveMessage%
;   Sleep, 100

 if x > 99 then
       liveMessage= mnogo
 else liveMessage= norm
       ToolTip, %liveMessage%
       Sleep, 100

мб тут че не так?

в качестве пояснения методом тыка известно, что не читаются числа 5 и 1, вместо них другие значки, соответственно они заменяются на цифры

Закоментированный блок для проверки верности определяемого числа

12

Re: АНК: Определение числа

все преобразовал, но попрежнему 10000 < 99

Вывод очевиден. Нужно преобразовать правильно

 if x > 99 then

В Autohotkey нет ключевого слова then. Читайте справку.

13

Re: АНК: Определение числа

creature.ws пишет:

все преобразовал, но попрежнему 10000 < 99

Вывод очевиден. Нужно преобразовать правильно


Не совсем понял, преобразовать считываемое число или что?

14 (изменено: serzh82saratov, 2013-05-16 08:56:02)

Re: АНК: Определение числа

+ Надо просто удалить слово then

x:= magicalText

 StringReplace, x, x, %A_SPACE%, , All
 StringReplace, x, x, l, 1, All
 StringReplace, x, x, I, 1, All
 StringReplace, x, x, i, 1, All
 StringReplace, x, x, _, 5, All

; liveMessage=`n%x%
; ToolTip, %liveMessage%
;   Sleep, 100

 if x > 99
       liveMessage= mnogo
 else 
       liveMessage= norm
ToolTip, %liveMessage%
Sleep, 100
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15 (изменено: kekom, 2013-05-16 09:49:13)

Re: АНК: Определение числа

не помогло: при вводе x > 126 например, считываемое с картинки число 1234567890, пишет по прежнему norm


 FileAppend %x%, 1.txt 

 
такой штукой проверял, что число записывается правильно 1234567890

16 (изменено: serzh82saratov, 2013-05-16 12:15:02)

Re: АНК: Определение числа

Вы напишите просто одно из значений "magicalText" с которым у вас "неполучается", а там посмотрим. Из того что вы "проверяли" ничего неясно...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: АНК: Определение числа


x := 1234567890
If x > 126
    MsgBox Больше
Else
    MsgBox Меньше
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

18 (изменено: kekom, 2013-05-16 15:44:17)

Re: АНК: Определение числа

пост 17 не понял, к чему он, причем тут число 1234567890

magicalText переменная в которую записывается информация из картинки

 magicalText := GetOCR(3727, 1155, 100, 40, " options")

(пост №2)

числа приведены для примера, потому что заданное число сравнивается со считанным с картинки числом в переменной "magicalText" по цифрам не учитывая разряды 100 > 90 потому что 1 > 9, а 123 > 122954 потому что 3 > 2

он сравнивает переменные как текстовые, а следовательно по алфавиту

19 (изменено: serzh82saratov, 2013-05-16 15:55:03)

Re: АНК: Определение числа

пост 17 не понял, к чему он, причем тут число 1234567890

К тому что пост 17, и это:

kekom пишет:

при вводе x > 126 например, считываемое с картинки число 1234567890, пишет по прежнему norm

вместе - вызывает у меня ощущение пребывания нас с вами в паралельных вселенных.
Может у вас по недосмотру вместо нулей буквы "О", или ещё что-то влезает, потому я вам предложил выложить содержимое переменной magicalText как есть, а не объяснять откуда она берётся.

100 > 90 потому что 1 > 9, а 123 > 122954 потому что 3 > 2

он сравнивает переменные как текстовые, а следовательно по алфавиту

Вы про это уже писали, тему я читал.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20 (изменено: serzh82saratov, 2013-05-16 16:09:50)

Re: АНК: Определение числа

Присваиваю (заметьте: как текст) magicalText то значение которое вы указали:


magicalText = 1234567890
x:= magicalText

 StringReplace, x, x, %A_SPACE%, , All
 StringReplace, x, x, l, 1, All
 StringReplace, x, x, I, 1, All
 StringReplace, x, x, i, 1, All
 StringReplace, x, x, _, 5, All

 if x > 126
       liveMessage= mnogo
 else 
       liveMessage= norm
ToolTip, %liveMessage%
Return

У меня пишет mnogo а у вас norm?...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

21

Re: АНК: Определение числа

kekom пишет:
 FileAppend %x%, 1.txt 

здесь magicaltext записывается в файл 1.txt. Оттуда то я вам и скопировал число 1234567890.

Картинка у меня на данный момент одна, и число только это. Поэтому правильность выполнения условия и проверяю изменением условия "if x > какого либо числа и т.д."

при этомп олучается что

2>1234567890
13>1234567890
124>1234567890
1235>1234567890

но при этом

11908978590834750<1234567890
12208978590834750<1234567890
12308978590834750<1234567890
12343978590834750<1234567890

22 (изменено: serzh82saratov, 2013-05-16 16:17:11)

Re: АНК: Определение числа

Привидите полный алгоритм скрипта. Непонятно причём тут некий файл?

Поэтому правильность выполнения условия и проверяю изменением условия "if x > какого либо числа и т.д."

Какого условия (подчёркнуто)?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

23

Re: АНК: Определение числа

Прррреступление ррраскрррыто, все дело в "return", который появился в вашей версии скрипта и отсутствовал у меня

24 (изменено: serzh82saratov, 2013-05-16 16:24:35)

Re: АНК: Определение числа


magicalText = 1234567890
x:= magicalText

 StringReplace, x, x, %A_SPACE%, , All
 StringReplace, x, x, l, 1, All
 StringReplace, x, x, I, 1, All
 StringReplace, x, x, i, 1, All
 StringReplace, x, x, _, 5, All

; liveMessage=`n%x%
; ToolTip, %liveMessage%
;   Sleep, 100

 if x > 126
       liveMessage= mnogo
 else 
       liveMessage= norm
ToolTip, %liveMessage%
Sleep, 100

Так тоже самое, просто тултип исчезает через 100 мсек...
Return не может играть никакой роли в приведённом вами контексте.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25 (изменено: kekom, 2013-05-16 19:04:23)

Re: АНК: Определение числа

да погорячился, просто совпало


#SingleInstance force
#Include OCR.ahk

magicalText := GetOCR(3727, 1155, 100, 40, " options")

 x:= magicalText

; Замещает все пробелы на плюсы:
 StringReplace, x, x, %A_SPACE%, , All
 StringReplace, x, x, l, 1, All
 StringReplace, x, x, I, 1, All
 StringReplace, x, x, i, 1, All
 StringReplace, x, x, Y, 9, All
 StringReplace, x, x, y, 9, All
 StringReplace, x, x, _, 5, All
 StringReplace, x, x, b, 6, All
 StringReplace, x, x, t, 4, All
 StringReplace, x, x, +, 4, All

FileAppend %x%, 1.txt

 liveMessage=`n%magicalText%
 ToolTip, %liveMessage%
 Sleep, 100


 if   x > 27
 liveMessage= cena bolshaya
 else liveMessage= cena norm
 ToolTip, %liveMessage%
 return
 Sleep, 100


Esc:: ExitApp 

весь скрипт, для выполнения необходимо скачать рахив по ссылке в сообщении №2, и поправить координаты под свой монитор

26 (изменено: serzh82saratov, 2013-05-16 16:39:07)

Re: АНК: Определение числа

весь скрипт, для выполнения необходимо скачать рахив по ссылке в сообщении №2, и поправить координаты под свой монитор

А с чего он у меня будет читать точно такой же текст?
Тут надо не magicalText пытаться сфотографировать:

 liveMessage=`n%magicalText%
 ToolTip, %liveMessage%
 Sleep, 100 

а икс смотреть:

 
 ToolTip, >%x%<`n%magicalText% 
 Sleep, 3000 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

27

Re: АНК: Определение числа

Нужна помощь до выходных необходимо решить задачу((

28

Re: АНК: Определение числа

ypppu пишет:

Головоломка. Вроде простое условие, а почему-то выполняется.

a := 1
b := 2
If b<a
MsgBox, Два меньше, чем единица! 0_o
creature.ws пишет:

Скобок не хватает

a := 1
b := 2
If (b<a)
MsgBox 'b<a' = true
If % b<a
MsgBox 'b<a' = true
AutoHotkey Help (RUS) пишет:

Больше ( > ), меньше ( < ), больше или равно ( >= ), меньше или равно ( <= ). Если один из параметров не является числом, сравнение производится в алфавитном порядке

29

Re: АНК: Определение числа

А как перевести переменную в числовую, если как таковых типов переменных нет?

30

Re: АНК: Определение числа

Мб кто проверит? Подогнать координаты и область под любую точку на любой картинке где есть число дело 2 минут. Уже что только не менял, а с места не сдвинуться. И главное, что чтото очень простое!

31 (изменено: Irbis, 2013-05-16 21:58:13)

Re: АНК: Определение числа

kekom пишет:

А как перевести переменную в числовую, если как таковых типов переменных нет?

Что является конечной целью такой задачи? Перевод в число ради самого процесса перевода?

По поводу сравнения содержимого переменных именно как чисел, а не текстовых строк уже ответил ypppu в посте #28 - используйте скобки в выражении.
if   (x > y) - как число
if   x > y - как строка

32

Re: АНК: Определение числа

Ну так приложите архив с библиотекой положите картинку, скрипт да выставьте в нём сами координаты от левого верхнего угла, чтоб запустил и готово.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

33

Re: АНК: Определение числа

Так не работает ведь, что в скобках что без, результат один как и на первой странице(

34 (изменено: serzh82saratov, 2013-05-16 22:12:46)

Re: АНК: Определение числа

Irbis пишет:

If x > y - как строка

Это когда то с чем вы сравниваете переменную находится в переменной. Можно и без скобок If x > %y%

x := 1234567890
y := 126
If x > %y%
    MsgBox Больше
Else
    MsgBox Меньше

У товарища предмет сравнения находится непосредственно в выражении:


x := 1234567890
If x > 126
    MsgBox Больше
Else
    MsgBox Меньше

И тут скобки не обязательны.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

35

Re: АНК: Определение числа

записываю переменную magictext в текстовый файл: такое ощущение что после числа эта скотина автоматом переходит на след строку, и получается что переменная равна число+ пустая строка

36

Re: АНК: Определение числа

Значит вы неправы и переменная равна не 1234567890 а 1234567890`n, о чём и был разговор. Удаляйте переводы строк перед сравнением, и готово.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

37 (изменено: serzh82saratov, 2013-05-16 22:34:03)

Re: АНК: Определение числа


x := RegExReplace(x, "`a)\R")
 
if   x > 27
    liveMessage= cena bolshaya
else 
    liveMessage= cena norm
ToolTip, %liveMessage%
return

upd:
А лучше просто заменить :

StringReplace, x, x, %A_SPACE%, , All

на:

x := RegExReplace(x, "\s")

заодно и табуляции почистит.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

38

Re: АНК: Определение числа

Победа, спасибо огромное serzh82saratov, за то что промучался со мной весь день. Причем у меня постоянно мелькала эта мысль, но никак не мог диагностировать, пока не вычистил весь текстовик, и не увидел что туда записывается число, а курсор на следующей строке, едем дальше, надеюсь там проще.

39

Re: АНК: Определение числа

но никак не мог диагностировать, пока не вычистил весь текстовик, и не увидел что туда записывается число, а курсор на следующей строке

Угу... В 26 посте:

 ToolTip, >%x%<`n%magicalText% 
 Sleep, 3000 

если бы запустили, то увидели бы что "<" справа от %x% ушла бы вниз,
чудеса бывают редко, надо повнимательней на отладке.
если бы в файл не писали то как  ?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

40

Re: АНК: Определение числа

Запускал, видел, но не предавал этому значения)