Автоматическое копирование выделенного текста
Цитата: Flamer от 08.01.2025, 00:33Привет!
Есть одна полезная фишка на Linux, которая автоматически копирует любой выделенный текст в буфер обмена. Хотелось бы что-то подобное и для Windows. Существуют браузерные расширения и плагины для Notepad++, но решений для работы на уровне всей системы крайне мало. Я нашел старые утилиты AutoClipX (2.1) и True X-mouse (1.4), но обе работают некорректно. AutoClipX работает идеально, но только до первой перезагрузки; после нее выделенный текст просто вырезается, а на его место вставляется "с". True X-mouse не страдает от этой проблемы, но не копирует текст в некоторых полях, что неудобно.
Я перерыл весь интернет, но так и не нашел нормальной программы. Даже написал скрипт на AHK, но он копирует всё, что выделяет мышка, а это немного не то. Да и копирование работает через раз. ChatGPT в данном вопросе также не помог.
В общем, просьба создать программу, которая будет автоматически копировать выделенный текст в буфер обмена. Было бы также удобно, если у программы был бы значок в системном трее, при нажатии на который копирование отключалось.
Привет!
Есть одна полезная фишка на Linux, которая автоматически копирует любой выделенный текст в буфер обмена. Хотелось бы что-то подобное и для Windows. Существуют браузерные расширения и плагины для Notepad++, но решений для работы на уровне всей системы крайне мало. Я нашел старые утилиты AutoClipX (2.1) и True X-mouse (1.4), но обе работают некорректно. AutoClipX работает идеально, но только до первой перезагрузки; после нее выделенный текст просто вырезается, а на его место вставляется "с". True X-mouse не страдает от этой проблемы, но не копирует текст в некоторых полях, что неудобно.
Я перерыл весь интернет, но так и не нашел нормальной программы. Даже написал скрипт на AHK, но он копирует всё, что выделяет мышка, а это немного не то. Да и копирование работает через раз. ChatGPT в данном вопросе также не помог.
В общем, просьба создать программу, которая будет автоматически копировать выделенный текст в буфер обмена. Было бы также удобно, если у программы был бы значок в системном трее, при нажатии на который копирование отключалось.
Цитата: Mikhail от 08.01.2025, 04:30Flamer, Привет.
В сети нашел код, доработал его, добавил трей меню(включекние/выключения/выход), иконку для трея сам сменишь 4 строка, без ковычек вставлять если будет свой путь.
Вроде как работает корректно, попробуй.
[spoiler title="Код"]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
[/spoiler]
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
Цитата: Flamer от 08.01.2025, 13:40Mikhail, спасибо. Этот код я тоже находил, но его проблема в том, что он почему-то не копирует текст в некоторых окнах. Например в адресной строке браузера, текстовом поле Телеграма и даже тут, на форуме. AutoClipX работает как положено (когда работает), может удастся на основе этой программы сделать что-то рабочее или заставить ее адекватно работать на свежих системах?
Mikhail, спасибо. Этот код я тоже находил, но его проблема в том, что он почему-то не копирует текст в некоторых окнах. Например в адресной строке браузера, текстовом поле Телеграма и даже тут, на форуме. AutoClipX работает как положено (когда работает), может удастся на основе этой программы сделать что-то рабочее или заставить ее адекватно работать на свежих системах?
Цитата: Андрей от 08.01.2025, 14:25Цитата: Flamer от 08.01.2025, 13:40Mikhail, спасибо. Этот код я тоже находил, но его проблема в том, что он почему-то не копирует текст в некоторых окнах. Например в адресной строке браузера, текстовом поле Телеграма
У меня прекрасно копирует.
Цитата: Flamer от 08.01.2025, 13:40Mikhail, спасибо. Этот код я тоже находил, но его проблема в том, что он почему-то не копирует текст в некоторых окнах. Например в адресной строке браузера, текстовом поле Телеграма
У меня прекрасно копирует.
Цитата: Mikhail от 08.01.2025, 14:42Flamer, Этот попробуй, задержки подправил, вроде шустро
[spoiler title="Код"]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[/spoiler]
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
Цитата: shim от 08.01.2025, 15:26Цитата: Mikhail от 08.01.2025, 04:30Вроде как работает корректно, попробуй.
Добрый день!!
а можно вкл/выкл по определённой кнопке и со сменой иконки в трее ?
спасибо.
Цитата: Mikhail от 08.01.2025, 04:30Вроде как работает корректно, попробуй.
Добрый день!!
а можно вкл/выкл по определённой кнопке и со сменой иконки в трее ?
спасибо.
Цитата: shim от 08.01.2025, 17:04Цитата: shim от 08.01.2025, 15:26Добрый день!!
а можно вкл/выкл по определённой кнопке и со сменой иконки в трее ?
спасибо.[spoiler title=""]
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:[/spoiler]
Вот что у меня получилось.
Цитата: 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:
Вот что у меня получилось.
Цитата: Flamer от 08.01.2025, 17:51Этот попробуй
Огромное спасибо, работает идеально)
Этот попробуй
Огромное спасибо, работает идеально)
Цитата: Александр от 08.01.2025, 20:00Цитата: Mikhail от 08.01.2025, 14:42Flamer, Этот попробуй, задержки подправил, вроде шустро
[spoiler title="Код"]Menu, Tray, NoStandardMenu, Tray, Add, Отключить скрипт, ToggleScriptMenu, Tray, Add, Выход, ExitScriptMenu, Tray, Icon, Shell32.dll, 21 ; ИКОНКАscriptEnabled := true~LButton::if scriptEnabled {Loop{Sleep 10GetKeyState, LButtonState, LButton, Pif LButtonState = UbreakMouseGetPos x0, y0Loop{Sleep 20GetKeyState keystate, LButtonIfEqual keystate, U, {MouseGetPos x, ybreak}}if (x-x0 > 5 or x-x0 < -5 или y-y0 > 5 или y-y0 < -5){Send ^cClipWait 1, 1}return}}returnToggleScript:scriptEnabled := !scriptEnabledif scriptEnabled {Menu, Tray, Rename, Включить скрипт, Отключить скрипт} else {Menu, Tray, Rename, Отключить скрипт, Включить скрипт}returnExitScript:ExitAppreturnMenu, 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 returnMenu, 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[/spoiler]
Всем привет!,ребята подскажите пожалуйста,как этим скриптом пользоваться?,это bat файл или vbs скрипт?
Цитата: Mikhail от 08.01.2025, 14:42Flamer, Этот попробуй, задержки подправил, вроде шустро
КодMenu, Tray, NoStandardMenu, Tray, Add, Отключить скрипт, ToggleScriptMenu, Tray, Add, Выход, ExitScriptMenu, Tray, Icon, Shell32.dll, 21 ; ИКОНКАscriptEnabled := true~LButton::if scriptEnabled {Loop{Sleep 10GetKeyState, LButtonState, LButton, Pif LButtonState = UbreakMouseGetPos x0, y0Loop{Sleep 20GetKeyState keystate, LButtonIfEqual keystate, U, {MouseGetPos x, ybreak}}if (x-x0 > 5 or x-x0 < -5 или y-y0 > 5 или y-y0 < -5){Send ^cClipWait 1, 1}return}}returnToggleScript:scriptEnabled := !scriptEnabledif scriptEnabled {Menu, Tray, Rename, Включить скрипт, Отключить скрипт} else {Menu, Tray, Rename, Отключить скрипт, Включить скрипт}returnExitScript:ExitAppreturnMenu, 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 returnMenu, 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 скрипт?
Цитата: Александр от 08.01.2025, 21:41Цитата: Никита от 08.01.2025, 21:20Александр, привет! Это скрипт для AHK
Понял,а каким образом этот скрипт можно применить?
Цитата: Никита от 08.01.2025, 21:20Александр, привет! Это скрипт для AHK
Понял,а каким образом этот скрипт можно применить?
Цитата: ЯR от 08.01.2025, 22:30Александр, приветствую.
Скачать программу Autohotkey и скормить ей предложенный Михаилом скрипт, заранее сохранив этот скрипт с расширением *.ahk
Александр, приветствую.
Скачать программу Autohotkey и скормить ей предложенный Михаилом скрипт, заранее сохранив этот скрипт с расширением *.ahk
Цитата: Никита от 08.01.2025, 22:38Цитата: Александр от 08.01.2025, 21:41Цитата: Никита от 08.01.2025, 21:20Александр, привет! Это скрипт для AHK
Понял,а каким образом этот скрипт можно применить?
Вот сделал на основе старой портативной версии AHK.
Нужно просто распаковать папку из архива и запустить AutoHotkey.exe.
У меня заработало. В трее появится иконка скрипта.
Скачать
Цитата: Александр от 08.01.2025, 21:41Цитата: Никита от 08.01.2025, 21:20Александр, привет! Это скрипт для AHK
Понял,а каким образом этот скрипт можно применить?
Вот сделал на основе старой портативной версии AHK.
Нужно просто распаковать папку из архива и запустить AutoHotkey.exe.
У меня заработало. В трее появится иконка скрипта.
Скачать
Цитата: Александр от 08.01.2025, 23:38Цитата: Никита от 08.01.2025, 22:38Цитата: Александр от 08.01.2025, 21:41Цитата: Никита от 08.01.2025, 21:20Александр, привет! Это скрипт для AHK
Понял,а каким образом этот скрипт можно применить?
Вот сделал на основе старой портативной версии AHK.
Нужно просто распаковать папку из архива и запустить AutoHotkey.exe.
У меня заработало. В трее появится иконка скрипта.
СкачатьВсё получилось!,ребята,огромное всем спасибо!
Цитата: Никита от 08.01.2025, 22:38Цитата: Александр от 08.01.2025, 21:41Цитата: Никита от 08.01.2025, 21:20Александр, привет! Это скрипт для AHK
Понял,а каким образом этот скрипт можно применить?
Вот сделал на основе старой портативной версии AHK.
Нужно просто распаковать папку из архива и запустить AutoHotkey.exe.
У меня заработало. В трее появится иконка скрипта.
Скачать
Всё получилось!,ребята,огромное всем спасибо!