@echo off
setlocal
set "jsfile=%temp%\autoit3x_comtest.js"
(
echo try {
echo oAutoIt = new ActiveXObject("AutoItX3.Control"^);
echo }
echo catch (e^) {
echo WScript.Echo("Catch: " + e^);
echo WScript.Quit (1^);
echo }
) > "%jsfile%"
set "system=System32"
if /i not "%PROCESSOR_ARCHITECTURE%" == "x86" (
set "system=SysWOW64"
)
echo Using: %system%
"%SYSTEMROOT%\%system%\cscript.exe" //nologo "%jsfile%"
if not errorlevel 1 (
echo No error detected.
goto :done
)
>nul 2>nul net session
if errorlevel 1 (
if not exist "AutoItX3.dll" if not exist "AutoItX3_x64.dll" goto :done
echo Require to run as admin to register any dlls.
goto :done
)
if exist "AutoItX3.dll" (
echo Register AutoItX3.dll
for %%A in ("/u" "") do (
"%SYSTEMROOT%\%system%\regsvr32.exe" /s %%~A "AutoItX3.dll"
)
)
if exist "AutoItX3_x64.dll" if exist "%SYSTEMROOT%\SysWOW64" (
echo Register AutoItX3_x64.dll
for %%A in ("/u" "") do (
"%SYSTEMROOT%\System32\regsvr32.exe" /s %%~A "AutoItX3_x64.dll"
)
)
:done
del "%jsfile%"
Я подозреваю, что AutoItX3.dll не зарегистрирован, что выдает ошибку COM.
Код выше представляет собой пакетный файл, так что вы можете сохранить его как, например, autoitx_comtest.cmd
. Он использует JScript, чтобы попытаться загрузить объект AutoItX3.Control
. Если произойдет сбой, и сценарий будет запущен с правами администратора, он зарегистрирует библиотеки, если они существуют в каталоге.
AutoitLibrary обычно предоставляет только 32-битную DLL, что составляет AutoItX3.dll
. Если вы также хотите 64-битную версию, добавьте AutoItX3_x64.dll
в каталог, который будет зарегистрирован. Если у вас установлен AutoIt3, возможно, у вас уже есть dll, зарегистрированные установщиком.
Если у вас установлен 64-битный Python, тогда AutoItX3_x64.dll
может потребоваться использовать AutoItLibrary с ним, поскольку 64-битные исполняемые файлы не могут использовать 32-битные библиотеки DLL и наоборот.
Примечание. Если вы знаете, как зарегистрировать dll с помощью regsvr32
, вы можете просто использовать это вместо пакетного файла.
Совместимость с дополнительными dll
Для совместимости с AutoItLibrary с использованием более старой версии 3.3.6.0 AutoItX3.dll
.
Я мог бы порекомендовать использовать dll из архивных версий и загрузить autoit-v3.3.6.0-sfx.exe
чтобы получить дллс В последней версии AutoItX были удалены некоторые методы, такие как RegRead
.
Кроме того, автор AutoItLibrary может не поддерживать любую версию, кроме 3.3.6.0.
Если у вас установлена последняя версия AutoIt Installer, вам может потребоваться отменить регистрацию этих dll и убедиться, что dll 3.3.6.0 зарегистрированы для совместимости. Я не уверен, если вы можете иметь разные версии DLL
зарегистрирован в то же время, в той же системе.
Последняя версия dll AutoItX может работать довольно хорошо, но ключевые слова AutoItLibrary, перечисленные в документации, такие как Reg Read
, Reg Write
и некоторые другие, могут быть недоступны, так как методы были удалены из последних версий.
Последние версии совместимы, ваш выбор.