2011-07-25 17 views
22

Come utilizzare la libreria AutoitX (OCX/ActiveX) in un'applicazione .NET C# senza registrarla?Come utilizzare AutoItX in .NET (C#) senza registrazione

Mi piacerebbe creare un'applicazione con esso senza bisogno di utilizzare i diritti di amministratore per l'installazione.

Ho trovato alcune pagine su MSDN mi piace, Registration-Free Activation of COM Components: A Walkthrough sulla creazione di file manifest per file DLL. L'ho provato e non ci sono riuscito. Quindi forse è possibile e l'ho creato erroneamente. Purtroppo ho perso i file XML, quindi non posso postarlo qui.

Ho anche provato a impostare isolato e abilitare i tipi di interoperabilità nelle proprietà di riferimento senza esito positivo.

È possibile far funzionare AutoItX in C# senza la necessità di registrarsi? Se sì, come lo faccio?

Penso che dovrebbe essere possibile utilizzarlo come DLL e non come OCX, ma non so esattamente come farlo in C#.

Attualmente, lo uso piace:

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

ecc Quindi, se vorrei andare per le chiamate DLL diretta, come dovrei farlo allora?

risposta

8

Nel tuo progetto C# da Visual Studio, vai su Riferimento -> Aggiungi riferimento -> Sfoglia il tuo dll AutoIt e il gioco è fatto. Non è necessario registrarlo separatamente. Ma usando questo metodo devi registrarti.

Un modo migliore è utilizzare direttamente la DLL, con istruzioni [DllImport]. Qui è una classe di esempio che è possibile utilizzare: http://www.autoitscript.com/forum/topic/72905-c-use-of-the-dll-some-idears-for-you/

Definisce le funzioni in questo modo:

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

In particolare se si utilizza AutoIt 3.3, poi si desidera la classe in questo post - http://www.autoitscript.com/forum/topic/72905-c-use-of-the-dll-some -idears-for-you/# entry642195 –

-1

E 'molto facile. Hai solo bisogno di aggiungere una libreria dal tuo progetto. Fare clic destro del progetto di riferimento - Aggiungi riferimento - Percorrere - Vai alla posizione AutoitX3Lib.dll (C: \ Programmi \ AutoitX3 \ AutoitX \ AutoitX3.dll)

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

Per maggiori dettagli visit here

+2

Ma questo approccio richiede che 'AutoItX' sia registrato sul computer su cui si sta distribuendo il software. Non fa nulla nel modo di risolvere il problema di registrazione. –

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

Via manifesta

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 principale:


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

codice utilizza strumento per la reg gratuitamente in C# (https://github.com/asd-and-Rizzo/NRegFreeCom). Codice ritagliata da (https://github.com/asd-and-Rizzo/pyautoit)

0

Copiare e incollare il file AutoItX3.dll a /bin/Debug o /bin/Release cartella. O per eventi post-generazione impostare la seguente riga di comando:

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

Un esempio di caricare un file di sistema di Windows finestra attraverso l'utilizzo di Firefox come browser. Io uso 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);    
    } 
Problemi correlati