2011-07-25 28 views
22

Làm cách nào để sử dụng thư viện AutoitX (OCX/ActiveX) trong ứng dụng .NET C# mà không cần đăng ký?Cách sử dụng AutoItX trong .NET (C#) mà không cần đăng ký

Tôi muốn tạo một ứng dụng với nó mà không cần phải sử dụng quyền quản trị để cài đặt.

Tôi đã tìm thấy một số trang trên MSDN như, Registration-Free Activation of COM Components: A Walkthrough về cách tạo tệp kê khai cho tệp DLL. Tôi đã thử nó và không thành công. Vì vậy, có thể nó là có thể và tôi tạo ra nó sai. Thật không may tôi đã mất các tập tin XML vì vậy tôi không thể đăng nó ở đây.

Tôi cũng đã thử đặt cách ly và bật loại interop trong thuộc tính tham chiếu mà không thành công.

Có thể nhận AutoItX hoạt động trong C# mà không cần đăng ký không? Nếu vậy, làm thế nào để làm điều đó?

Tôi nghĩ rằng nó có thể được sử dụng như một DLL và không phải là một OCX, nhưng tôi không biết làm thế nào chính xác để làm điều đó trong C#.

Hiện nay, tôi sử dụng nó như:

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

vv Vì vậy, nếu tôi sẽ đi cho các cuộc gọi DLL trực tiếp, làm thế nào tôi làm điều đó sau đó?

Trả lời

8

Trong dự án C# của bạn từ Visual Studio, chỉ cần truy cập Tham khảo -> Thêm tham chiếu -> Duyệt tới dll AutoIt của bạn và bạn đã hoàn tất. Không cần phải đăng ký nó một cách riêng biệt. Nhưng sử dụng phương pháp này bạn phải đăng ký.

Cách tốt hơn là sử dụng DLL trực tiếp, với câu lệnh [DllImport]. Dưới đây là một lớp học mẫu mà bạn có thể sử dụng: http://www.autoitscript.com/forum/topic/72905-c-use-of-the-dll-some-idears-for-you/

Nó định nghĩa các chức năng như thế này:

[DllImport("AutoItX3.dll", SetLastError = true, CharSet = CharSet.Auto)] 
static public extern int AU3_MouseUp([MarshalAs(UnmanagedType.LPStr)] string Button); 
+1

Cụ thể nếu bạn đang sử dụng AutoIt 3.3, thì bạn muốn lớp trong bài đăng này - http://www.autoitscript.com/forum/topic/72905-c-use-of-the-dll-some -idears-for-you/# entry642195 –

-1

Nó rất dễ dàng. Bạn chỉ cần thêm thư viện từ dự án của bạn. Nhấn vào đúng dự án tham khảo của bạn - Thêm tài liệu tham khảo - Duyệt - Đến vị trí AutoitX3Lib.dll (C: \ Program files \ AutoitX3 \ AutoitX \ AutoitX3.dll)

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

Để biết thêm chi tiết visit here

+2

Nhưng phương pháp này yêu cầu 'AutoItX' được đăng ký trên máy tính mà bạn đang triển khai phần mềm. Nó không có gì trong cách giải quyết vấn đề đăng ký. –

5

Via 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"); 

Qua biểu hiện

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 chính:


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

Mã sử ​​dụng công cụ để reg miễn phí trong C# (https://github.com/asd-and-Rizzo/NRegFreeCom). Mã được cắt từ (https://github.com/asd-and-Rizzo/pyautoit)

0

Sao chép và dán tệp AutoItX3.dll vào thư mục /bin/Debug hoặc /bin/Release. Hoặc cho Post-sự kiện xây dựng thiết lập các dòng lệnh sau:

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

Một ví dụ để tải lên một tập tin thông qua cửa sổ hệ thống Windows sử dụng Firefox là trình duyệt. Tôi sử dụng 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);    
    } 
Các vấn đề liên quan