Вы должны войти, чтобы создавать сообщения и темы.

Автоматическое копирование выделенного текста

Страница 1 из 2►

Привет!

Есть одна полезная фишка на Linux, которая автоматически копирует любой выделенный текст в буфер обмена. Хотелось бы что-то подобное и для Windows. Существуют браузерные расширения и плагины для Notepad++, но решений для работы на уровне всей системы крайне мало. Я нашел старые утилиты AutoClipX (2.1) и True X-mouse (1.4), но обе работают некорректно. AutoClipX работает идеально, но только до первой перезагрузки; после нее выделенный текст просто вырезается, а на его место вставляется "с". True X-mouse не страдает от этой проблемы, но не копирует текст в некоторых полях, что неудобно.

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

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

Flamer, Привет.
В сети нашел код, доработал его, добавил трей меню(включекние/выключения/выход), иконку для трея сам сменишь 4 строка, без ковычек вставлять если будет свой путь.
Вроде как работает корректно, попробуй.

Код

Menu, Tray, NoStandard
Menu, Tray, Add, Отключить скрипт, ToggleScript
Menu, Tray, Add, Выход, ExitScript
Menu, Tray, Icon, Shell32.dll, 21 ; ИКОНКА

scriptEnabled := true

~LButton::
if scriptEnabled {
    TimeButtonDown = %A_TickCount%
    Loop
    {
        Sleep 10
        GetKeyState, LButtonState, LButton, P
        if LButtonState = U
            break
        elapsed = %A_TickCount%
        elapsed -= %TimeButtonDown%
        if elapsed > 200
        {
            clip0 := ClipBoardAll
            MouseGetPos x0, y0
            Loop
            {
                Sleep 20
                GetKeyState keystate, LButton
                IfEqual keystate, U, {
                    MouseGetPos x, y
                    break
                }
            }
            if (x-x0 > 5 or x-x0 < -5 or y-y0 > 5 или y-y0 < -5)
            {         
                Send ^c
                ClipWait 1, 1
                IfEqual ClipBoard,, SetEnv ClipBoard, %clip0%
            }
            return
        }
    }
}
return

ToggleScript:
scriptEnabled := !scriptEnabled
if scriptEnabled {
    Menu, Tray, Rename, Включить скрипт, Отключить скрипт
} else {
    Menu, Tray, Rename, Отключить скрипт, Включить скрипт
}
return

ExitScript:
ExitApp
return

 

Лайкнули shim, Александр и ещё 2
shimАлександрFlamerАндрей
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Mikhail, спасибо. Этот код я тоже находил, но его проблема в том, что он почему-то не копирует текст в некоторых окнах. Например в адресной строке браузера, текстовом поле Телеграма и даже тут, на форуме. AutoClipX работает как положено (когда работает), может удастся на основе этой программы сделать что-то рабочее или заставить ее адекватно работать на свежих системах?

Цитата: Flamer от 08.01.2025, 13:40

Mikhail, спасибо. Этот код я тоже находил, но его проблема в том, что он почему-то не копирует текст в некоторых окнах. Например в адресной строке браузера, текстовом поле Телеграма

У меня прекрасно копирует.

Flamer, Этот попробуй, задержки подправил, вроде шустро

Код

Menu, Tray, NoStandard
Menu, Tray, Add, Отключить скрипт, ToggleScript
Menu, Tray, Add, Выход, ExitScript
Menu, Tray, Icon, Shell32.dll, 21 ; ИКОНКА

scriptEnabled := true

~LButton::
if scriptEnabled {
    Loop
    {
        Sleep 10
        GetKeyState, LButtonState, LButton, P
        if LButtonState = U
            break
        MouseGetPos x0, y0
        Loop
        {
            Sleep 20
            GetKeyState keystate, LButton
            IfEqual keystate, U, {
                MouseGetPos x, y
                break
            }
        }
        if (x-x0 > 5 or x-x0 < -5 или y-y0 > 5 или y-y0 < -5)
        {
            Send ^c
            ClipWait 1, 1
        }
        return
    }
}
return

ToggleScript:
scriptEnabled := !scriptEnabled
if scriptEnabled {
    Menu, Tray, Rename, Включить скрипт, Отключить скрипт
} else {
    Menu, Tray, Rename, Отключить скрипт, Включить скрипт
}
return

ExitScript:
ExitApp
return

Лайкнули ЯR, Александр и ещё 2
ЯRАлександрFlamerPsydiant
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн
Цитата: Mikhail от 08.01.2025, 04:30

Вроде как работает корректно, попробуй.

Добрый день!!
а можно вкл/выкл по определённой кнопке и со сменой иконки в трее ?
спасибо.

Цитата: shim от 08.01.2025, 15:26

Добрый день!!
а можно вкл/выкл по определённой кнопке и со сменой иконки в трее ?
спасибо.

Спойлер

Menu, Tray, Icon, e:\infa\AHK\copy_on.ico 
scriptEnabled := true


~LButton::
if scriptEnabled {
    TimeButtonDown = %A_TickCount%
    Loop
    {
        Sleep 10
        GetKeyState, LButtonState, LButton, P
        if LButtonState = U
            break
        elapsed = %A_TickCount%
        elapsed -= %TimeButtonDown%
        if elapsed > 200
        {
            clip0 := ClipBoardAll
            MouseGetPos x0, y0
            Loop
            {
                Sleep 20
                GetKeyState keystate, LButton
                IfEqual keystate, U, {
                    MouseGetPos x, y
                    break
                }
            }
            if (x-x0 > 5 or x-x0 < -5 or y-y0 > 5 или y-y0 < -5)
            {         
                Send ^c
                ClipWait 1, 1
                IfEqual ClipBoard,, SetEnv ClipBoard, %clip0%
            }
            return
        }
    }
}
return
Pause::
ToggleScript:
scriptEnabled := !scriptEnabled




if scriptEnabled {
    
Menu, Tray, Icon, e:\infa\AHK\copy_on.ico ; путь к иконке ON
} else {
    
Menu, Tray, Icon, e:\infa\AHK\copy_off.ico ; путь к иконке OFF
}
ToggleScript := !ToggleScript
return


ExitScript:


Вот что у меня получилось.

Этот попробуй

Огромное спасибо, работает идеально)

Лайкнули Mikhail и Alas Nameless
MikhailAlas Nameless
Цитата: Mikhail от 08.01.2025, 14:42

Flamer, Этот попробуй, задержки подправил, вроде шустро

Код

 
 
 
 
Menu, Tray, NoStandard
Menu, Tray, Add, Отключить скрипт, ToggleScript
Menu, Tray, Add, Выход, ExitScript
Menu, Tray, Icon, Shell32.dll, 21 ; ИКОНКА
 
scriptEnabled := true
 
~LButton::
if scriptEnabled {
Loop
{
Sleep 10
GetKeyState, LButtonState, LButton, P
if LButtonState = U
break
MouseGetPos x0, y0
Loop
{
Sleep 20
GetKeyState keystate, LButton
IfEqual keystate, U, {
MouseGetPos x, y
break
}
}
if (x-x0 > 5 or x-x0 < -5 или y-y0 > 5 или y-y0 < -5)
{
Send ^c
ClipWait 1, 1
}
return
}
}
return
 
ToggleScript:
scriptEnabled := !scriptEnabled
if scriptEnabled {
Menu, Tray, Rename, Включить скрипт, Отключить скрипт
} else {
Menu, Tray, Rename, Отключить скрипт, Включить скрипт
}
return
 
ExitScript:
ExitApp
return
Menu, Tray, NoStandard Menu, Tray, Add, Отключить скрипт, ToggleScript Menu, Tray, Add, Выход, ExitScript Menu, Tray, Icon, Shell32.dll, 21 ; ИКОНКА scriptEnabled := true ~LButton:: if scriptEnabled { Loop { Sleep 10 GetKeyState, LButtonState, LButton, P if LButtonState = U break MouseGetPos x0, y0 Loop { Sleep 20 GetKeyState keystate, LButton IfEqual keystate, U, { MouseGetPos x, y break } } if (x-x0 > 5 or x-x0 < -5 или y-y0 > 5 или y-y0 < -5) { Send ^c ClipWait 1, 1 } return } } return ToggleScript: scriptEnabled := !scriptEnabled if scriptEnabled { Menu, Tray, Rename, Включить скрипт, Отключить скрипт } else { Menu, Tray, Rename, Отключить скрипт, Включить скрипт } return ExitScript: ExitApp return
 
Menu, Tray, NoStandard
Menu, Tray, Add, Отключить скрипт, ToggleScript
Menu, Tray, Add, Выход, ExitScript
Menu, Tray, Icon, Shell32.dll, 21 ; ИКОНКА

scriptEnabled := true

~LButton::
if scriptEnabled {
    Loop
    {
        Sleep 10
        GetKeyState, LButtonState, LButton, P
        if LButtonState = U
            break
        MouseGetPos x0, y0
        Loop
        {
            Sleep 20
            GetKeyState keystate, LButton
            IfEqual keystate, U, {
                MouseGetPos x, y
                break
            }
        }
        if (x-x0 > 5 or x-x0 < -5 или y-y0 > 5 или y-y0 < -5)
        {
            Send ^c
            ClipWait 1, 1
        }
        return
    }
}
return

ToggleScript:
scriptEnabled := !scriptEnabled
if scriptEnabled {
    Menu, Tray, Rename, Включить скрипт, Отключить скрипт
} else {
    Menu, Tray, Rename, Отключить скрипт, Включить скрипт
}
return

ExitScript:
ExitApp
return

Всем привет!,ребята подскажите пожалуйста,как этим скриптом пользоваться?,это bat файл или vbs скрипт?

Александр, привет! Это скрипт для AHK

Лайкнул Александр
Александр
Цитата: Никита от 08.01.2025, 21:20

Александр, привет! Это скрипт для AHK

Понял,а каким образом этот скрипт можно применить?

Александр, приветствую.
Скачать программу Autohotkey и скормить ей предложенный Михаилом скрипт, заранее сохранив этот скрипт с расширением *.ahk

Лайкнул Александр
Александр
Лучший способ помочь себе — помогать другим.
Цитата: Александр от 08.01.2025, 21:41
Цитата: Никита от 08.01.2025, 21:20

Александр, привет! Это скрипт для AHK

Понял,а каким образом этот скрипт можно применить?

Вот сделал на основе старой портативной версии AHK.
Нужно просто распаковать папку из архива и запустить AutoHotkey.exe.
У меня заработало. В трее появится иконка скрипта.
Скачать

Лайкнули Lega77 и Psydiant
Lega77Psydiant
Цитата: Никита от 08.01.2025, 22:38
Цитата: Александр от 08.01.2025, 21:41
Цитата: Никита от 08.01.2025, 21:20

Александр, привет! Это скрипт для AHK

Понял,а каким образом этот скрипт можно применить?

Вот сделал на основе старой портативной версии AHK.
Нужно просто распаковать папку из архива и запустить AutoHotkey.exe.
У меня заработало. В трее появится иконка скрипта.
Скачать

Всё получилось!,ребята,огромное всем спасибо!

Лайкнул ЯR
ЯR
Страница 1 из 2►