Что нового

Копирование данных из одного окна в другое

j.hlebnikov

Новичок
Сообщения
8
Репутация
0
Доброго всем дня!

Прошу помочь скриптом, понимаю что так делать не хорошо, но не имею в этом никакого опыта.

Задача скорее всего не сложная.
Нужно копировать данные из документа MS Word.
Выглядят они так:
#mpbCRCHi[086]:=16#80;
#mpbCRCHi[087]:=16#41;
#mpbCRCHi[088]:=16#01;
Всего 2 по 256 строк.
Копированию подлежат 5 символов после =

И вставлять в другую программу, выглядит она так:

Значение вставляется по Ctrl+V

Вижу такую последовательность нажатия клавишь:
Исходная точка - начало строки MS Word.
16 раз Del -> 5 раз Shift+вправо -> Ctrl+X -> 2 раза Del -> Alt+Tab -> Ctrl+V -> вниз -> Alt+Tab
Ее нужно зациклить 256 раз.

SciTE-Lite Version 2.28

Всем спасибо.
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
j.hlebnikov
Попробуйте вот так:
Код:
#include 'array.au3'

WinActivate ("пример.docx - Microsoft Word");здесь укажите название вашего документа Word
WinWaitActive("пример.docx - Microsoft Word"); аналогично
Send ("^ф")
Send ("^с")
$a = ClipGet ()
$sstring = StringRegExp ($a, '=(.+?)#(.+?);', 3)
WinActivate ("пример.docx - Microsoft Word"); здесь название вашей программы, название можно посмотреть утилитой AutoIt Window Info, которая поставляется вместе с программой AutoIT
WinWaitActive("пример.docx - Microsoft Word")
For $i= 0 To UBound ($sstring)  -1
	Send ($sstring [$i])
	Send ("{#}")
	Send ($sstring [$i+1])
	Send ("{down}")
	$i +=1
	Sleep (250)
Next
MsgBox (0, "", "конец")


OffTopic:
Обновите свой Autoit.
 
Автор
J

j.hlebnikov

Новичок
Сообщения
8
Репутация
0
Так не работает, не знаю почему.
Но кое что я понял.
Теперь бы еще понять как выделить 5 символов (как Shift+right)?
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
j.hlebnikov [?]
Приведите скриншоты с AutoIt Window Info для документов Word и нужной программы.
По Вашему вопросу:
Код:
Send ("{Shiftdown}")
Send ("{right 5}")
Send ("{shiftup}")
 
Автор
J

j.hlebnikov

Новичок
Сообщения
8
Репутация
0


Окна переключаются нормально.

Получился такой скрипт
Код:
#include 'array.au3'

For $i= 0 To 7
   WinActivate ("ЩА П1 4400.doc - Microsoft Word");здесь укажите название вашего документа Word
   WinWaitActive("ЩА П1 4400.doc - Microsoft Word"); аналогично
   Send ("{right 16}")
   Send ("{Shiftdown}")
   Send ("{right 5}")
   Send ("{shiftup}")
   Send ("^с")
   Send ("{down}")
   Send ("{home}")
   WinActivate ("F:\работа\Объекты\new\Siemens\MM_RTU_1200\MM_RTU_1200"); здесь название вашей программы, название можно посмотреть утилитой AutoIt Window Info, которая поставляется вместе с программой AutoIT
   WinWaitActive("F:\работа\Объекты\new\Siemens\MM_RTU_1200\MM_RTU_1200")
   Send ("^м")
   Send ("{down}")
Next
MsgBox (0, "", "конец")

Работает, но не всегда, иногда моя программа не хочет перемещать курсор вниз, по другому не скажешь, например из 256 раз 6 пропустила, из 8 тоже иногда 1-2 пропускает, в ворде все четко отрабатывает, а в этой программе...

Было бы хорошо сделать проверку содержимого ячейки в этой программе, если =0 то вставить, пока <>0 - курсор вниз.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
j.hlebnikov
Самое простое, что Вы можете сделать не усложняя скрипт, это поставить паузу.
Код:
WinWaitActive("F:\работа\Объекты\new\Siemens\MM_RTU_1200\MM_RTU_1200")
Send ("^м")
Sleep (300)
Send ("{down}")

А почему первый вариант не работает?! SciTE в консоли ошибку выдает? Если нет то попробуйте добавить
Код:
$a = ClipGet ()
$sstring = StringRegExp ($a, '=(.+?)#(.+?);', 3)
MsgBox (0, "", $sstring);вот в этом месте, что выходит? Пусто, 1, 2 или 3?
_arrayDisplay ($sstring); и здесь что? Появляется ли вообще окно?
 
Автор
J

j.hlebnikov

Новичок
Сообщения
8
Репутация
0
В общем ваш изначальный вариант работает, ранее у меня не получалось потому что формат данных в ворде отличался от описанного.

Но я думаю не зря, хоть немного поразбирался, с паузой тоже работает.

Спасибо за помощь!
 
Верх