Что нового

[Мышь, клавиатура] В Windows 10 не срабатывает скрипт, работавший на XP

Andy52280

Новичок
Сообщения
7
Репутация
0
В общем, 8-9 лет назад, еще на Вин-98 был написан скриптик. В Вин-ХР вполне себе тоже работало. Теперь загнулся тот древнючий комп, а на новый встала Вин-10. Скрипт перестал работать. Что делать - не понимаю, ибо не программист ни разу. Так, два слова могу связать. Скрипт тупо забирал по Ctrl+C из ячейки Экселя, на которой стоит указатель, данные, форматировал под мои нужды, прыгал имитацией нажатий курсорных клавиш еще по парочке ячеек, забирал данные оттуда и потом формировал строку в путти.
Код:
Opt("SendKeyDelay", 5)
Opt("MouseCoordMode", 2)
Opt("WinTitleMatchMode", 2)

Sleep(1000)
ClipPut("")
Send("^c")
Sleep(200)
$temp = ClipGet()
$temp = StringStripWS($temp, 8)
Local $len = StringLen($temp)
$swip1 = StringLeft($temp, 5)
$swip1 = StringReplace($swip1, "-", ".")
$swip2 = StringTrimLeft($swip1, 2)
$swip1 = StringLeft($swip1, 2)
$swip2 = Number($swip2)
;$swip2 = StringReplace($swip2, "0", "", 1)

MsgBox(4096, "test", $swip2, 5) 
Exit

Мессэджбокс воткнул просто ради посмотреть результат действа. Так вот в ХР было четко видно, что ячейка экселя оконтуривается толстым прерывистым штрихом. Ну, сработало Ctrl+C. А теперь этого нет. И в переменной пусто. Что именно не срабатывает - я пока не понял. А в понедельник эта зараза понадобится. Иначе придется все делать врукопашную, а это нудно и печально. Офис тот же самый - 2010. Вручную Ctrl+C, естественно, срабатывает.
 

InnI

AutoIT Гуру
Сообщения
4 464
Репутация
1 209
Попробуйте заменить Ctrl+C на Ctrl+Ins
Код:
Send("^{ins}")
 
Автор
A

Andy52280

Новичок
Сообщения
7
Репутация
0
Попробовал. Не срабатывает. Такое ощущение, что вообще прекратилась передача симуляции клавиатурных нажатий в Вин-10. И те же нажатия кнопок "вправо-влево-вверх-вниз" тоже не отрабатываются. Окна - да, активируются по-прежнему. А вот нажатий нет. Мнится мне, что дело в каких-то различиях АПИ. А может кто-то перехватывает эмуляции? Какой-нибудь модуль защиты в винде? ДрВЭБа отключал. Защитник тоже выключен.
 

InnI

AutoIT Гуру
Сообщения
4 464
Репутация
1 209
Попробуйте запустить скрипт с правами администратора
Код:
#RequireAdmin
 
Автор
A

Andy52280

Новичок
Сообщения
7
Репутация
0
Не срабатывает. И версию х64 запускал - все едино.
 

InnI

AutoIT Гуру
Сообщения
4 464
Репутация
1 209
У вас Send вообще нигде не работает (ни в блокноте, ни в SciTE) или проблема только с Excel?
 
Автор
A

Andy52280

Новичок
Сообщения
7
Репутация
0
Похоже, именно нигде и не работает. Выделил в блокноте, по сочетанию клавиш вызвал скрипт - по нулям. Сдается мне, что это все же где-то защита стоит. Чтобы эмуляции нажатий не проходили. Отыскать бы - где?
 

ra4o

AutoIT Гуру
Сообщения
1 121
Репутация
231
Виндовс 10х64 работает, дописал с записью и копированием с блокнота в таком виде
Код:
Opt("SendKeyDelay", 5)
Opt("MouseCoordMode", 2)
Opt("WinTitleMatchMode", 2)

Run('Notepad.exe')
Sleep(1000)
Send('2-3465ert777-7bnyuiop asdfghjk l;zxc 24-534 vbn mmm')
Send('^a')

Sleep(1000)
ClipPut("")
Send("^c")
Sleep(200)
$temp = ClipGet()
$temp = StringStripWS($temp, 8)
Local $len = StringLen($temp)
$swip1 = StringLeft($temp, 5)
$swip1 = StringReplace($swip1, "-", ".")
$swip2 = StringTrimLeft($swip1, 2)
$swip1 = StringLeft($swip1, 2)
$swip2 = Number($swip2)
;$swip2 = StringReplace($swip2, "0", "", 1)

MsgBox(4096, "test", $swip2, 5)
Exit
Но если Вы работаете с Excel, возможно стоит переписать скрипт с использованием соответствующей UDF 'Excel.au3' ?
Напишите, а лучше дайте пример файла excel и что Вы хотите получить в итоге .
 
Автор
A

Andy52280

Новичок
Сообщения
7
Репутация
0
Код:
Opt("SendKeyDelay", 5)
Opt("MouseCoordMode", 2)
Opt("WinTitleMatchMode", 2)

Sleep(1000)
ClipPut("")

Sleep(200)
Send("^C")
Sleep(200)
$temp = ClipGet()
$temp = StringStripWS($temp, 8)
Local $len = StringLen($temp)
$swip1 = StringLeft($temp, 5)
$swip1 = StringReplace($swip1, "-", ".")
$swip2 = StringTrimLeft($swip1, 2)
$swip1 = StringLeft($swip1, 2)
$swip2 = Number($swip2)

ClipPut("")
$preport = ClipGet()
$port = StringTrimLeft($temp, 6)
if StringIsDigit ($port) Then $preport = ("e")
	
ClipPut("")
Send("{LEFT}")
Send("{UP}")
Send("^c")
Sleep(300)
$temp = ClipGet()
$vlan = StringStripWS($temp, 8)
$vlan = StringTrimLeft($vlan, 4)

Sleep(1000)
Run('Notepad.exe')
Sleep(1000)
Send("./mngmnt.py" & " " & $swip1 & $swip2 & " " & $preport & $port & " " & $vlan)

Ну а результатом должна всего лишь быть строчка вида "./mngmnt.py 1.123 e12 1234", запихнутая в путти. Т.е. становлюсь на ячейку D3 в экселе и горячими клавишами запускаю автоитовский скрипт. Он формирует строчку. Просто и тупо. Без каких-либо переборов, выборок, проверок и прочих вещей. Одну-то строчку можно и вручную набить, но когда их десятки каждый день, тут уже явно нужно было что-то придумывать. Что смог, то и сварганил почти 10 лет назад. С тех пор программистом, как видите, не стал.
Приложенный файл просто переименовать в Книга1.xlsx - не пролезает в форум.
 

Вложения

Автор
A

Andy52280

Новичок
Сообщения
7
Репутация
0
Автоит переустанавливал. Сначала у меня была какая-то более древняя версия. Я просто скопировал директорию с ним в новую винду. Назначил ассоциацию файлов. На исполнение файлы пошли, но результат нулевой. Скачал новый инсталлятор, поставил - та же малина.
Горячие клавиши у меня к ярлыку на рабочем столе. Говорю же - колхозник я. :smile: Костылик, подпертый костылем - это типично для меня. А делать контекстное меню для экселя или горячие клавиши в автоите - это уже сложновато. Тут думать надо. :(
 

InnI

AutoIT Гуру
Сообщения
4 464
Репутация
1 209
Andy52280
Горячие клавиши у меня к ярлыку на рабочем столе
Что у вас прописано в ярлыке? Какая строка запуска?
Если у вас есть и другие ярлыки с горячими клавишами, проверьте, чтобы эти сочетания не повторялись в разных ярлыках.

или горячие клавиши в AutoIt'е
Вот ваш скрипт, но с горячими клавишами. В данном случае Ctrl+Alt+S, но можете сделать какие надо. Просто запустите скрипт (он будет "висеть" в трее) и нажимайте горячие клавиши, когда нужно. Выход через иконку в трее. Проверял в SciTE, т.к. Excel отсутствует
Код:
HotKeySet("^!s", "Start") ; Ctrl+Alt+S

While Sleep(1111)
WEnd

Func Start()
  Sleep(1000)
  ClipPut("")

  Sleep(200)
  Send("^{ins}")
  Sleep(200)
  $temp = ClipGet()
  $temp = StringStripWS($temp, 8)
  $len = StringLen($temp)
  $swip1 = StringLeft($temp, 5)
  $swip1 = StringReplace($swip1, "-", ".")
  $swip2 = StringTrimLeft($swip1, 2)
  $swip1 = StringLeft($swip1, 2)
  $swip2 = Number($swip2)

  ClipPut("")
  $preport = ClipGet()
  $port = StringTrimLeft($temp, 6)
  if StringIsDigit ($port) Then $preport = ("e")

  ClipPut("")
  Send("{LEFT}")
  Send("{UP}")
  Send("^{ins}")
  Sleep(300)
  $temp = ClipGet()
  $vlan = StringStripWS($temp, 8)
  $vlan = StringTrimLeft($vlan, 4)

  Sleep(1000)
  Run('Notepad.exe')
  Sleep(1000)
  Send("./mngmnt.py" & " " & $swip1 & $swip2 & " " & $preport & $port & " " & $vlan)
EndFunc

Обратите внимание на строки
Код:
ClipPut("")
  $preport = ClipGet()
Возможно, здесь пропущена команда копирования.
 
Автор
A

Andy52280

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