Как использовать AutoItX в .NET(С#) без регистрации
Как использовать AutoitX (OCX/ActiveX) в приложении .NET С# без регистрации?
Я хотел бы создать приложение с ним без необходимости использования прав администратора для установки.
Я нашел несколько страниц в MSDN, например, Активация COM-компонентов без регистрации: пошаговое руководство создание файлов манифеста для файлов DLL. Я попробовал и не смог. Так что, возможно, это возможно, и я создал его неправильно. К сожалению, я потерял файлы XML, поэтому я не могу опубликовать его здесь.
Я также попытался установить изолированный и включить типы взаимодействия в ссылочных свойствах без успеха.
Возможно ли, чтобы AutoItX работал на С# без необходимости регистрации? Если да, то как это сделать?
Я думаю, что это должно быть возможно использовать как DLL, а не OCX, но я не знаю, как именно это сделать на С#.
В настоящее время я использую его как:
AutoItX3Lib.AutoItX3 autoit = new AutoItX3Lib.AutoItX3();
autoit.AutoItSetOption("WinTitleMatchMode", 2);
и т.д.. Итак, если бы я пошел на прямые вызовы DLL, как бы я это сделал?
Ответы
Ответ 1
В вашем проекте С# из Visual Studio просто перейдите в ссылку → Добавить ссылку → Обзор в вашу документацию AutoIt, и все готово. Там нет необходимости регистрировать его отдельно. Но используя этот метод, вам необходимо зарегистрироваться.
Лучше всего использовать 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);
Ответ 2
Через 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"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity type="win32" name="AutoItX3.dll" version="3.3.8.1" />
<file name = "AutoItX3.dll">
<comClass
clsid="{1A671297-FA74-4422-80FA-6C5D8CE4DE04}"
threadingModel = "Free" />
<typelib tlbid="{F8937E53-D444-4E71-9725-35B64210CC3B}"
version="1.0" helpdir=""/>
</file>
<comInterfaceExternalProxyStub
name="IAutoItX3"
iid="{3D54C6B8-D283-40E0-8FAB-C97F05947EE8}"
proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
baseInterface="{00000000-0000-0000-C000-000000000046}"
tlbid = "{F8937E53-D444-4E71-9275-35B64210CC3B}" />
</assembly>
AutoItX3Dependency.manifest:
<?xml version="1.0" encoding="utf-8"?>
<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">
<dependency>
<dependentAssembly asmv2:codebase="AutoItX3.dll.manifest">
<assemblyIdentity name="AutoItX3.dll" version="3.3.8.1" type="win32" />
</dependentAssembly>
</dependency>
</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");
В коде используется инструмент для reg reg в С# (https://github.com/asd-and-Rizzo/NRegFreeCom).
Код отключен (https://github.com/asd-and-Rizzo/pyautoit)
Ответ 3
Скопируйте и вставьте файл 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"
![введите описание изображения здесь]()
Пример загрузки файла через системное окно 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);
}
Ответ 4
Это очень легко. Вам просто нужно добавить библиотеку из своего проекта. Нажмите правую ссылку на ваш проект - Добавить ссылку - Обзор - Перейти к местоположению AutoitX3Lib.dll(C:\Program files\AutoitX3\AutoitX\AutoitX3.dll)
AutoItX3Lib.AutoItX3 autoit = new AutoItX3Lib.AutoItX3();
Подробнее посетите здесь