Сохранение выделенного текста без использования буфера обмена

Помощь в написании скриптов
Gorky
Posts: 1
Joined: 12 Dec 2017, 05:44

Сохранение выделенного текста без использования буфера обмена

12 Dec 2017, 06:05

Нашёл только один способ сохранения выделенного текста в переменной - через буфер обмена.

Code: Select all

$Clip1 := "" ; Clears variable
Send, {ctrl down}c{ctrl up} ; More secure way to Copy things
Sleep, 50 ; Delay
$Clip1 := Clipboard
Есть ли способы, не затрагивающие буфер обмена?
Через PostMessage/SendMessage, например? Или другим способом?

Спасибо.

P.S.: для сравнения, в программе HotKeyboard для выделенного текста есть своя переменная - Selection.
User avatar
Masonjar13
Posts: 1555
Joined: 20 Jul 2014, 10:16
Location: Не Россия
Contact:

Re: Сохранение выделенного текста без использования буфера обмена

12 Dec 2017, 06:17

Я не знаю другого пути. Однако вы можете сохранить буфер обмена и восстановить его.

Code: Select all

saveClipboard(){
    local ; обеспечить, чтобы глобальные переменные никогда не использовались
    tmp:=clipboardAll ; сохранить буфер обмена
    Send, {ctrl down}c{ctrl up}
    clipWait,0.5 ; половина секунды
    selected:=clipboard
    clipboard:=tmp ; восстановить буфер обмена
    return selected
}
Использование функции делает так, что вам не нужно каждый раз переустанавливать переменную. Если не указано как "Static," функциональные переменные являются временными.
Извините за Google Translate :shifty:
OS: Windows 10 Pro | Editor: Notepad++
My Personal Function Library | Old Build - New Build
A_AhkUser
Posts: 1147
Joined: 06 Mar 2017, 16:18
Location: France
Contact:

Re: Сохранение выделенного текста без использования буфера обмена

12 Dec 2017, 14:14

Здраствуйте,

Если речь идёт о Edit control, то можно использовать ControlGet,, Selected.
При случае, Вам нужно ID или ClassNN control обеспечивающий Вам способом в его опознании за исключением всех других:

Code: Select all

; пример с блокнотом
run, notepad,,, PID ; выпускает блокнот всё ещё сохраняя единственниый процесс ID в переменную 'PID'
WinWait, ahk_pid %PID% ; подождает пока не появилось окно, единственниый процесс которого - PID

; ID := WinExist("ahk_exe notepad.exe") ; для того чтобы извлечь ИД уже сущестуюшее окно

; пример с GUI
GUI, Add, Edit, hwndCID, AHK пример ; добавить Edit control; теперь у него опознавательный знак (hwnd) - привязанная переменная 'CID'
GUI, Show, AutoSize
return


!ц:: ; ALT+ц
; ControlGet, OutputVar, Selected,, Edit1, ahk_id %ID%
ControlGet, OutputVar, Selected,, Edit1, ahk_pid %PID% ; Edit1 - classNN данного Edit control
MsgBox % OutputVar
return
!щ:: ; ALT+щ
ControlGet, OutputVar, Selected,,, ahk_id %CID% ; GUI
MsgBox % OutputVar
return
my scripts

Return to “Помощь”

Who is online

Users browsing this forum: No registered users and 19 guests