Что нового

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

Math

Новичок
Сообщения
85
Репутация
1
Как скопировать выделенные данные из поля, не используя буфер обмена?
Если другие способы, кроме этого?

Код:
Send("^{с}")		  
$var = ClipGet()
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
Код:
ControlGetText

A вообще, смотря что за поле
 
Автор
M

Math

Новичок
Сообщения
85
Репутация
1
Под полем я понимаю какое-либо окно с выделенным текстом. Например, адресная строка браузера. Да и просто блокнот с выделенным текстом.

ControlGetText в данном случае не подходит.
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
Math [?]
Под полем я понимаю какое-либо окно с выделенным текстом. Например, адресная строка браузера. Да и просто блокнот с выделенным текстом.ControlGetText в данном случае не подходит.
Виноват, не заметил акцента. Тогда да, через буфер самое простое. А чем не устраивает?
 
Автор
M

Math

Новичок
Сообщения
85
Репутация
1
Просто интересуют другие варианты. :smile:
 

asdf8

Скриптер
Сообщения
564
Репутация
152
Можно так:

Код:
#include <GuiEdit.au3>

Run('Notepad.exe')

$nWnd = WinWait("[CLASS:Notepad]", "", 5)
If $nWnd Then
	$hCtrl = ControlGetHandle($nWnd, "", "[CLASSNN:Edit1]")
	ControlSetText($nWnd, "", $hCtrl, "Текст для копирования")
	_GUICtrlEdit_SetSel($hCtrl, 6, 9)
	Sleep(200)
	
	;получение выделенного текста
	$aSel = _GUICtrlEdit_GetSel($hCtrl)
	$sText = _GUICtrlEdit_GetText($hCtrl)
	$sText = StringMid($sText, $aSel[0] + 1, $aSel[1] - $aSel[0])
	MsgBox(0, 'Выделенный текст', '>>>' & $sText & '<<<')
EndIf
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Доброго времени суток.
Приношу свои извинения, что поднял эту тему.
Но меня мучает та же проблема.
Последний указанный пример прекрасно работает с блокнотом. Тут нет сомнений.
Но интересует ответ на вопрос, Как скопировать выделенные данные из любого поля. Не только из блокнота.
А для наглядности я готов привести редактор SciTE.
Указанный метод уже не возвращает текст.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
mef-t
Для стандартных Edit и Input достаточно ControlCommand() с командой "GetSelected".
Но поле редактирования SciTE - это нестандартный элемент. Он хоть и реагирует на команду, но текст возвращает некорректно.
Вот пример (выделите ControlCommand и запустите скрипт)
Код:
$SelText = ControlCommand("[class:SciTEWindow]", "", "Scintilla1", "GetSelected")
MsgBox(0, "", BinaryToString(StringToBinary($SelText, 2)))
У меня возвращает
Код:
and("[class:SciTEWindow]", "
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Спасибо. Очень близко.
Но... у меня возвращает текст смещенный на несколько строк вниз от выделенного.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
OffTopic:
mef-t [?]
на несколько строк вниз от выделенного
Я же пишу - элемент нестандартный. Основан на компоненте Scintilla, который имеет собственный API. На стандартные сообщения Windows может реагировать неадекватно - зависит от поддержки (обработки) данных сообщений разработчиками.
 
Верх