如何在 .NET (C#) 中使用 AutoItX 而无需注册
Posted
技术标签:
【中文标题】如何在 .NET (C#) 中使用 AutoItX 而无需注册【英文标题】:How to use AutoItX in .NET (C#) without registering 【发布时间】:2011-10-12 05:55:37 【问题描述】:如何在不注册的情况下在 .NET C# 应用程序中使用 AutoitX(OCX/ActiveX 库)?
我想用它创建一个应用程序,而无需使用管理员权限进行安装。
我在MSDN 上发现了一些关于为 DLL 文件创建清单文件的页面,Registration-Free Activation of COM Components: A Walkthrough。我试过了,但没有成功。所以也许这是可能的,我错误地创建了它。不幸的是,我丢失了 XML 文件,因此无法在此处发布。
我还尝试在引用属性中设置隔离和启用互操作类型,但没有成功。
是否可以让 AutoItX 在 C# 中工作而无需注册?如果是这样,我该怎么做?
我认为应该可以用作 DLL 而不是 OCX,但我不知道如何在 C# 中准确地做到这一点。
目前,我像这样使用它:
AutoItX3Lib.AutoItX3 autoit = new AutoItX3Lib.AutoItX3();
autoit.AutoItSetOption("WinTitleMatchMode", 2);
等等。那么,如果我要直接调用 DLL,我会怎么做呢?
【问题讨论】:
【参考方案1】:在 Visual Studio 的 C# 项目中,只需转到 Reference -> Add Reference -> Browse to your 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);
【讨论】:
特别是如果您使用 AutoIt 3.3,那么您想要这篇文章中的课程 - autoitscript.com/forum/topic/…【参考方案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 主要:
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)
【讨论】:
【参考方案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"
使用 Firefox 作为浏览器通过 Windows 系统窗口上传文件的示例。我使用 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();
更多详情visit here
【讨论】:
但是这种方法需要在您部署软件的计算机上注册AutoItX
。它对解决注册问题没有任何作用。以上是关于如何在 .NET (C#) 中使用 AutoItX 而无需注册的主要内容,如果未能解决你的问题,请参考以下文章
如何单独注册一个32位的autoitx3.dll在64位的xp中,直接注册会出错