Как использовать AutoItX в .NET (C #) без регистрации - PullRequest
22 голосов
/ 25 июля 2011

Как использовать AutoitX ( OCX / ActiveX библиотека) в приложении .NET C # без регистрации?

Я бы хотелнравится создавать приложение с ним без необходимости использовать права администратора для установки.

Я нашел несколько страниц на MSDN например, Активация COM-компонентов без регистрации:Пошаговое руководство о создании файлов манифеста для файлов DLL.Я попробовал это и не удалось.Так что, возможно, это возможно, и я создал это неправильно.К сожалению, я потерял файлы XML, поэтому не могу опубликовать это здесь.

Я также попытался установить изолированные и включить типы взаимодействия в ссылочных свойствах без успеха.

Можно ли заставить AutoItX работать в C # без необходимости регистрации?Если да, то как мне это сделать?

Я думаю, что можно использовать как DLL, а не как OCX, но я не знаю, как именно это сделать в C #.

В настоящее время я использую его как:

AutoItX3Lib.AutoItX3 autoit = new AutoItX3Lib.AutoItX3();
autoit.AutoItSetOption("WinTitleMatchMode", 2);

и т. Д.Так что, если бы я пошел на прямые вызовы DLL, как бы я это сделал тогда?

Ответы [ 4 ]

9 голосов
/ 25 июля 2011

В вашем C # проекте из Visual Studio просто зайдите в Справочник -> Добавить справку -> Найдите свой AutoIt dll и все готово Там нет необходимости регистрировать это отдельно. Но, используя этот метод, вы должны зарегистрироваться.

Лучший способ - использовать DLL напрямую с помощью операторов [DllImport]. Вот пример класса, который вы можете использовать: http://www.autoitscript.com/forum/topic/72905-c-use-of-the-dll-some-idears-for-you/

Он определяет функции следующим образом:

[DllImport("AutoItX3.dll", SetLastError = true, CharSet = CharSet.Auto)]
static public extern int AU3_MouseUp([MarshalAs(UnmanagedType.LPStr)] string Button);
7 голосов
/ 15 ноября 2013

Через PInvoke

        var assemblies = new NRegFreeCom.AssemblySystem();
        var module = assemblies.LoadFrom(Path.Combine(Environment.CurrentDirectory, "AutoItX3.dll"));
        var createdDirectly = NRegFreeCom.ActivationContext.CreateInstanceDirectly(module, clsid) as IAutoItX3;
        createdDirectly.Run("Notepad");

Через манифесты

AutoItX3.dll.manifest:


<?xml version="1.0" encoding="utf-8" standalone="yes"?><br/><assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"><br/>    <assemblyIdentity type="win32" name="AutoItX3.dll" version="3.3.8.1" /><br/>    <file name = "AutoItX3.dll"><br/>       <comClass<br/>           clsid="{1A671297-FA74-4422-80FA-6C5D8CE4DE04}"<br/>           threadingModel = "Free" /><br/>        <typelib tlbid="{F8937E53-D444-4E71-9725-35B64210CC3B}"<br/>              version="1.0" helpdir=""/><br/>   </file><br/>  <comInterfaceExternalProxyStub<br/>      name="IAutoItX3"<br/>      iid="{3D54C6B8-D283-40E0-8FAB-C97F05947EE8}"<br/>    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"<br/>    baseInterface="{00000000-0000-0000-C000-000000000046}"<br/>      tlbid = "{F8937E53-D444-4E71-9275-35B64210CC3B}" /><br/></assembly>

AutoItX3Dependency.manifest:


<?xml version="1.0" encoding="utf-8"?><br/><asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><br/>    <dependency><br/>      <dependentAssembly  asmv2:codebase="AutoItX3.dll.manifest"><br/>        <assemblyIdentity name="AutoItX3.dll" version="3.3.8.1" type="win32" /><br/>      </dependentAssembly><br/>    </dependency><br/></asmv1:assembly>

Program.cs Main:


            var createdViaManifest = NRegFreeCom.ActivationContext.CreateInstanceWithManifest(new Guid("{1A671297-FA74-4422-80FA-6C5D8CE4DE04}"), "AutoItX3Dependency.manifest");
            var autoItWithManifest = (IAutoItX3)createdViaManifest;
            autoItWithManifest.Run("Notepad");

Код использует инструмент для бесплатной регистрации в C # (https://github.com/asd-and-Rizzo/NRegFreeCom). Код снят с (https://github.com/asd-and-Rizzo/pyautoit)

0 голосов
/ 13 июля 2017

Скопируйте и вставьте файл AutoItX3.dll в папку /bin/Debug или /bin/Release. Или для события Post-build задайте следующую командную строку:

copy /Y "$(SolutionDir)\packages\AutoItX.3.3.12.0\AutoItX3.dll" "$(ProjectDir)\bin\Debug"

copy /Y "$(SolutionDir)\packages\AutoItX.3.3.12.0\AutoItX3.dll" "$(ProjectDir)\bin\Release"

enter image description here

Пример загрузки файла через системное окно Windows с использованием Firefox в качестве браузера. Я использую AutoItX v3.3.12.0.

    /// <summary>
    /// Method which allows you to upload a file through windows system window using firefox as browser
    /// </summary>
    /// <param name="file">path file</param>
    /// <param name="winTitle">Window title</param>
    /// <param name="idEditBox">Text box identifier (es. [CLASS:Edit; INSTANCE:1])</param>
    /// <param name="idBtnLoad">Open button identifier (es. [CLASS:Button; INSTANCE:1])</param>
    /// <returns>void</returns>
    /// <author>Michele Delle Donne</author

    public static void UploadFileByWindowsFireFoxDialog(string file, string winTitle, string idEditBox, string idBtnLoad)
    {

        AutoItX.Init();

        AutoItX.WinWait(winTitle);
        AutoItX.WinActivate(winTitle);

        AutoItX.ControlSetText(winTitle, "", idEditBox, file);
        AutoItX.ControlClick(winTitle, "", idBtnLoad);            
    }
0 голосов
/ 13 апреля 2013

Это очень просто. Вам просто нужно добавить библиотеку из вашего проекта. Щелкните правой кнопкой мыши по своему эталонному проекту - Добавить ссылку - Обзор - Перейти к расположению AutoitX3Lib.dll (C: \ Program Files \ AutoitX3 \ AutoitX \ AutoitX3.dll)

AutoItX3Lib.AutoItX3 autoit = new AutoItX3Lib.AutoItX3();

Для более подробной информации посетите здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...