Тема: AHK: Клик по программе в панели задач
Здравствуйте. Помогите в создании AHK для клика по программе с определённым именем (например AkelPad) на панели задач. Спасибо.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Здравствуйте. Помогите в создании AHK для клика по программе с определённым именем (например AkelPad) на панели задач. Спасибо.
Рискну предположить, что конечной целью являются манипуляции с окном свернуть/развернуть. В таком случае в AutoHotkey предусмотрены более простые и надёжные команды, чем непосредственно щелки по кнопкам в панели задач: WinMaximize, WinMinimize, WinRestore.
ImageSearch.
ypppu, не всё так просто. Программа, для которой нужен AHK, запускается в нужном мне виде только кликом из панели задач.
Так:
#NoEnv
#WinActivateForce
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
CoordMode, Mouse
SendMode Input
SetTitleMatchMode 2
SetControlDelay 1
SetWinDelay 0
SetKeyDelay -1
SetMouseDelay -1
SetBatchLines -1
array := ["C:\Users\Azbooka_2\Pictures\Pictures.PNG"] ; тут добавляешь свой путь к скриншоту
Loop % Array.MaxIndex()
{
MouseGetPos, xpos, ypos
CoordMode, Pixel
ImageSearch, x, y, 0, 0, A_ScreenWidth, A_ScreenHeight, % array [A_Index]
If ErrorLevel = 0
Click %x%, %y%
MouseMove, xpos, ypos
if ErrorLevel = 0
ExitApp
}
return
Программа, для которой нужен AHK, запускается в нужном мне виде только кликом из панели задач.
А что происходит при WinRestore?
ImageSearch в данном случае использовать непрактично.
Что же такого в этом способе нереального? Ведь вроде нужен просто клик, а не свернуть/развернуть окно.
Я не знаю ни одной программы, которая при одиночном клике не разворачивается.
Можно так попробовать:
PostMessage, 0x112, 0xF120,,, WinTitle, WinText ; 0x112 = WM_SYSCOMMAND, 0xF120 = SC_RESTORE
svoboden, спасибо. Работает. Malcev, в exe программы такое:
object fmMain: TfmMain
Left = 580
Top = 0
Caption = 'Program'
ClientHeight = 826
ClientWidth = 1012
Color = clBtnFace
Constraints.MinHeight = 500
Constraints.MinWidth = 700
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Menu = MainMenu
OldCreateOrder = False
Position = poDesigned
WindowState = wsMaximized
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
Пока не заменишь WindowState = wsMaximized на Minimized (запуск свёрнутым) не даёт сделать ClientWidth (ширину) менее 1024. А мне нужно 1012.
Кстати интересно, как получить координаты таба на таскбаре по хэндлу окна.
В ITaskbarList интерфейсе вроде нет такого. Но например с его помощью можно отметить нужный активным.
hwnd := WinExist("ahk_class CalcFrame ahk_exe calc.exe")
DummyActivateTab(hwnd)
Return
DummyActivateTab(Hwnd) {
IID_ITaskbarList := "{56FDF342-FD6D-11d0-958A-006097C9A090}"
CLSID_TaskbarList := "{56FDF344-FD6D-11d0-958A-006097C9A090}"
tbl := ComObjCreate(CLSID_TaskbarList, IID_ITaskbarList)
DLLVar := NumGet(NumGet(tbl+0), 3 * A_PtrSize) ; HrInit
DllCall(DLLVar, "ptr", tbl)
DLLVar := NumGet(NumGet(tbl+0), 6 * A_PtrSize) ; ActivateTab
DllCall(DLLVar, "ptr", tbl, "ptr", Hwnd)
ObjRelease(tbl)
}
Через Accessible можно. В смысле, не по хэндлу, а по тексту, как нужно ТС.
Наверное можно и без Accessible.
http://w-shadow.com/blog/2006/10/01/man … ar-buttons
Но у меня перевести этот алгоритм на ahk не получилось.
p.polena, я так и не понял, что у вас происходит по клику по минимизированному окну и почему вы не можете заменить этот клик на код из 8 поста?
Что за программа, если не секрет?
Наверное можно и без Accessible.
http://w-shadow.com/blog/2006/10/01/man … ar-buttons
Но у меня перевести этот алгоритм на ahk не получилось.
Начало прочитай:
Most information given here is applicable only to Windows XP
Читал.
Поэтому и написал - "Наверное можно".
Правда, дальше получения хендла окна с иконками программ у меня не пошло:
taskmsn := dllcall("GetTaskmanWindow")
В конце-концов если есть твикер, то почему такое же нельзя написать и на автохотки?
http://rammichael.com/7-taskbar-tweaker
А там разве можно координаты кнопки получить?
Пока не заменишь WindowState = wsMaximized на Minimized (запуск свёрнутым) не даёт сделать ClientWidth (ширину) менее 1024. А мне нужно 1012.
Свойства окна тоже стандартными командами меняются.
p.polena, я так и не понял, что у вас происходит по клику по минимизированному окну и почему вы не можете заменить этот клик на код из 8 поста?
Malcev, действительно ваш код практичней. И главное, что нет зависимости от скриншота.
Спасибо всем!
А там разве можно координаты кнопки получить?
Про координаты ничего не написано, но количество кнопок, их очередность и хендлы судя по апи можно:
https://gist.github.com/RaMMicHaeL/847458fcc75de83b36ed
Наверное есть какие-то недокумментированные возможности типа этого:
WinHide, % "ahk_id " DllCall("GetTaskmanWindow")
sleep 2000
WinShow, % "ahk_id " DllCall("GetTaskmanWindow")
В конце-концов если есть твикер, то почему такое же нельзя написать и на автохотки?
http://rammichael.com/7-taskbar-tweaker
Походив по ссылкам вроде бы сюда приводит.
Может проще у автора спросить об алгоритме?
Кстати, он русскоязычный.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться