![]() |
Автоматизация Блокнота и подобных приложении
Как можно ходить, передвигаться по тексту, выделять вырезать слова и копировать?
Например имеем текст в открытом блокнот. Кто пример показать может? В закрытом тоже интересно, типа изменить текст внутри файла... И ещё как можно выделять текст в классах Edit (если я правильно называю), особенно длинные и с пробелами, как фокус поймать? И вставлять/копировать там тексты? Если есть различные варианты думаю стоит обсудить? |
semiono, В справке есть туториал как раз для блокнота, вы его читали?
Вот простой пример: Код:
#include <GuiEdit.au3> |
Ага. Только с компонентами надо разобираться...
$hEdit = ControlGetHandle("[CLASS:AkelPad2]", "", "RichEdit20A1") я сначала зделал - RichEdit20A но оказалось так надо RichEdit20A1 не сразу ясно бывает причём для реализации чего либо, надо свой блокнот паковать на всякий случай =) |
Цитата:
![]() Наводим на нужный элемент, и копируем данные. Цитата:
|
Как зачем =)
Я же в примере показал... у меня например, в системе вместо notepad.exe лежит AkelPad и для удобства с таким же именем. Поэтому если бы кто-то зделал какой-то полезный скрипт то классы бы не совпали! Следовательно надо свои бинари добавлять для распространения дистрибутивов, чтоб всё надёжно работало... ну хотя бы genuine notepad.exe положить тем более что он не большой. (хотя это просто совет так как он не касается вопросов топика) |
Цитата:
Цитата:
|
Цитата:
$hEdit = ControlGetHandle("[CLASS:Notepad]", "", "Edit1") $hEdit = ControlGetHandle("[CLASS:AkelPad2]", "", "RichEdit20A1") Возможно Notepad2 и совпадает? Либо он обычно установлен как Program Files и кликается ярлыком? у меня же %SystemRoot%\system32\notepad.exe - это AkelPad2, так как нет смысла обычный тоже хранить. Цитата:
но я на самом деле прежде всего для себя делаю всё, это лишь так рассуждение. |
Есть вопросы!!!
Вот клик по кнопке которая копирует машинный ID в буфер ControlClick("Product Authorization Wizard","","Button2", "left", 1, 37, 11) Но как его потом вставить? ControlSetText(" T-RackS","","Edit2",$var1) Ведь нельзя же так $var1 = ControlClick("Product Authorization Wizard","","Button2", "left", 1, 37, 11) С другой стороны нечто такое тоже нельзя почему-то $var1 = ? или $var1 = * // как тут неинициализированные данные получить? или что вообще делать! Вслучае $var1 = ControlGetText было бы проще, однако у нас сразу готов результат кликом по бутону, но буфер обмена почему-то игнорируется, либо я не знаю как из него вставить! (хочу заметить, что тут ещё необходимо переключение между окнами, тоесть это окна двух приложений между которыми происходит обмен) Одним словом надо вставить "буфер обмена" в переменную которая не была объявленна, или же что правильней неинициализированна? Или что-то другое зделать? ---- А вот это не бывает попроще - Выделяем слово Мир _GUICtrlEdit_SetSel($hEdit, 7, 10) без страшных _GUICtrlEdit_SetSel макросов и хендлов!? Типа просто ControlGetText("title", "text"... и тут указатели? |
semiono,
Цитата:
Цитата:
Цитата:
Код:
$Var1 = ClipGet() Цитата:
Код:
;Выделяем слово Мир |
$Var1 = ClipGet()
ControlSetText(" T-RackS","","Edit2", $Var1) Вот это другое дело! Спсибо! Я обыскался по хелпу, но не мог найти сам. Creat0R, я не знаю что там с блокнотом не понятно, хотя это и не важно настолько. Твой пример, да не работает, и не должен, потому что у меня именно в папке виндоус другой блокнот. Я его ещё на стадии установки Windows [t13] подменил AkelPad.exe > i386\NOTEPAD.EX_ чтобы уже никогда не париться с неудобным оригинальным блокнотом. Или надо было оставить как раритет? Цитата:
|
Цитата:
|
(это по выделению текста, поэтому сюда)
Имеем в реестре a=C:\MyProg\Presets b=C:\MyProg\file.cab c=C:\MyProg\file.dat но не имеем "C:\MyProg\file.exe" который надо запустить используя записи в реестре (по которым узнаём его истинное расположение на диске)... то-есть надо как-то математику врубить? $getname {"a=C:\MyProg\Presets" - 6 + "file.exe"} ; или $getname {"a=C:\MyProg\file.dat" - 3 + "exe"} Run($getname) как это по автоитовски корректно записать? ---------- Делал скрипт, в одном месте нивкакую не работало, как в других примерах такое - $var1 = ControlGetText("Product Authorization Wizard","","Edit2") что странно! Врубил смекалку и зделал так - ControlClick(" T-RackS","","Edit3", "left", 2) ControlClick(" T-RackS","","Edit3", "right", 1) Send("{DOWN 3}") ; контекст меню пункт Copy Send("{ENTER}") ; ....................а нельзя ли было сразу ? - > Send("{DOWN 3}{ENTER}") Хотя я открывал ресурсы проги и там поле ввода имеет нечто такое | ES_READONLY | То-есть это серое поле ввода, как бы не активное, но текст оттуда копируется разумеется... Да, блин иногда гуи ведут себя непредсказуемо... Хорошо я за лефт клик вспомнил =) Но суть вопроса в том, нормально ли что Edit2 не фокусируется и не захватывается, если это правда не мои скрипт ошибки возможные? Бывают ли такие трудные GUI ? |
Цитата:
Код:
$a = "C:\MyProg\Presets" Цитата:
|
Зарелизилось! Ура!
Код:
; для запуска не приложения, а именно его authorization |
Цитата:
Код:
$GetName = StringRegExpReplace($Path, "\\[^\\]*$", "\\T-RackS 3.exe") |
а, понял! оставляя путь до слеша слева сносит имя файла! я то гадал, думал символы распознаёт даже )))
да кстати код подкоректирую, спасиб! off: рег експы изучать тяжело! мне кажется они ещё и вдобавок во всех языках могут различаться? или нет? В /bin/bash например? или что-то общее у них у всех есть? как говорил наш уваж. друг Шерлог Холмс, голова как ящик и туда можно положить что угодно )))) |
Время: 07:26. |
Время: 07:26.
© OSzone.net 2001-