1 (изменено: Ядрён, 2015-08-02 02:19:35)

Тема: AHK: Копирование и вставка текста одной кнопкой

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

vk5B:: ; "LWIN"
SendInput, ^{vk2D} ; "ctrl" "insert"  копировать
ClipWait
if (A_PriorHotkey <> "vk5B " or A_TimeSincePriorHotkey > 750)
KeyWait, vkA2 vk2D  ; "ctrl" "insert"  копировать
SendInput, ^{vk56} ; "ctrl" "v"  вставить
SoundBeep, 50 , 50
return
+ открыть спойлер

Уважаемый ypppu , теперь тема оформлена грамотно? Глаз не режет ))

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

2

Re: AHK: Копирование и вставка текста одной кнопкой

Предложу указывать в комментариях, что означают виртуальные коды.

3 (изменено: yalanne, 2015-08-01 22:11:11)

Re: AHK: Копирование и вставка текста одной кнопкой

lwin::
keywait lwin
p:=0
loop 20
 if GetKeyState("Lwin","p") and (p:=1)
    break
else
    sleep 10
send % "^{SC02" ((p)? "F" : "E") "}"
tooltip % "Текст " ((p)? "вставлен." : "скопирован.")
keywait lwin
+ с коментами
lwin:: ;нажимаем и ждем отжатия кнопки
keywait lwin
p:=0 ; сбрасываем предыдущий результат.
loop 20 ;ждем 200мс если в течении этого времени повторно нажата клавиша, то добовляем +1 в переменную и остонавливаем цикл.
 if GetKeyState("Lwin","p") and (p:=1)
    break
else
    sleep 10
send % "^{SC02" ((p)? "F" : "E") "}" ;нажимает клавишу по сканкоду. если переменная равна 0 то скан код будет SC02E(c) иначе SC02F(v)
tooltip % "Текст " ((p)? "вставлен." : "скопирован.") ; показываем статус скрипта.
keywait lwin ; ожидаем второе отжатие.

Ну вот копирование вставка одной кнопкой(lwin):
один клик скопировать.
два клика вставить.

4

Re: AHK: Копирование и вставка текста одной кнопкой

Предлагаю повысить грамотность первого сообщения. Походит на потоки сознания.

5

Re: AHK: Копирование и вставка текста одной кнопкой

Думаю так проще.

LWin::  
    KeyWait, %A_ThisHotkey% 
    KeyWait, %A_ThisHotkey%, D T0.2 
    Send % "{LCtrl Down}{" ((Copy := ErrorLevel) ? "vk43" : "vk56") "}{LCtrl Up}"  ; vk43 = C, vk56 = V
    Tooltip % "Текст " (Copy ? "скопирован." : "вставлен.")  
    Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6 (изменено: Ядрён, 2015-08-02 02:20:36)

Re: AHK: Копирование и вставка текста одной кнопкой

Оба скрипта работают не стабильно, приходится нажимать кнопку "LWin" то 2 то 3 раза . Но нет худа без добра по совету модератора ypppu я начал переоформление темы заново и заодно переделал свой скрипт , как показывает практика скрипт работает адекватно везде. Большое спасибо за то что откликнулись yalanne и serzh82saratov . Отдельное спасибо ypppu .

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

7 (изменено: yalanne, 2015-08-02 12:46:08)

Re: AHK: Копирование и вставка текста одной кнопкой

Ядрён пишет:

Оба скрипта работают не стабильно

Они работают стабильно просто немного по другому в отличии от вашего.

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

А в сообщениях 5 и 3 логика одинакова, просто мой скрипт реализован чуток сложнее. По нажатию lwin скрипт сразу же начинает ждать отжатия клавиши, затем в течении 200мс ожидается второе нажатие, если его нет то ErrorLevel(p в моем случае) = 1, а если есть 0. При 1 нажимается ctrl + c и выводит сообщение то что текст скопирован. При 0 нажимается ctrl + v и выводит сообщение то что текст вставлен.
То есть для вставки надо нажать быстро lwin 2 раза(с такой же скоростью к примеру как левой кнопкой открываете папку)
А для копирования 1 раз lwin.
Скрипт сделает одно действие в зависимости как нажали, а в вашем же сделает хоть как 2.

p.s я даже и не знал что ctrl+ins это то же самое что и ctrl+c.

8 (изменено: ypppu, 2015-08-02 13:35:52)

Re: AHK: Копирование и вставка текста одной кнопкой

В первом сообщении не понятно назначение многих строк. По-моему всё то же самое делает такой скрипт:

vk5B:: SendInput, ^{vk2D}^{vk56}

OFF:
Shift+Ins это то же, что и Ctrl+V. Вроде эти сочетания клавиш пришли к нам из старых программ, существовавших ещё до Windows.

9

Re: AHK: Копирование и вставка текста одной кнопкой

А Shift-Del = Ctrl-X.

10

Re: AHK: Копирование и вставка текста одной кнопкой

yalanne пишет:

Они работают стабильно просто немного по другому в отличии от вашего.

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


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

+ открыть спойлер

Извините если кого обидел

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

11

Re: AHK: Копирование и вставка текста одной кнопкой

Всем привет!
Хочу предложить мою версию копирования вставки одной кнопкой.
Копирование или вставка происходит при кликании средней кнопкой мышкой внутри любого окна, быстрое нажатие посылает 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

12

Re: AHK: Копирование и вставка текста одной кнопкой

Доброго времени суток. Последний скрипт из #11 поста мне очень понравился, он копирует вставляет одной кнопкой только текст , а не как все скрипты подобного плана копируют, вставляют всё, даже файлы и папки. Но в нём есть небольшой недостаток он не работает в "Google Chrome" а в остальных программах работает . Подскажите пожалуйста как исправить данный недостаток.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

13 (изменено: svoboden, 2017-06-07 03:46:46)

Re: AHK: Копирование и вставка текста одной кнопкой

Это потому, что в "Google Chrome" одновременно нажимается "MButton", вместо "MButton", поставь "F8", например.