Что нового

Работа с не активным окном - написать текст

Статус
Закрыто для дальнейших ответов.

dr.room

Новичок
Сообщения
283
Репутация
0
Всем привет

Как написать текст - в не активном окне блокнота.
Спасибо.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
dr.room сказал(а):
Всем привет

Как написать текст - в не активном окне блокнота.
Спасибо.
Код:
ControlSetText("[CLASS:Notepad]", "", "Edit1", "Пишим текст в окно")
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
У меня как то странно работает всё :(
Если указать класс окна - то текст пишет, если название окна - то нет

Причём примеры взяты из справки

Пример: высылаем текст в 1-ый элемент Edit в окне Блокнота
Код:
ControlSend("Безымянный - Блокнот", "", "[CLASS:Edit; INSTANCE:1]", "Это некоторый текст")

или
Код:
ControlSend("Безымянный - Блокнот", "", "[CLASSNN:Edit1]", "Это некоторый текст")

или
Код:
ControlSend("Безымянный - Блокнот", "", "Edit1", "Это некоторый текст")


Еще проблема
Можно написать только 1 раз - потому что всякий раз предыдущий текст удаляться
Не понятно также - как можно записать текст из буфер обмена?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Попробуйте вместа символа "-" поставить символ "—", чтобы было так: "Безымянный — Блокнот". Уверен, что из-за этого...


Добавлено:
Сообщение автоматически объединено:

Вот ещё варианты:
Код:
ControlSend("Безымянный", "", "[CLASS:Edit; INSTANCE:1]", "Это некоторый текст")

Код:
Opt("WinTitleMatchMode", 2)
ControlSend("Блокнот", "", "[CLASS:Edit; INSTANCE:1]", "Это некоторый текст")
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Спасибо
А как реализовать еще такие задачи:
1. разрыв строки (если строк несколько)
2. копирование из буфера обмена.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
ControlSend("Безымянный", "", "[CLASS:Edit; INSTANCE:1]", "Это некоторый текст" & @CRLF)

Opt("WinTitleMatchMode", 2)
ControlSend("Блокнот", "", "[CLASS:Edit; INSTANCE:1]", "А это ещё текст" & @CRLF)

ClipPut("Текст из буфера обмена")
ControlSend("Безымянный", "", "[CLASS:Edit]", "+{INS}") ; Shift + Insert вставляем текст
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
@ alex33
Спасибо
Можно пару вопросов:
1. почему для вставки из буфера используется именно Shift + Insert
2. как реализовать выделение и удаление содержимого блокнота (перед тем как вставлять текст) ?
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
dr.room
1. почему для вставки из буфера используется именно Shift + Insert
Чтобы избежать проблем с раскладками клавиатуры.

2. как реализовать выделение и удаление содержимого блокнота (перед тем как вставлять текст) ?
Ctrl+A - выделить всё, Del - удалить, Shift+Ins - вставить (удаление можно пропустить, т.к. вставляемый текст заменит выделенный).

Ещё вариант замены текста в блокноте на текст из БО
Код:
ControlSetText("[class:Notepad]", "", "Edit1", ClipGet())
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
dr.room сказал(а):
1. почему для вставки из буфера используется именно Shift + Insert
2. как реализовать выделение и удаление содержимого блокнота (перед тем как вставлять текст) ?
1. ... а не CTRL + c / CTRL + v ? Для того, чтобы не заморачиваться с раскладкой клавиатуры (русская и английская).

2. Можно через сочетания клавишь, предворительно переключив раскладку на английскую,
либо специальными встроенными командами.

Пример с командами:
Код:
#include <GuiEdit.au3>
Local $hwnd = WinGetHandle("[CLASS:Notepad]"), $hEdit = ControlGetHandle($hwnd, "", "Edit1") ; получаем указатель на окно notepad и на элемент edit

Sleep(3000)

_GUICtrlEdit_SetText($hEdit, "пишем текст")
Sleep(500)

_GUICtrlEdit_SetSel($hEdit, 0, -1) ; select all выделить всё
Sleep(3000)

_GUICtrlEdit_SetText($hEdit, "другая информация")
Sleep(500)
_GUICtrlEdit_AppendText($hEdit, @CRLF&"Добавочный текст")
_GUICtrlEdit_SetSel($hEdit, 0, -1) ; select all выделить всё
ControlSend($hwnd, "", $hEdit, "^{INSERT}") ; скопировать выделенное CTRL + INSERT
Sleep(3000)

ClipPut("Новые данные")
_GUICtrlEdit_SetSel($hEdit, 0, -1) ; select all выделить всё
ControlSend($hwnd, "", $hEdit, "+{INSERT}") ; вставить SHIFT + INSERT
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Не могу понять почему класс окна прописываться как "[CLASS:Edit; INSTANCE:1] ?
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
@InnI
Ура получилось - нажал на кнопку 8, даже в не активном окне :smile: Спасибо
Код:
ControlClick("Калькулятор", "", "[CLASS:Button; Instance:9]")


Но в статье по ссылке есть сложный для меня пример :
Код:
ControlGetText("Калькулятор", "", "[CLASS:Button; X:54; Y:43; W:63; H:34]")

  • Как определять ширину, высоту...
  • Что означает параметр W
  • Пример позволяет извлечь текст кнопки? Как это кнопки, как это можно увидеть?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
dr.room [?]
Как определять ширину, высоту...
1. Au3Info.exe вкладка Control

Что означает параметр W
2. width - ширина

Как это кнопки, как это можно увидеть?
3. П.1


Добавлено:
Сообщение автоматически объединено:

dr.room
В следующий раз создайте свою тему. Не нужно поднимать годичные темы.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
dr.room [?]
Это и есть моя тема
Не так выразился, я имел ввиду начать новую тему и не поднимать старую.
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Модератор.
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
В чем же тут нарушение? Разбираемый тематический пример из справки ?? Есть тогда смысл темы создавать? Я вижу его все меньше и меньше
 
Статус
Закрыто для дальнейших ответов.
Верх