Всем привет!
Хочу предложить мою версию копирования вставки одной кнопкой.
Копирование или вставка происходит при кликании средней кнопкой мышкой внутри любого окна, быстрое нажатие посылает ctrl + C, а удержание ср.кнопки в течении некоторого времени посылает ctrl + V
Но это только часть задумки, можно запрограммировать разные действия кликая мышкой по разным элементам окна (заголовок, кнопки свернуть/развернуть и границы окна)..
Буду рад если кому то пригодится или кто то предложит более правильный и эффективный код
#Persistent ;
WM_NCHITTEST(){ ;Функция используется для определения области, над которой находится указатель.
CoordMode, Mouse, Screen ;Влияет на MouseGetPos.Координаты будут относительно экрана.
MouseGetPos, x, y, z ; x-y определение позиции курсора. z hwnd окна над которым находится курсор.
SendMessage, 0x84, 0, (x&0xFFFF)|(y&0xFFFF)<<16,, ahk_id %z% ; Отправляет сообщение WM_NCHITTEST окну который находится по курсором.
Return Errorlevel ; Ответ функции равен ответу оконного сообщения.
}
MyLabel: ; Метка начало цикла
MyNumber := WM_NCHITTEST()
if GetKeyState("RButton") ;Если нажата правая кн.мышки
{
mb:=0
if rb=0 ; это первое нажатие?
{
rb:=1 ; устанавливаем флаг чтобы небыло множественных срабатываний
if MyNumber=8 ; курсор на кнопке сворачивания окна
{
WinSet, AlwaysOnTop, Off, A ; отключить окно Поверх всех окон.
WinSet, Transparent, 255, A ; Сделать окно видимым.
}
if MyNumber=9 ; курсор на кнопке разворачивания окна в полный экран
{
WinSet, Transparent, 200, A ; Сделать окно слегка прозрачным.
WinSet, AlwaysOnTop, On, A ; Сделать окно Поверх всех окон.
}
}
}
else
{
if GetKeyState("MButton")
{
rb:=0
if mb=0 ;это первое нажатие?
{
mb:=1 ;флаг что средняя кн уже нажата
if MyNumber=1 ; курсор в клиентской области окна
{
time:=0
while GetKeyState("MButton") ;Цикл выполняется пока нажата кнопка
{
Sleep, 50
time:=time+1
if time > 10 ;Ели длительное нажатие
{
SoundBeep, 900, 50
Send, ^{vk56} ; Ctrl-V вставка из буфера
Goto, MyLabel ; и выходим из цикла
}
}
SoundBeep, 500, 50
Send, ^{vk43} ; Ctrl-C копирование в буфер
}
}
}
else
{
mb:=0
rb:=0
}
}
Sleep, 100 ; Ждем 1/10 секунды
Goto, MyLabel ; Переход к Метке MyLabel