COM в AHK для работы с Word. Документы: активировать непредсказуемое поведение - PullRequest
0 голосов
/ 10 июля 2020

Следующий код должен был активировать документ A при нажатии ^ a и документ B при нажатии ^ b. Оба файла уже существуют и открыты. Иногда работают оба, иногда один работает, а другой нет, иногда ни один из них не работает. Сообщение об ошибке читается как «неправильное имя файла». Добавление или удаление .docx из имени файла не имеет никакого эффекта. Первое выполнение сценария после перезагрузки компьютера обычно работает.

ОС: Windows 10.

^a::
wrdApp := ComObjActive("Word.Application") ; Activate MS Word object
wrdApp.Documents("DocumentA").Activate
wrdApp.Visible := true
return

^b::
wrdApp := ComObjActive("Word.Application") ; Activate MS Word object
wrdApp.Documents("DocumentB").Activate 
wrdApp.Visible := true
return

^w::
wrdApp.Selection.EndKey(wdStory)
wrdApp.Selection.Range.InsertParagraphAfter
wrdApp.Selection.TypeText("** Here")
return

[Сообщение об ошибке] [1] [1]: https://i.stack.imgur.com/rJ0CA.png

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

С одной стороны, я думаю, вам нужно создать экземпляр Word .visible, прежде чем вы сможете выполнить .activate, а с другой стороны, включение Do c не приведет к перемещению окна вперед. Используйте WinActivate после остальных. Вот как все это будет выглядеть:

^a::
    wrdApp := ComObjActive("Word.Application") ; Activate MS Word object
    wrdApp.Visible := true
    wrdApp.Documents("DocumentA").Activate
    WinActivate DocumentA 
return

Но, что важно, обратите внимание: DocumentA должен существовать и быть открытым , но не активным , когда вы вводите команду. Может быть, попробуем проверить это состояние. Но почему вы все равно не используете WinActivate? Со всеми параметрами WinTitle и et c., Это кажется наиболее пуленепробиваемым.

EDIT : Поскольку OP сказал, что это иногда работает, я завершаю свое предложение о порядок методов не критичен, скорее всего, do c уже является активным, поэтому команда не выполняется.

Hth,

0 голосов
/ 10 июля 2020

Тест с добавлением слова «try» перед командами, в которых появляется ошибка:

try wrdApp.Documents("DocumentB").Activate 

См. Также Работа с ошибками COM .

Попробуйте также запустить сценарий как администратор.

...