1 (изменено: D@rkSIDeR008, 2023-08-02 12:54:32)

Тема: AHK: Нажатие на элемент окна

Есть обычное окно "Сохранения", в нем есть кнопка "Создать папку" и хочу что бы скрипт нажимал на нее.
Я попробовал несколько способов:
1-ый способ, я просто сделал нажатие ПКМ и потом нажать "Создать папку" в меню.


ControlClick,  x400  y50, ahk_class #32770, right
Sleep, 200
Send, {TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}
Sleep, 100
Send, {Rigt}
Sleep, 100
Send, {Enter}

Но этот способ не понравился.

Потом попробовал способ TAB ом прокликать до нужного элемента окна:


Send, {TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}
Sleep, 100
Send, {Rigt}
Sleep, 100
Send, {Enter}

Но этот способ глючит, иногда нажимает не в тот элемент окна.

Через AhkSpy видна эта кнопка и текст на ней он видит "Создать папку".
Возможно ли как то нажать на прямую на кнопку?

2 (изменено: Foma, 2023-08-02 12:30:37)

Re: AHK: Нажатие на элемент окна

У "ControlClick" есть возможность нажимать на конкретный элемент окна. Если кнопка "Создать папку" определяется через AhkSpy, то её значение и надо вписать в ControlClick.
Точку в названии темы уберите, а то нагорит. )

3 (изменено: D@rkSIDeR008, 2023-08-02 13:29:55)

Re: AHK: Нажатие на элемент окна

Через ControlClick работает если элемент есть в Windows Text, а в AhkSpy отображается в другом поле и поэтому не работает, я просто использую не стандартный Spy а AhkSpy.ahk.

4 (изменено: D@rkSIDeR008, 2023-08-02 13:47:22)

Re: AHK: Нажатие на элемент окна

Не разобрался как скрин отправить.
Отправляю текстом, то что выдает AhkSpy.ahk.

 ( Mouse )  pause 
Screen:  x206 y170  ▪  Window:  x206 y82  ▪  Client:  x198 y51  ▪   control click 
Relative window:  0.3016, 0.1712  for w683 h479  ▪  Relative client:  0.2969, 0.1159  for w667 h440
Relative active window:  x-25 y-120  ▪  class TaskSwitcherWnd exe Explorer.EXE hwnd 0x201ec
 ( PixelColor ) 
RGB:  0x663977  ▪  #663977  ▪  BGR:  0x773966  ▪  #773966  ▪  Invert RGB:  0x99C688  ▪  #99C688  ▪            
 ( Window )  flash 
ahk_class #32770 ahk_exe chrome.exe ahk_id 0x2f03d6 ahk_pid 4900  ▪  Create info time:  15:46:11.148
Cursor:  Arrow  ▪  Caret position undefined  ▪  Client area:  x8 y31 w667 h440  ▪  WM_NCHITTEST:  HTCLIENT := 1
Focus control:  
 ( Control )  flash  open as window 
ClassNN:  DirectUIHWND1  ▪  Class:  DirectUIHWND
HWND:  0x2a04ae  ▪  Style:  0x56000000  ▪  ExStyle:  0x00010000  ▪   show styles   ▪   update styles 
 show / hide   ▪   close   ▪   View to tree   ▪   Get child   ▪   Get parent   ▪  Parent control:  DUIViewWndClassName  ▪  0x1f054c
 ( Position ) 
Pos:  x8 y68  ▪  x²674 y²418  ▪  Size:  w667 h351
Relative client area:  x0 y37  ▪  x²666 y²387  ▪  Relative screen:  x8 y156  ▪  x²674 y²506
Mouse relative control:  x198 y14  ▪  0.2969, 0.0399  ▪  Relative parent:  x0 y0  ▪  DUIViewWndClassName  ▪   flash  > 
 ( Accessible )  flash 
Type:  Real Object  ▪  Id:  0  ▪   Get path   ▪   DoDefaultAction 
 ( Position relative ) 
Screen: x127 y158  ▪  x²234 y²183  ▪  Size: w108 h26  ▪  Mouse: x79 y12
Window: x127 y70  ▪  x²234 y²95  ▪  Client: x119 y39  ▪  x²226 y²64  ▪  Control: x119 y2  ▪  x²226 y²27
 ( Name )  copy 
Создать папку
 ( State: 0x00000000 ) 
обычный  ▪  0x00000000

 ( Role ) 
кнопка  ▪  code: 43
 ( Action ) 
Click  ▪   Execute 
 ( Description ) 
Создание папки.
 ( Focus - Role ) 
неизвестный объект  ▪  code: 9

5

Re: AHK: Нажатие на элемент окна

При помощи команды ControlGetText можно в окне целевой программы перебрать все элементы управления, определив таким образом Control Hwnd того самого элемента который содержит надпись "Создать папку". Когда узнаете Control Hwnd, сможете посылать в этот элемент щелчок мыши.

6

Re: AHK: Нажатие на элемент окна

ypppu
В этом случае не так. ControlClick только поставит фокус, а вот ControlSend, DirectUIHWND1, {Space} запустит.

D@rkSIDeR008
AhkSpy может нажать с помощью DoDefaultAction, но тут вам придётся во многом разобраться.
Думаю ControlClick и ControlSend самый простой вариант, если кнопка всегда находится в одних и тех же координатах, в данном случае вроде так и есть.

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

7

Re: AHK: Нажатие на элемент окна

Ну я так и написал, просто кликая по координатам, я просто думал можно как то по всем элементам кликать, но видимо не по всем.
Вышло вот так, не знаю правильно ли я пишу вообще, но он работает.

#SingleInstance
#Warn
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%

Process, Close, AutoHotkey.exe
Process, Close, AutoHotkey.exe


PID:=DllCall("GetCurrentProcessId")
query:="SELECT Handle FROM Win32_Process WHERE Caption='AutoHotkey.exe'"

If (oWMI:=ComObjGet("winmgmts:").ExecQuery(query)).Count>1
   For colItem In oWMI
      If colItem.Handle!=PID
         colItem.Terminate()



Sleep, 200

CapsLock::

Q1 := ClipboardAll
Sleep, 200

WinActivate, ahk_class Chrome_WidgetWin_1
Sleep, 350
  SendMessage, 0x50,, 0x4090409,, A ; английский
Sleep, 200
Click right
Sleep, 100
SetCapsLockState, off
Sleep, 100
ControlSend,, {Down}{Down}, ahk_class Chrome_WidgetWin_1
Sleep, 200
ControlSend,, {Enter}, ahk_class Chrome_WidgetWin_1
Sleep, 200
WinWait, ahk_class #32770,
IfWinNotActive, ahk_class #32770, , WinActivate, ahk_class #32770,
WinWaitActive, ahk_class #32770,
Sleep, 200
  SendMessage, 0x50,, 0x4090409,, A ; английский
Sleep, 300
ControlSend,, {CTRLDOWN}c{CTRLUP}, ahk_class #32770
Sleep, 200
Q2 := ClipboardAll
Sleep, 200
DOWNLOAD:= "C:\Users\User\Downloads\"
Clipboard:= DOWNLOAD
Sleep, 200
ControlSend,, {CTRLDOWN}v{CTRLUP}, ahk_class #32770
Sleep, 500
Send, {Enter}
Sleep, 200
ControlClick, x206 y82, ahk_class #32770
Sleep, 100
Send, {Space}
Sleep, 200
Clipboard:= Q1
Sleep, 500
Send, {CTRLDOWN}v{CTRLUP}
Sleep, 500
Send, {Enter}
Sleep, 200

IfWinActive, переименование
{
   Sleep, 300
   ControlSend,, {Enter}, переименование
   Sleep, 650
}

IfWinActive, Подтверждение замены папки
{
   Sleep, 300
   Send, {Enter}
   Sleep, 650
}

Send, {Enter}
Sleep, 200
ControlClick, x261 y373, Сохранение
Sleep, 200
Send, {CTRLDAWN}a{CTRLUP}
Sleep, 300
Clipboard:= Q2
Sleep, 500
Send, {CTRLDOWN}v{CTRLUP}
Sleep, 500

WinActivate, ahk_class #32770
Sleep, 200
MouseClick, right,  378,  47
Sleep, 200
Send, {Down}{Down}{Enter}
Sleep, 200
Send, {Tab}
Sleep, 100
Send, {Tab}
Sleep, 500
FolderPath := Trim(Clipboard)
Sleep, 500

ControlClick, Со&хранить, ahk_class #32770
Send, {Space}
Sleep, 500

Run, explorer.exe "%FolderPath%"
Sleep, 450
Send, {Backspace}
Sleep, 450
Send, {CTRLDOWN}c{CTRLUP}
Sleep, 300
WinClose, Загрузки
Sleep, 400
WinActivate, ahk_class RAIL_WINDOW
Sleep, 500
ControlClick, x102 y260, ahk_class RAIL_WINDOW
Sleep, 350
WinWait, Выберите файл с изображением (удаленный),
IfWinNotActive, Выберите файл с изображением (удаленный), , WinActivate, Выберите файл с изображением (удаленный),
WinWaitActive, Выберите файл с изображением (удаленный),
Sleep, 200
Folder1C:= "C:\Users\UserTz7\Documents\"
Sleep, 200
Send, %Folder1C%
Sleep, 100
Send, {Enter}
Sleep, 200
ControlClick, x519 y236, Выберите файл с изображением (удаленный)
Sleep, 200
Send, {CTRLDOWN}v{CTRLUP}
Sleep, 500
Send, {Enter}
Sleep, 200
Send, {Right}
Sleep, 100
Send, {Enter}
Sleep, 350

Clipboard:= Q1
Sleep, 200
Send, {CTRLDOWN}v{CTRLUP}
Sleep, 200
Send, {CTRLDOWN}{Enter}{CTRLUP}
Sleep, 400
Send, {CTRLDOWN}{Enter}{CTRLUP}

8

Re: AHK: Нажатие на элемент окна

А на фига тогда все эти нажатия, если можно просто папку создать?

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

9 (изменено: D@rkSIDeR008, 2023-08-03 13:59:39)

Re: AHK: Нажатие на элемент окна

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