Gibt es eine art übersetzungsprogramm, um VBS in AU3 zu übersetzen?
VBS-Aufruf in AutoIt "übersetzen" / Methodenaufruf in Autoit
-
- [ offen ]
-
jjnoobish66 -
19. Juli 2007 um 10:21 -
Geschlossen -
Erledigt
-
-
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""...
-
- Offizieller Beitrag
Hi,
was willst du denn überhaupt machen?
So long,
Mega
-
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.Methodeif err = 0 then
WScript.Echo "erfolgreich"
end ifif err <> 0 then
WScript.Echo "nicht erfolgreich"
end ifErr.Clear
Nextgibt es keine deutsche anleitung für den zugriff auf com in autoit? soweit ich die englische hilfe verstanden habe mache ich keinen fehler....
-
Hi,
grundsätzlich funktionieren die Zugriffe auf COM-Objekte nicht anders als bei VB-Skript.
hier mal ein paar kleinere Beispiele:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [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
;~ ################################################################Dim $oWMI, $aPrinters, $oPrinter
[/autoit] [autoit][/autoit] [autoit]$oWMI = Objget("winmgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
[/autoit] [autoit][/autoit] [autoit]
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
################################################################Dim $strComputer, $objSWbemServices, $colSWbemObjectSet, $objSWbemObject
[/autoit] [autoit][/autoit] [autoit]$strComputer = "."
[/autoit] [autoit][/autoit] [autoit]$objSWbemServices = ObjGet("winmgmts:\\" & $strComputer)
[/autoit] [autoit][/autoit] [autoit]
$colSWbemObjectSet = $objSWbemServices.InstancesOf("Win32_LogicalMemoryConfiguration")For $objSWbemObject In $colSWbemObjectSet
[/autoit] [autoit][/autoit] [autoit][/autoit]
MsgBox(64,"", "Physikalischer Speicher in KB: " & $objSWbemObject.TotalPhysicalMemory)
NextEin schönes Beispiel für dieses Thema ist die portierung von scriptomatic:
http://www.autoitscript.com/forum/index.php?automodule=downloads&showfile=29Jonk
-
dabei ergibt sich ein problem....
die variable wird mit den unterobjekten von
Win32_PrinterConfiguration
Win32_LogicalMemoryConfigurationgefü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
Endiffunktioniert 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]
[/autoit][autoit][/autoit][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") -
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ödhabe 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
PS: DAs wissen, dass die DIREKTE Eigenschaften des Objektes sind kommt direkt aus der db des ms developer network....
-
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ödwas 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]
[/autoit] [autoit][/autoit] [autoit]
Const $laufwerk = 0
Const $Druckerwarteschlange = 1
Const $Geraet = 2
Const $IPC = 3Dim $strComputer, $objSWbemServices, $colSWbemObjectSet, $objSWbemObject
[/autoit]
$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
Nexthttp://www.scriptinternals.de/new/ger/suppor…Win32_Share.htm