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

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

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

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

Post by A_AhkUser » 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

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

Post by Masonjar13 » 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:

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

Post by Gorky » 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.

Top