1 (изменено: Jack, 2020-09-09 14:42:50)

Тема: AHK: Счетчик кликов клавишей мыши в определенной области экрана

Помогите пожалуйста!
Нужен код для подсчета кликов мышью по кнопке в окне браузера.
В идеале хотелось, чтобы код сам определял эту область кнопки, по заранее сделанному её скрину. Так как кнопка не всегда находится на одном месте. При прокрутке, она немного смещается по вертикали.
   Но если это будет проблемно исполнить, можно просто забить область на экране в код. и желательно, чтобы эта область была как то выделена, например рамкой в 1 или 2 пикселя
Сразу хочу предупредить, что я полный чайник в написании кода Фантазия работает, а языков не знаю

2

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

Данный форум помогает в решении проблем.
Напишите свой код и если он кого-то заинтересует, то вам помогут решить ваши проблемы с ним.

3 (изменено: Jack, 2020-09-09 20:50:12)

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

__Михаил__ я понимаю, что только помогают, но я вообще не разбираюсь в этом. Однажды я уже просил мне помочь и тоже без кода пришел, нашлись добрые люди, которые помогли мне с этим. Например здесь: http://forum.script-coding.com/viewtopic.php?id=9953
Хотелось бы верить, что и сейчас кто то отзовется

4

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

Jack

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

5

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

В целом ничего сложного тут не вижу. Сейчас набросаю что-нибудь.

6

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

__Михаил__ Я специалист в других сферах и просто нет банально времени вникать глубоко в эту тему. Вот взяли бы и помогли мне вместо того, чтобы упрекать меня в не компетентности

7

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

__Михаил__ Спасибо, Мир не без добрых людей

8

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

Важно: картинка не должна меняться, иначе не произойдёт её определение.

CoordMode, Mouse, Screen

; Полый путь к картинке:
Pict = C:\Click.png

Size := GetImageSize(Pict)	; Получить разрешение картинки.
Wmax := Size.W
Hmax := Size.H

If !Wmax
 ToolTip, Ошибка получения размера картинки!
Return


~vk1::	; 'Скрытый' перехват левой кнопки мыши.
MouseGetPos, X_pos, Y_pos	; Текущая позиция курсора.

SearX := X_pos-Wmax		; Определяем минимальные и максимальные границы позиции кнопки:
SearY := Y_pos-Hmax
SearX1 := X_pos+Wmax
SearY1 := Y_pos+Hmax

ImageSearch, X,Y, SearX, SearY, SearX1, SearY1, *60 %Pict%
ErrorLevel ? 0 : Click(X,Y)	; Если нажатие в пределах картинки.
Return

Click(x,y)
{
 Global I
 I++
 ToolTip, Клик номер: %I%
}


;01:23 26.06.2020	Получить разрешение картинки:	[teadrinker]
GetImageSize(imageFilePath)
{
 Gui, New
 Gui, Add, Pic,, % imageFilePath
 GuiControlGet, Pic, Pos, Static1
 Gui, Destroy
 Return { W: PicW, H: PicH }
}

9

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

Работает коряво, при многократном нажатии может перестать определять, фиг знает что делать))

10 (изменено: Jack, 2020-09-10 12:09:18)

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

__Михаил__Может второй вариант осуществить? Просто считать клики в определенной области на экране. У меня тоже проблемы, моя кнопка меняет немного тон при наведении мыши на неё.
Или может кто-то другой поможет устранить проблему в коде?

11

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

Jack

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

#NoEnv
#SingleInstance Force
Menu, Tray, Icon, Shell32.dll, 76
CoordMode, Mouse, Screen ; Задаём для курсора мышки отсчёт координат относительно всего экрана.

SetTitleMatchMode, 2
DetectHiddenWindows, On

Menu, tray, add, Открыть окно, Open
Menu, tray, add, - Перезапуск -, Exit2
Menu, tray, add, Показывать кол-во, Clicker
Menu, tray, add, ? Справка ?, Help
Menu, tray, add, < Сбросить счётчик >, Slear
Menu, tray, add, [ Закрыть ], Exit
Menu, tray, NoStandard		; Удалить стандартные ф-и из меню.
Menu, Tray, Click, 1		; Активация одним щелчком по иконке (так удобнее).
Menu, tray, Default, Открыть окно	; Активировать окно программы из трея при нажатии на иконку.

OnExit, Exit	; Установить метку, которая выполнит сохранение данных в ini файл при выходе.


Set = Key_log.ini	; Название файла настроек программы.

TextNo = -Окно не указано-

IniRead, History, % Set, Log, History, 0	; Кол-во нажатий.
IniRead, App1, % Set, Log, App1, ahk_exe chrome.exe	; Первое окно в котором подсчитывать.
IniRead, App2, % Set, Log, App2, % TextNo	; Второе окно.
IniRead, Info, % Set, Log, Info, 0	; Подсказка при клике.
IniRead, X, % Set, Position, Pos_X, 200		; X - позиция начала.
IniRead, Y, % Set, Position, Pos_Y, 200		; Y - позиция начала.
IniRead, W, % Set, Position, Width, 550		; Ширина (X + это значение).
IniRead, H, % Set, Position, Height, 250	; Высота (Y + это значение).

If Info
 Menu, Tray, Check, Показывать кол-во


If !App1
 App1 = % TextNo
If !App2
 App2 = % TextNo

GroupAdd, KeyGroup, % App1
GroupAdd, KeyGroup, % App2

Text0 = Gui Key log
Help = Можно указать два окна для подсчёта кликов`nДля определения нового окна просто кликнете в нём.`nЗатем скопируйте появившийся текст в 3 форме и вставьте его в одну из форм заполнения выше.`nЧто бы заработали изменения - перезапустить программу.`nКлавиша Pause - для паузы в определении окна (пока активно это окно).`n09-11.09.2020 __Михаил__`nhttp://forum.script-coding.com/viewforum.php?id=13


;Коррекция Gui окна:
Xcorr := 0
Ycorr := 0
Wcorr := 7
Hcorr := 7
Return



#IfWinActive, Ahk_Group KeyGroup

~vk1::	; 'Скрытый' перехват левой кнопки мыши.
If F2S
 Return

MouseGetPos, X_pos, Y_pos	; Текущая позиция курсора.
If (X_pos >= X) and (Y_pos >= Y) and (X_pos <= X+W) and (Y_pos <= Y+H)	; Магия определения.
 {
  History++
  If Info
   Tool("Нажатие № " History)
 }
Return

#If


Get:
Sleep, 100
MouseGetPos,,,id
WinGetClass, Class, ahk_id %id%
WinGetTitle, Title, ahk_id %id%
WinGet, Exe, ProcessName, ahk_id %id%

If (Title = Text0)
 Return
Text = %Title%     ahk_class %Class%     ahk_exe %Exe%
GuiControl,, % hText3, % Text
Return

Pause:
KeyWait, %A_ThisHotkey%, U
If (F2S = 1)
{
 Tool("Пауза снята.`nКлик для определения окна.",5000)
 Try
  Hotkey, ~vk1, On
 F2S = 2
}
Else
{
 Tool("Пауза в определении окна.`nНажмите Pause повторно чтобы снять её.",5000)
 Try
  Hotkey, ~vk1, Off
 F2S = 1
}
Return

Закрыть:
KeyWait, %A_ThisHotkey%, U
Try
{
 Hotkey, ~vk1, Off
 Hotkey, Pause, Off
}
GoSub, GetSet
F2S := 0
Return


GetSet:
If (F2S < 1)
 Return
Gui, Submit
WinGetPos,X0,Y0,W0,H0, %Text0% ahk_class AutoHotkeyGUI
X := (X0-Xcorr)
Y := (Y0-Ycorr)
W := (W0-Wcorr)
H := (H0-Hcorr)
Gui, Destroy
Return


Open:
KeyWait, %A_ThisHotkey%, U
If (F2S > 0)
 GoTo, Закрыть
F2S = 1

Gui, +LastFound +AlwaysOnTop
Gui, -Caption +LastFound +AlwaysOnTop -SysMenu +ToolWindow +Resize +MinSize20x20
Gui, Color, 354EA3

Gui, Add, Text, W999, Название 1 окна:`t`tКликов: %History%
Gui, Add, Edit, HWNDhText1 w9999 r1 vApp1, % App1
Gui, Add, Text, W200, Название 2 окна:
Gui, Add, Edit, HWNDhText2 w9999 r1 vApp2, % App2
Gui, Add, Text, W999, Текущий клик в окне: (Титул, Класс, *.Exe)
Gui, Add, Edit, HWNDhText3 w600 vApp3, (Нажмите на нужное окно)

Gui, Add, Text, W999, % Help

X0 := X-Xcorr
Y0 := Y-Ycorr
W0 := W-Wcorr
H0 := H-Hcorr


Try
 Gui, Show, NoActivate x%X0% y%Y0% w%W0% h%H0%, % Text0
Catch	; При ошибках:
{
 ToolTip, Ошибка данных:`nx%X0% y%Y0% w%W0% h%H0%,0,0
 X := 100
 Y := 100
 W := 100
 H := 100
 Sleep, 2000
 GoSub, Open
 ToolTip
 Return
}

Trans = 230	; Прозрачность GUI окна
WinSet, Transparent, %Trans%

Hotkey, ~vk1, Get
Hotkey, ~vk1, On
Hotkey, Pause, Pause
Hotkey, Pause, On
Return


GuiSize:
If ErrorLevel = 1
 Return
WinGetPos,,,W0
Loop, 3
 GuiControl, Move, % hText%A_Index%, % "W" . (W0 - 33)
Return




;05:44 19.07.2020	ToolTip на время:
; Wait = таймер если != 0, иначе ожидает отжатия клавиши.

Tool(Text, Wait := 1000, X := -1, Y := -1)
{
 If (X+Y < 1)
  ToolTip, % Text
 Else
  ToolTip, % Text, %X%, %Y%

 If !(Wait = 0)
  SetTimer, T_Off, % Wait
 Else
 {
  SetTimer, T_Off, Off
  KeyWait, %A_ThisHotkey%, U
  ToolTip
 }
 Return
}


T_Off:
SetTimer, T_Off, Off
ToolTip
Return


Exit:
GoSub, Save
ExitApp	; Вырубить скрипт.
Return

Slear:
History := 0
Return

Exit2:
GoSub, Save
Reload
Return

Save:
GoSub, GetSet
IniWrite, % History, % Set, Log, History
If !(App1 = TextNo)
 IniWrite, % App1, % Set, Log, App1
If !(App2 = TextNo)
 IniWrite, % App2, % Set, Log, App2
IniWrite, % Info, % Set, Log, Info
If X
{
 IniWrite, % X, % Set, Position, Pos_X
 IniWrite, % Y, % Set, Position, Pos_Y
 IniWrite, % W, % Set, Position, Width
 IniWrite, % H, % Set, Position, Height
}
Return

Clicker:
If Info
 Info = 0
Else
 Info = 1
Menu, Tray, ToggleCheck, Показывать кол-во
Return



Help:
MouseMove, X+W-10,Y+H-10, 10
If F2S < 1
 GoSub, Open
ToolTip, <-- Это окно для настройки программы.`nОткрыть его можно кликнув на иконку в трее.
Sleep, 10000

ToolTip, -Определяет до двух окон.`n-Позиция настраивается изменением размеров этого окна.
Sleep, 10000

ToolTip, -Для применения изменений - нужен перезапуск программы.`n-Для отключения определения - стереть текст в форме.
Sleep, 10000

ToolTip, -Клики можно посмотреть в первой строчке (сейчас их %History%)`n-Очистить можно выбрав пункт в менюшке.
Sleep, 10000
ToolTip
Return

12

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

Управление: Запускаем скрипт, по умолчанию окошко не видно, чтобы настроить нажимаем на иконку в трее (один клик).
В первой строчке будет по умолчанию значение 'ahk_exe chrome.exe' - это определение по *.exe. Думаю так проще будет.
Можно вписывать название окна (полное соответствие или частичное - метод поиска указан частичный). При частичном соответствии желательно указать ещё один метод фильтрации окна - например его класс или тот же *.exe.
Определить все 3 метода определения нужного окна можно 'не отходя от кассы' через саму программку - активация окошка через трей, затем кликнуть Левой Кнопкой Мыши (ЛКМ) в нужном окне. Надпись в нижней строчке в окне будет изменено.
Для того чтобы приостановить определение окна я добавил горячую клавишу Pause, нажав на неё можно заниматься своими кликами дальше а позднее зайти в окошко программы и скопировать нужные данные и вставить в одну из форм заполнения (хз как их назвать правильнее).
Область, в которой будет определение клика можно менять самим окном - через перемещение за края окна. Коррекция может работать немного не точно, поэтому нужно будет проверить - определяет ли программа клик в области верно, затем можно отключить появляющуюся подсказку через тот же трей.
После изменения настроек окон, в которых нужно определять клики ЛКМ - перезапустить программу (иначе не пашет). Для этого есть соответствующий пункт всё в том же меню в трее.
Там же (в менюшке) есть кнопка очистить историю - Сбросить счётчик.

Вроде всё. Может чего потом ещё добавлю...

13

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

__Михаил__ ОООгромное СПАСИБО!
Щя буду разбираться

14 (изменено: Jack, 2020-09-12 10:27:22)

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

__Михаил__ у меня вместо текста пишет какие то кракозябры. Я так понимаю у меня нет этого шрифта?
https://skr.sh/s47tamVO5Za
https://skr.sh/s47KETUos19
Установил стандартные шрифты для 10ки, не помогло
Методом тыка так счетчик и не запустил

15 (изменено: __Михаил__, 2020-09-12 18:49:25)

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

Jack

Что за версия AHK? Уникод или Анси?

При подобном нашёл лишь такое:

Советую обновиться до AutoHotkey_L Unicode. Скрипт сохранить в UTF-8

Шрифт не указан, используется всё стандартное.

После запуска инсталятора выбираем Unicode версию программы, иначе получим иероглифы вместо русских букв. Лучше выбрать разрядность, соответствующую вашей ОС. Но стоит помнить что скрипты, скомпилированные x64 версией не запустятся на 32-разрядных ОС.

16

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

__Михаил__ да, СПАСИБО, всё заработало как нужно! Еще раз, огромное спасибо за проделанную вами работу!

17

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

__Михаил__ когда я компилирую файл, exe-шник выдает опять кракозябры. Но сам файл ahk работает нормально.
Пожалуйста, можете скомпилировать файл, чтобы он работал и на 64 и на 32 битной системе. Я проковырялся весь вечер, но так и не понял в чем моя проблема. За ранее спасибо за ваши труды, вы мне очень помогли!

18 (изменено: __Михаил__, 2020-09-13 04:30:00)

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

Jack

Дело в неверном использовании программы с вашей стороны, не думаю, что скомпилировать с моего компа поможет.

Вот ссылка на архив.

19

Re: AHK: Счетчик кликов клавишей мыши в определенной области экрана

__Михаил__ Спасибо!!! Ваш файл работает отлично. Видимо я с программой чет не допонял.