1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BLinz

Beiträge von BLinz

  • Bekomme es nicht hin >.>

    • BLinz
    • 28. Mai 2011 um 23:39

    Der aktuelle Pfad des Scripts ist immer:

    @ScriptDir

    Was du willst kann wie folgt gehen:

    [autoit]

    Dim $dateigroesse
    Dim $dateisollgroesse = 200
    If FileExists (@ScriptDir & "\test.txt") Then
    $dateigroesse = FileGetSize (@ScriptDir & "\test.txt")
    EndIf
    If $dateigroesse >= $dateisollgroesse Then
    MsgBox(4096,"", "Datei vollständig")
    Else
    MsgBox(4096,"", "Datei kaputt: " & $dateigroesse & " Bytes statt " & $dateisollgroesse & " Bytes.")
    EndIf

    [/autoit]

    Das ist jetzt eine "lesbare" Variante - so mache ich es gerne, es geht auch kürzer

    [autoit]


    If FileExists (@ScriptDir & "\test.txt") Then
    If FileGetSize (@ScriptDir & "\test.txt") >= 200 Then
    MsgBox(4096,"", "Datei vollständig")
    Else
    MsgBox(4096,"", "Datei kaputt")
    EndIf
    EndIf

    [/autoit]

    Der Befehl FileGetSize liefert die Größe in Bytes zurück, beim MByte etc musst du also entsprechend mal nehmen

  • Einbinden einer DLL in AutoIT (VMware VIX)

    • BLinz
    • 28. Mai 2011 um 17:40

    Hier einmal die ganze vix.h

    vix.h.zip

    Ich werde aber auch progandy's Vorschlag einmal umsetzen - muss nur noch eben meinen Test-ESXi neu installieren .....

  • Einbinden einer DLL in AutoIT (VMware VIX)

    • BLinz
    • 27. Mai 2011 um 20:02

    Ich nehme an das ich einfach bei den Zeigern oder den Typen etwas falsch mache ... keiner da der so etwas schon mal gemacht hat?

  • Geschwindigkeit und Typ einer Netzwerkkarte / Verbindung feststellen

    • BLinz
    • 27. Mai 2011 um 13:42

    Ich habe gerade mal bei anderen Methoden geeschnüffelt - auch PowerShell etc. - aber alle greifen im Grunde genommen wieder auf die

    Win32_NetworkAdapter

    zurück - die nun mal den Fehler hat.
    Unter den Eigenschaften der LAN-Verbindung wird die Geschwindigkeit ja angezeigt (aber nicht ob es Halb- oder Vollduplex ist) ... jetzt müsste man wissen wie die an den Wert kommen.

  • Geschwindigkeit und Typ einer Netzwerkkarte / Verbindung feststellen

    • BLinz
    • 27. Mai 2011 um 13:07

    Stimmt leider, ich habe es hier mal gerade getestet:

    Auf Windows 7, Windows Server 2008, Windows Servere 2008R2 funktioniert es,

    unter

    Windows XP und Windows Server 2003 funktioniert es nicht.

    Schade ...

  • Geschwindigkeit und Typ einer Netzwerkkarte / Verbindung feststellen

    • BLinz
    • 26. Mai 2011 um 21:48

    Also, auf

    http://www.autoitscript.com/forum/topic/30…twork-adapters/

    habe ich ein Script gefunden was die Hardware-Infos ermittelt.

    Den Abschnitt

    [autoit]

    For $object in $colNIC
    $Pcinfo = $pcinfo & $object.name & @CRLF
    Next

    [/autoit]

    habe ich mal wie folgt gemäß dieser Webseite http://msdn.microsoft.com/en-us/library/…6(v=vs.85).aspx
    erweitert:

    [autoit]

    For $object in $colNIC
    For $object in $colNIC
    $Pcinfo = $pcinfo & $object.name & @CRLF
    $Pcinfo = $pcinfo & "LAN-Speed = " & $object.speed /1000 & "Bit/s" & @CRLF
    $Pcinfo = $pcinfo & "LAN-Speed = " & $object.speed / 1000000 & "MBit/s" & @CRLF
    Next

    [/autoit]

    Und bei mir (PC an LAN Netzwerk) meldet er bei einer 1GBit/s Verbindung 1000000000 (also 1.000.000.000 = 1GBits/s) und wenn ich es umstelle z.B. auf 10MBit/s in den Netzwerkkarteneinstellungen, dann meldet er 10000000 (also 10.000.000 = 10MBits).

    Auch meine 2 anderen Netzwerkschnittstellen (von VMware Workstation) meldet er korrekt.

    Mit WLAN kann ich es gerade nicht testen (Notebook steht beim Kunden) - aber das sieht doch gut aus.

    Hier noch mal das ganze Script inklusive meiner Änderung:

    Spoiler anzeigen
    [autoit]

    ; Author: Chaos2
    ; Script Function: output basic hardware info
    ;
    ; ----------------------------------------------------------------------------

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

    $objWMIService = objget("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

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

    $colSettings = $objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
    $colMemory = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
    $colCPU = $objWMIService.ExecQuery("Select * from CIM_Processor")
    $colVideoinfo = $objWMIService.ExecQuery("Select * from Win32_VideoController")
    $colSound = $objWMIService.ExecQuery("Select * from Win32_SoundDevice")
    $colMouse = $objWMIService.ExecQuery("Select * from Win32_PointingDevice")
    $colMonitor = $objWMIService.ExecQuery("Select * from Win32_DesktopMonitor")
    $colNIC = $objWMIservice.ExecQuery("Select * from Win32_NetworkAdapter WHERE Netconnectionstatus = 2")
    Dim $pcinfo

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

    For $object in $colCPU
    $PcInfo = $pcinfo & StringStripWS($object.Name,1) & @CRLF
    Next

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

    For $objOperatingSystem in $colSettings
    $PcInfo = $PcInfo & $objOperatingSystem.Caption & " Build " & $objOperatingSystem.BuildNumber & " Servicepack " & $objOperatingSystem.ServicePackMajorVersion & "." & $objOperatingSystem.ServicePackMinorVersion & @CRLF
    $PcInfo = $PcInfo & "Available Physical Memory: " & String(Int(Number($objOperatingSystem.FreePhysicalMemory) / 1024)) & " Mb" & @CRLF
    Next

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

    For $object in $colMemory
    $PcInfo = $PcInfo & "Total Physical Memory: " & String(Int(Number($object.TotalPhysicalMemory) / (1024 * 1024))) & " Mb" & @CRLF
    Next

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

    $objFSO = objCreate("Scripting.FileSystemObject")
    $colDrives = $objFSO.Drives

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

    $Opticaldrives = "Opticaldrives : "

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

    For $object in $colDrives
    If ($object.DriveType == 2) then
    $PcInfo = $PcInfo & "Total space on : " & $object.DriveLetter & ":\ (" & $object.VolumeName & ") = " & String(Round((Number($object.TotalSize) / (1024 * 1024 * 1024)),2)) & " Gb" & @CRLF
    $PcInfo = $PcInfo & "Free space on : " & $object.DriveLetter & ":\ (" & $object.VolumeName & ") = " & String(Round((Number($object.FreeSpace) / (1024 * 1024 * 1024)),2)) & " Gb" & @CRLF
    Else
    $Opticaldrives = $Opticaldrives & $object.DriveLetter & ":\ "
    EndIf
    Next

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

    $PcInfo = $PcInfo & $Opticaldrives & @CRLF

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

    For $object in $colVideoinfo
    $PcInfo = $PcInfo & "Video card: " & $object.Description & @CRLF
    Next

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

    For $object in $colSound
    $PcInfo = $PcInfo & "Sound device: " & $object.Description & @CRLF
    Next

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

    For $object in $colMouse
    $PcInfo = $PcInfo & "Mouse : " & $object.Description & @CRLF
    Next

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

    For $object in $colMonitor
    $PcInfo = $PcInfo & "Monitor : " & $object.Description & @CRLF
    Next

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

    For $object in $colNIC
    $Pcinfo = $pcinfo & $object.name & @CRLF
    $Pcinfo = $pcinfo & "LAN-Speed = " & $object.speed /1000 & "Bit/s" & @CRLF
    $Pcinfo = $pcinfo & "LAN-Speed = " & $object.speed / 1000000 & "MBit/s" & @CRLF
    Next
    ClipPut( $pcinfo )
    MsgBox(48,"PCinfo",$PcInfo)
    MsgBox( 48, "PCinfo", "Information was copied to clipboard", 5)

    [/autoit]

    Zur Info - funktionierte unter Windows 7 (64bit) - und wäre gespannt auf die Info ob das auch bei WLAN's funktioniert

  • Einbinden einer DLL in AutoIT (VMware VIX)

    • BLinz
    • 26. Mai 2011 um 15:30

    Moin Moin,

    nachdem ich bereits einiges mit AutoIT lösen konnte wollte ich nun mehr mit VMware (konkret ESX Host's) machen. Natürlich könnte ich die schon diversen Kommandozeilenbefehle wie z.B. "vmrun.exe" einfach fernsteuern - aber für kompliziertere Abfragen und Prüfungen taugt das nichts.

    VMware stellt für alle Produkte die "VMware VIX API" zur Verfügung: http://www.vmware.com/support/developer/vix-api/

    Die API stellt einige DLL Dateien zur Verfügung - und die Funktionen darin sind scheinbar gut Dokumentiert.

    Ich habe versucht mir das ganze bei anderen UDF's ab zu schauen (GDIPlus z.B.) ... aber im Moment stürzt die AutoIT Engine beim Testen einfach ab ...

    Was habe ich bisher gemacht:
    - In der API ist eine "vix.dll" in der die Funktionen sind
    - in der "vix.h" stehen die Aufrufe dazu
    - die ganzen Konstanten aus der "vix.h" habe ich einfach übernommen:


    vorher:

    Spoiler anzeigen
    [autoit]


    typedef int VixServiceProvider;
    enum {
    VIX_SERVICEPROVIDER_DEFAULT = 1,
    VIX_SERVICEPROVIDER_VMWARE_SERVER = 2,
    VIX_SERVICEPROVIDER_VMWARE_WORKSTATION = 3,
    VIX_SERVICEPROVIDER_VMWARE_PLAYER = 4,
    VIX_SERVICEPROVIDER_VMWARE_VI_SERVER = 10,
    };

    [/autoit]

    nacher (also in AutoIT)

    Spoiler anzeigen
    [autoit]


    ;typedef int VixServiceProvider;
    Dim Const $VIX_SERVICEPROVIDER_DEFAULT = 1
    Dim Const $VIX_SERVICEPROVIDER_VMWARE_SERVER = 2
    Dim Const $VIX_SERVICEPROVIDER_VMWARE_WORKSTATION = 3
    Dim Const $VIX_SERVICEPROVIDER_VMWARE_PLAYER = 4
    Dim Const $VIX_SERVICEPROVIDER_VMWARE_VI_SERVER = 10

    [/autoit]

    Nun wollte ich die DLL Funktionen in eine AutoIT Funktion packen:

    vorher:

    Spoiler anzeigen
    [autoit]


    VixHandle VixHost_Connect(int apiVersion,
    VixServiceProvider hostType,
    const char *hostName,
    int hostPort,
    const char *userName,
    const char *password,
    VixHostOptions options,
    VixHandle propertyListHandle,
    VixEventProc *callbackProc,
    void *clientData);

    [/autoit]

    Die Beschreibung hierzu laut Hilfe:

    Spoiler anzeigen
    [autoit]


    Parameters
    apiVersion Must be VIX_API_VERSION.

    hostType With vCenter Server, ESX/ESXi hosts, and VMware Server 2.0, use VIX_SERVICEPROVIDER_VMWARE_VI_SERVER.
    With VMware Workstation, use VIX_SERVICEPROVIDER_VMWARE_WORKSTATION.
    With VMware Player, use VIX_SERVICEPROVIDER_VMWARE_PLAYER.
    With VMware Server 1.0.x, use VIX_SERVICEPROVIDER_VMWARE_SERVER.

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

    hostName Varies by product platform.
    With vCenter Server, ESX/ESXi hosts, and VMware Server 2.0, use a URL of the
    form "https://<hostName>:<port>/sdk" where <hostName> is either the DNS name or IP address.
    If missing, <port> may default to 443 (see Remarks below).
    In VIX API 1.10 and later, you can omit "https://" and "/sdk" specifying just the DNS name or IP address.
    Credentials are required even for connections made locally.
    With Workstation, use NULL to connect to the local host.
    With VMware Server 1.0.x, use the DNS name or IP address for remote connections, or the same as Workstation for local connections.

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

    hostPort TCP/IP port on the remote host. With VMware Workstation and VMware Player, use zero for the local host.
    With ESX/ESXi hosts and VMware Server 2.0 you specify port number within the hostName parameter, so this parameter is ignored (see Remarks below).

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

    login Username for authentication on the remote machine. With VMware Workstation, VMware Player, and VMware Server 1.0.x, use NULL to authenticate as the current user on local host.
    With vCenter Server, ESX/ESXi hosts, and VMware Server 2.0, you must use a valid login.

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

    password Password for authentication on the remote machine. With VMware Workstation, VMware Player, and VMware Server 1.0.x, use NULL to authenticate as the current user on local host.
    With ESX/ESXi and VMware Server 2.0, you must use a valid login.

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

    options Should be zero. The option VIX_HOSTOPTION_USE_EVENT_PUMP has been deprecated and may be removed from future versions of the VIX API.

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

    propertyListHandle Must be VIX_INVALID_HANDLE.

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

    callbackProc Optional callback of type VixEventProc.

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

    clientData Optional user supplied opaque data to be passed to optional callback.

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

    Return Value A job handle. When the job completes, retrieve the Host handle from the job handle using the VIX_PROPERTY_JOB_RESULT_HANDLE property.

    [/autoit]

    In einem Funktionsaufruf habe ich es so versucht: (2 Funktionen)

    Spoiler anzeigen
    [autoit]


    Dim Const $VIX_PROPERTY_NONE = 0
    Dim Const $VIX_API_VERSION = -1
    Dim Const $VIX_INVALID_HANDLE = 0
    Dim Const $VIX_PROPERTY_JOB_RESULT_HANDLE = 3010

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

    Func _vmware_VixHost_Connect($hostType, $hostName, $hostPort, $userName, $password, $options)
    Local $HostHandle = DllCall("vix.dll","INT_PTR","VixHost_Connect", "INT_PTR", $VIX_API_VERSION, "int", $hostType, "str", $hostName, "int", $hostPort, "str", $userName, "str", $password, "int", 0, "int", $VIX_INVALID_HANDLE, "int", 0, "int", 0)
    If @error Then Return SetError(-65535)
    Return SetExtended(0,$hostHandle)
    EndFunc

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

    Func _vmware_VixJob_Wait($jobHandle,$hostHandle)
    Local $VixError = DllCall("vix.dll","INT_PTR","VixJob_Wait","INT_PTR",$jobHandle,"INT",$VIX_PROPERTY_JOB_RESULT_HANDLE,"INT_PTR",$hostHandle,"int",$VIX_PROPERTY_NONE)
    If @error Then Return SetError(-65535)
    Return SetExtended(0,$VixError)
    EndFunc

    [/autoit]

    Im Beispiel von denen sieht der Aufruf so aus:

    Spoiler anzeigen
    [autoit]


    Example
    #include "vix.h"
    int main(int argc, char * argv[])
    {
    VixHandle hostHandle = VIX_INVALID_HANDLE;
    VixHandle jobHandle = VIX_INVALID_HANDLE;
    VixError err;
    // Connect as current user on local host.
    jobHandle = VixHost_Connect(VIX_API_VERSION,
    VIX_SERVICEPROVIDER_VMWARE_VI_SERVER,
    "https://viserver.example.com/sdk", // hostName
    0, // hostPort
    "Administrator", // userName
    "adminpass", // password,
    0, // options
    VIX_INVALID_HANDLE, // propertyListHandle
    NULL, // callbackProc
    NULL); // clientData
    err = VixJob_Wait(jobHandle,
    VIX_PROPERTY_JOB_RESULT_HANDLE,
    &hostHandle,
    VIX_PROPERTY_NONE);
    if (VIX_OK != err) {
    // Handle the error...
    goto abort;
    }
    Vix_ReleaseHandle(jobHandle);
    // Other code goes here...
    abort:
    Vix_ReleaseHandle(jobHandle);
    VixHost_Disconnect(hostHandle);
    }

    [/autoit]

    ich versuche nun es so:

    Spoiler anzeigen
    [autoit]


    Dim $ESXHostHandle = $VIX_INVALID_HANDLE
    Dim $ESXjobHandle = $VIX_INVALID_HANDLE
    Dim $fehler
    $ESXjobHandle = _vmware_VixHost_Connect($VIX_SERVICEPROVIDER_VMWARE_VI_SERVER, "https://vcenter.testdom.local/sdk", 443, "administrator", "passwort", 0)
    $fehler = _vmware_VixJob_Wait($ESXjobHandle,$ESXHostHandle)

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

    und scheitere nun .... ich bräuchte einfach mal einen Denkansatz oder einen Stoß in die richtige Richtung. Um C / C++ /C# hatte ich mich bisher immer gedrückt. Die API kann ich zwar auch mit VB nutzen - aber ich will nichts bauen was hinter her ein ganzes .NET Framework braucht.

    Mit besten Dank im vorraus,

    BLinz

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™