1

Тема: AHK: Эмуляция нажатия левой кнопки мыши, без помощи курсора, возможно?

Добрый вечер уважаемые!

Написал код :

F1::
Click
{
  Sleep 1000
}
GoTo, F1

Return

F2::                 
  If not Stop
  {
    Stop := True
    Pause
  }
Return

F3::                 
  If Stop
  {
    Stop := False
    Pause
  }
Return

Суть я думаю вам понятна, при нажатии на F1, запускает нажатие левой клавиши мышки, под местом где находится курсор, циклически с интервалом 1 секунда, F2 пауза, F3 продолжить.

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

Может есть команда которая не трогает мышку, а просто отсылает в окно информацию о клике?


3.ы Заранее спасибо за ответы, извиняюсь, если не внятно изложил суть своего вопроса.

2

Re: AHK: Эмуляция нажатия левой кнопки мыши, без помощи курсора, возможно?

s1t пишет:

Может есть команда которая не трогает мышку, а просто отсылает в окно информацию о клике?

Есть - ControlClick. Вот пример, где я кликаю по контролам отвечающим за масштаб:

#NoTrayIcon
Run, % "C:\Program Files"
       . "\Windows NT"
       . "\Accessories"
       . "\wordpad.exe",,, WinPID
Sleep, 250
BlockInput, On
ControlSend, RICHEDIT50W1, % A_Hour ":"A_Min "."A_Sec ; ввод информации
. "`n"A_DD "."A_MM "."A_YYYY, % "ahk_pid"WinPID ; для наглядности
ControlClick, Button2, % "ahk_pid"WinPID,,, 21 ; эмуляция клика на +
SetKeyDelay, 150, 50
ControlSend, RICHEDIT50W1
           , % "`n`nбыло введено системное время и дата"
           . "`nи 20ть раз кликнут контрол увеличить масштаб ({+})"
           , % "ahk_pid"WinPID
Sleep, 1500
ControlClick, Button1, % "ahk_pid"WinPID,,, 21 ; эмуляция клика на -
ControlSend, RICHEDIT50W1
           , % "`n`nпотом 20ть раз кликнут контрол уменьшить масштаб ({-})"
           . "`n`nсейчас приложение будет закрыто"
           . "`nF5 - повторить (ожидание 2.5сек.)"
           , % "ahk_pid"WinPID
BlockInput, Off
Sleep, 2500
If IsReload
{
   CloseApp()
   Reload
}
CloseApp()
ExitApp

F5::IsReload:=True

CloseApp()
{
   global WinPID
   BlockInput, On
   WinKill, % "ahk_pid"WinPID
   ControlClick, Button2, ahk_class #32770,,, 2
   BlockInput, Off
}

3

Re: AHK: Эмуляция нажатия левой кнопки мыши, без помощи курсора, возможно?

F1::
ControlClick, x33 y70, ahk_class tSkMainForm
{
  Sleep 1000
}
GoTo, F1

Return

F2::                 
  If not Stop
  {
    Stop := True
    Pause
  }
Return

F3::                 
  If Stop
  {
    Stop := False
    Pause
  }
Return

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

Заранее спасибо за ответы.

4

Re: AHK: Эмуляция нажатия левой кнопки мыши, без помощи курсора, возможно?

CoordMode
MouseGetPos
Expressions
И просто уместные ссылки:
Built-in Variables
Threads
AutoHotkey Translation
AHK-L Docs

5

Re: AHK: Эмуляция нажатия левой кнопки мыши, без помощи курсора, возможно?

F1::
   SetTimer, Action, % (IsIdle:=!IsIdle) ? 1000:"Off"
   TrayTip,, % "Timer state: "(IsIdle ? "On":"Off")
   Counter:=0
   Return

F2::Pause

Action:
   Counter++
   If Counter=1
      MouseGetPos, xPos, yPos, hWnd
   ControlClick, % "x"xPos " y"yPos, % "ahk_id"hWnd,,,, Pos
   Return

6

Re: AHK: Эмуляция нажатия левой кнопки мыши, без помощи курсора, возможно?

s1t пишет:

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

Grey, в твоем варианте активное окно постоянно теряет фокус во время ControlClick, вряд ли что-то с этим можно сделать, но можно хотя бы возвращать его, например так:

F1::
   SetTimer, Action, % (IsIdle:=!IsIdle) ? 1000:"Off"
   TrayTip,, % "Timer state: "(IsIdle ? "On":"Off")
   Counter:=0
   Return
 
F2::Pause
 
Action:
   Counter++
   If Counter=1
      MouseGetPos, xPos, yPos, hWnd
   WinExist("A")
   ControlClick, % "x"xPos " y"yPos, % "ahk_id"hWnd,,,, Pos
   WinActivate
   Return

Кто-нибудь знает, как сделать, чтоб окно браузера не становилось активным совсем?

7

Re: AHK: Эмуляция нажатия левой кнопки мыши, без помощи курсора, возможно?

А у меня не теряет
Но всё же цитата:

2) Specify the string NA anywhere in the sixth parameter (Options) as shown below:
SetControlDelay -1
ControlClick, Toolbar321, WinTitle,,,, NA

"NA" avoids marking the target window as active and avoids merging its input processing with that of the script, which may prevent physical movement of the mouse from interfering (but usually only when the target window is not active). However, this method might not work for all types of windows and controls.

8

Re: AHK: Эмуляция нажатия левой кнопки мыши, без помощи курсора, возможно?

creature.ws, забавно , НО у меня тоже окно не теряет фокус, если активное и "кликабельное" окна являются : блокнотом, медиаплеером, Оперой, Notepad++, Тотал Коммандером, окном проводника -
во всевозможных сочетаниях, за исключением, если клик происходит в Опере, а активен Тотал. Или наоборот. Тут между ними начинается "война", уж не знаю почему.
А теперь догадайся, какие же окна из всех возможных я случайно выбрал для проверки скрипта

9

Re: AHK: Эмуляция нажатия левой кнопки мыши, без помощи курсора, возможно?

Спасибо всем кто ответил