VBS-Aufruf in AutoIt "übersetzen" / Methodenaufruf in Autoit

  • Gibt es eine art übersetzungsprogramm, um VBS in AU3 zu übersetzen?

    Einmal editiert, zuletzt von jjnoobish66 (19. Juli 2007 um 13:33)

  • schreib dir selber n tool das das kann ;) wär doch mal n schönes projekt *hehe*

    ne quatsch ich kuck mal ob ich was finde!

    greetz olli

    EDIT:

    Hab was gefunden! Nach dem Convertieren braucht es jedoch meistens nochn bisschen nachbearbeitung!

  • leider versagt der Übersetzer (von anderen kleineren dingen abgesehen) genau wie ich manuell beim aufrufen einer COM-Methode....

    mal der code (sinngemäß):

    $O = ObjGet ("Klassenname")
    $O.Methodenname ("Argument")

    wird quitiert mit "Variable must be of type "Object""...

    Einmal editiert, zuletzt von jjnoobish66 (19. Juli 2007 um 12:17)

  • MMM vieleichts hilts euch, wenn ich mal eine der VBSes poste
    - eigentlich simpelstes beispiel... klassen durchgehen bis zur gesuchten und die methode anwenden....


    for each Obj in GetObject("winmgmts:").InstancesOf ("Klassenname")
    Obj.Methode

    if err = 0 then
    WScript.Echo "erfolgreich"
    end if

    if err <> 0 then
    WScript.Echo "nicht erfolgreich"
    end if

    Err.Clear
    Next

    gibt es keine deutsche anleitung für den zugriff auf com in autoit? soweit ich die englische hilfe verstanden habe mache ich keinen fehler....

    Einmal editiert, zuletzt von jjnoobish66 (19. Juli 2007 um 14:09)

  • Hi,

    grundsätzlich funktionieren die Zugriffe auf COM-Objekte nicht anders als bei VB-Skript.

    hier mal ein paar kleinere Beispiele:

    Spoiler anzeigen
    [autoit]


    Opt("MustDeclareVars",1)
    ;~ 'Liest alle installierten Drucker aus :
    ;~ 'http://spotlight.de/zforen/mse/m/mse-1114425732-4323.html
    ;~ '25.04.2005 von M.I.Nitraum

    [/autoit] [autoit][/autoit] [autoit]

    ;~ ################################################################
    ;~ Beispiel 1
    ;~ ################################################################

    [/autoit] [autoit][/autoit] [autoit]

    Dim $oWMI, $aPrinters, $oPrinter

    [/autoit] [autoit][/autoit] [autoit]

    $oWMI = Objget("winmgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
    if IsObj($oWMI) Then
    $aPrinters = $oWMI.ExecQuery("Select * from Win32_PrinterConfiguration")
    For $oPrinter In $aPrinters
    MsgBox (32,"Hurra","Name: " & $oPrinter.name)
    Next
    Endif

    [/autoit] [autoit][/autoit] [autoit]

    ;~ ################################################################
    ;~ Beispiel 2
    ;~ http://www.microsoft.com/germany/techne…les/600362.mspx
    ################################################################

    [/autoit] [autoit][/autoit] [autoit]

    Dim $strComputer, $objSWbemServices, $colSWbemObjectSet, $objSWbemObject

    [/autoit] [autoit][/autoit] [autoit]

    $strComputer = "."

    [/autoit] [autoit][/autoit] [autoit]

    $objSWbemServices = ObjGet("winmgmts:\\" & $strComputer)
    $colSWbemObjectSet = $objSWbemServices.InstancesOf("Win32_LogicalMemoryConfiguration")

    [/autoit] [autoit][/autoit] [autoit]

    For $objSWbemObject In $colSWbemObjectSet
    MsgBox(64,"", "Physikalischer Speicher in KB: " & $objSWbemObject.TotalPhysicalMemory)
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit]


    Ein schönes Beispiel für dieses Thema ist die portierung von scriptomatic:
    http://www.autoitscript.com/forum/index.php?automodule=downloads&showfile=29

    Jonk

  • dabei ergibt sich ein problem....

    die variable wird mit den unterobjekten von

    Win32_PrinterConfiguration
    Win32_LogicalMemoryConfiguration

    gefüllt.

    was ist dann, wenn man auf eine methode des zB win32_objekts zugreifen will? zB Win32_Share.... create und delete sind direkte methoden des win32_objekts...

    $oWMI = Objget("winmgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
    if IsObj($oWMI) Then
    $aPrinters = $oWMI.ExecQuery("Select * from Win32_WinShare")
    For $oPrinter In $aPrinters
    $oprinter ("Freigabe")
    Next
    Endif

    funktioniert da also nicht - 1. weil autoit syntaxfehler meldet (eine zuweisung erwartet ein "=") und 2. in diesem fall auch weil direkt danach delete mit gleichem Pfad aufgerufen würde

  • auch das geht mit autoit ;)

    [autoit]


    $strComputer = "localhost"
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $item = $objWMIService.Get("Win32_Share")
    $item.Create("c:\Ordner", "wmifreigabe", 0, 5, "TestShare, angelegt per WMI")

    [/autoit][autoit][/autoit][autoit][/autoit]

    Einmal editiert, zuletzt von jonk (25. Juli 2007 um 21:01)

  • super - es geht doch! so solte ich alle vbs übersetzen können, danke

    edit
    muss mich leider korrigieren, irgenwas läuft hier total schief - vieleicht bin ich einfach zu blöd

    habe mir das ganze in skriptomatik angeschaut - soweit ich das sehe, wird da eine liste der unterobjekte von win32_... angelegt, und für alle objekte in dieser liste die eigenschaften abgefragt - aber wieso ist das so, wenn die eigenschaft doch direkt zu win32_... und nicht zu einem unterobjekt gehört..... auch gibt der compiler keine fehlermeldung aus, dass die eigenschaft nicht vorhanden wäre - es kommt einfach nur ein leerer string....

    ich bin langsam ziemlich genervt von der ganzen geschichte X(

    PS: DAs wissen, dass die DIREKTE Eigenschaften des Objektes sind kommt direkt aus der db des ms developer network....

    2 Mal editiert, zuletzt von jjnoobish66 (26. Juli 2007 um 03:56)

  • In der Autoit-Hilfe gibt es einen Abschnitt "COM Error Handling", da steht wie Du mit Fehlern bei COM-Objekten umgehen kannst.

    Zitat


    muss mich leider korrigieren, irgenwas läuft hier total schief - vieleicht bin ich einfach zu blöd

    was geht denn schief?

    Zitat


    habe mir das ganze in skriptomatik angeschaut - soweit ich das sehe, wird da eine liste der unterobjekte von win32_... angelegt, und für alle objekte in dieser liste die eigenschaften abgefragt - aber wieso ist das so, wenn die eigenschaft doch direkt zu win32_... und nicht zu einem unterobjekt gehört.....

    PS: Das wissen, dass die DIREKTE Eigenschaften des Objektes sind kommt direkt aus der db des ms developer network....

    Nun, wirklich viel habe ich mit WMI auch noch nicht gescriptet aber...
    wenn Du das WSQL Statement "Select * from Win32_Share" absetzt bekommst Du eine Collection von Objekten des Typs Win32_Share ... diese Objekte haben dann auch die Methoden und Eigenschaften der Klasse Win32_share ...

    nochmal ein Beispiel, ich hoffe ich habe Dein Problem richtig verstanden:

    Spoiler anzeigen
    [autoit]


    Const $laufwerk = 0
    Const $Druckerwarteschlange = 1
    Const $Geraet = 2
    Const $IPC = 3

    [/autoit] [autoit][/autoit] [autoit]

    Dim $strComputer, $objSWbemServices, $colSWbemObjectSet, $objSWbemObject

    $strComputer = "."

    $objSWbemServices = ObjGet("winmgmts:\\" & $strComputer)
    $colSWbemObjectSet = $objSWbemServices.InstancesOf("Win32_Share")

    For $objSWbemObject In $colSWbemObjectSet
    if $objSWbemObject.Type = $laufwerk Then
    MsgBox(64,"Just a Share :)", $objSWbemObject.name)
    Endif
    Next

    [/autoit]

    http://www.scriptinternals.de/new/ger/suppor…Win32_Share.htm

    Einmal editiert, zuletzt von jonk (26. Juli 2007 um 22:44)