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. Sunny C.

Beiträge von Sunny C.

  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 20. Oktober 2017 um 11:41
    Zitat von Bitnugger

    Hier mal eine Version von mir...

    Danke für die Mühe, da blicke ich erst einmal gar nicht durch :D

  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 19. Oktober 2017 um 20:19

    Vielen herzlichen Dank an alle!

    Ich komme darauf zeitnah zurück @Musashi

    Für heute mache ich hier Schluss, euch einen schönen Abend !

  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 19. Oktober 2017 um 20:08

    Ich habe die Zeile nun entfernt, ich kann kompilieren und das Script ausführen. Aber erhalte noch diese Meldung beim Kompilieren. @Musashi

    Zitat

    +>20:06:01 Starting AutoIt3Wrapper v.17.224.935.0 SciTE v.3.7.3.0 Keyboard:00000407 OS:WIN_10/ CPU:X64 OS:X64 Environment(Language:0407) CodePage:0 utf8.auto.check:4

    +> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Users\Lenovo\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\Lenovo\AppData\Local\AutoIt v3\SciTE

    >Running AU3Check (3.3.14.2) from:C:\Program Files (x86)\AutoIt3 input:C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\Final_Test_Tools_v3.au3

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\functions.au3"(186,77) : warning: $getModelName: possibly used before declaration.

    $keydefus = @WorkingDir & "WTP\asus-wtp\bin\keydef\keydef" & $getModelName &

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\functions.au3"(234,36) : warning: $getSerial: possibly used before declaration.

    $serial = StringStripWS($getSerial,

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\Final_Test_Tools_v3.au3 - 0 error(s), 2 warning(s)

    ->20:06:02 AU3Check ended. Press F4 to jump to next error.rc:1

    >Running:(3.3.14.2):C:\Program Files (x86)\AutoIt3\aut2exe\aut2exe.exe /in "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\Final_Test_Tools_v3.au3" /out "C:\Users\Lenovo\AppData\Local\AutoIt v3\Aut2exe\~AU7D9E.tmp.exe" /nopack /icon "G:\WTP\finaltest\redicon.ico" /comp 2

    +>20:06:04 Aut2exe.exe ended.C:\Users\Lenovo\AppData\Local\AutoIt v3\Aut2exe\~AU7D9E.tmp.exe. rc:0

    +>20:06:04 Created program:C:\Users\Lenovo\Documents\ISN AutoIt Studio\Release\Final Test Tools v3\FinalTestToolsv3.exe

    +>20:06:05 AutoIt3Wrapper Finished.

    Alles anzeigen
  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 19. Oktober 2017 um 20:05

    Ich habe in einem Beitrag alles gepostet, allerdings via Pastebin, da es zu viele Zeichen verursacht:

    hauptscript: https://pastebin.com/7F18WgYi

    functions datei: https://pastebin.com/m93mxXRD

    gui: https://pastebin.com/mpGtxGPW

    Ich werde die besagte Zeile mal entfernen. Danke für die Info.

  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 19. Oktober 2017 um 19:58

    Ok, super und ja, es hilft enorm um es etwas zu verstehen.

    Kannst du mir auch sagen wie und wo ich alle anderen Variablen nun mit "Dim, Local oder Global" setzen muss?

    Wo muss ich z.B "Dim $getModelName" einfügen, damit der der Fehler (und weitere) nicht mehr auftauchen:

    Zitat

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\functions.au3"(186,77) : warning: $getModelName: possibly used before declaration.

    $keydefus = @WorkingDir & "WTP\asus-wtp\bin\keydef\keydef" & $getModelName &

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    Oder dieser

    Zitat

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\fttgui.isf"(10,64) : warning: $ftt_gui possibly not declared/created yet

    $ftt_gui = GUICreate("Final Test Tools v3",517,208,-1,-1,-1,-1)

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 19. Oktober 2017 um 18:56

    Ich müsste dann aber "BIOSVersion(0)" mit "SMBIOSBIOSVersion" ersetzen, weil "SMBIOSBIOSVersion" immer "MODEL.VERSION" ausgibt.

    Das Problem bei den ASUS Geräten ist, dass ich die Bios Version nur mit "SMBIOSBIOSVersion" auslesen kann mittels "MODEL.BIOSVERSION"s Muster.

    Das Model kann man auch getrennt ausgeben und wäre in dem Fall mittels "wmic computersystem get model" möglich und würde dann "X751SA" ausgeben. Nur wie gesagt die Version, ist dabei nicht mit "BIOSVersion(0)" zu bekommen.

    Scheint zu klappen

    C
    #include <MsgBoxConstants.au3>
    #include <Array.au3>
    
    Opt('MustDeclareVars', 1)  ; Variablen müssen vor der Verwendung deklariert werden
    Global $aBIOSInfo = _GetBIOSInfo()
    IF Not @error Then
        ;_ArrayDisplay($aBIOSInfo)
        MsgBox(52, "Bios Verion", $aBIOSInfo[4])
        MsgBox(52, "Model", $aBIOSInfo[3])
        MsgBox(52, "Seriennummer", $aBIOSInfo[2])
    Else
        ConsoleWrite("Fehler in der Funktion _GetBIOSInfo" & @CRLF)
    EndIf
    
    Func _GetBIOSInfo()
        Local $objWMI, $colItems, $objItem
        Local $sBIOSVersion, $sManufacturer, $sSerialNumber
        Local $aReturn[5]
        Local $sModelName = '', $sVersion = ''  ; Werte aus $sBIOSVersion
        Local $iPos
        $objWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\cimv2")
        $colItems = $objWMI.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", 0x10 + 0x20)
        If IsObj($colItems) Then
            For $objItem In $colItems
                $sBIOSVersion = "X751SA.705" ;$objItem.SMBIOSBIOSVersion
                $sManufacturer = $objItem.Manufacturer
                $sSerialNumber = StringReplace(StringReplace($objItem.SerialNumber, "SSN12345678901234567", "Nicht vorhanden !"), "na", "Nicht vorhanden !")
                ; ModelName und Version aus $sBIOSVersion ermitteln :
                ; ----------------------------------------------------
                ; Prüfen, ob in $sBIOSVersion ein Punkt vorkommt, also z.B. X751SA.705
                ; Falls ja :
                ; -> String von hinten auswerten, und beim ersten Vorkommen aufteilen
                ; Falls nicht :
                ; -> $sModelName mit $sBIOSVersion besetzen
                ; -> damit ist $sModelName zwar identisch wie $sBIOSVersion, aber egal.
                ; -> $sVersion leerlassen
                $iPos = StringInStr($sBIOSVersion, '.', 0, -1)
                If $iPos > 0 Then
                    $sModelName = StringLeft($sBIOSVersion, $iPos - 1)
                    $sVersion = StringRight($sBIOSVersion, StringLen($sBIOSVersion) - $iPos)
                Else
                    $sModelName = $sBIOSVersion
                EndIf
                ; Rückgabearray besetzen :
                $aReturn[0] = $sBIOSVersion
                $aReturn[1] = $sManufacturer
                $aReturn[2] = $sSerialNumber
                $aReturn[3] = $sModelName
                $aReturn[4] = $sVersion
                Return $aReturn
            Next
        Else
            SetError(1)
        EndIf
    EndFunc ;==>_GetBIOSInfo
    Alles anzeigen

    Ich gehe davon aus, dass ich vom Code-Technischen her, deins nehmen sollte oder?

    Jetzt bekomme ich natürlich bei allen Variablen, eine Fehlermeldung. Wie und wo, muss ich diese jetzt erst angeben?

    Zitat

    AutoIt3 Syntax Checker v3.3.14.2 Copyright (c) 2007-2013 Tylo & AutoIt Team

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\functions.au3"(186,77) : warning: $getModelName: possibly used before declaration.

    $keydefus = @WorkingDir & "WTP\asus-wtp\bin\keydef\keydef" & $getModelName &

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\functions.au3"(234,36) : warning: $getSerial: possibly used before declaration.

    $serial = StringStripWS($getSerial,

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\Final_Test_Tools_v3.au3"(35,36) : warning: $getBiosVersion possibly not declared/created yet

    $getBiosVersion = $aBIOSInfo[2]

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\fttgui.isf"(10,64) : warning: $ftt_gui possibly not declared/created yet

    $ftt_gui = GUICreate("Final Test Tools v3",517,208,-1,-1,-1,-1)

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\fttgui.isf"(11,43) : warning: $menu_extras possibly not declared/created yet

    $menu_extras = GUICtrlCreateMenu("Extras")

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\fttgui.isf"(12,93) : warning: $menu_extras_kbflash possibly not declared/created yet

    $menu_extras_kbflash = GUICtrlCreateMenuItem("Keyboard Backlight Flasher",$menu_extras,-1,0)

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    Alles anzeigen
  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 19. Oktober 2017 um 18:33

    Ok, habe mich noch einmal versucht.

    Kann das jemand gegentesten und mir sagen, ob es Code-Technisch ok ist?

    C
    #include <MsgBoxConstants.au3>
    #include <Array.au3>
    
    Opt('MustDeclareVars', 1)  ; Variablen müssen vor der Verwendung deklariert werden
    Global $aBIOSInfo = _GetBIOSInfo()
    IF Not @error Then
        ;_ArrayDisplay($aBIOSInfo)
        MsgBox(52, "Bios Verion", $aBIOSInfo[0])
        MsgBox(52, "Model", $aBIOSInfo[2])
        MsgBox(52, "Seriennummer", $aBIOSInfo[1])
    Else
        ConsoleWrite("Fehler in der Funktion _GetBIOSInfo" & @CRLF)
    EndIf
    
    Func _GetBIOSInfo()
        Local $objWMI, $colItems, $objItem
        Local $sBIOSVersion, $sModelName, $splitBios, $sSerialNumber
        Local $aReturn[3]
        $objWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\cimv2")
        $colItems = $objWMI.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", 0x10 + 0x20)
        If IsObj($colItems) Then
            For $objItem In $colItems
    
                If StringInStr("X751SA.705", ".") Then
                    $splitBios = StringSplit("X751SA.705", ".")
                    $sBIOSVersion = $splitBios[2]
                    $sModelName = $splitBios[1]
                Else
                    $sModelName = "x"
                    $sBIOSVersion = "xx"
                EndIf
                $sSerialNumber = StringReplace(StringReplace($objItem.SerialNumber, "SSN12345678901234567", "Nicht vorhanden !"), "na", "Nicht vorhanden !")
                $aReturn[0] = $sBIOSVersion
                $aReturn[1] = $sSerialNumber
                $aReturn[2] = $sModelName
                Return $aReturn
            Next
        Else
            SetError(1)
        EndIf
    EndFunc   ;==>_GetBIOSInfo
    Alles anzeigen

    Wenn ich "X751SA.705" verwende, wird mir jeweils X751SA und 705 ausgegeben.

    Wenn ich "X751SA705" verwende, wird mir jeweils X und XX ausgegeben.

    Wäre das dann so korrekt?

  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 19. Oktober 2017 um 17:44

    Ein großes Danke an alle die gerade mitwirken.

    Bei allen ASUS Geräten, wurde vorher immer via CMD wie folgt ausgelesen:

    Code
    @echo off
    set _root=%~dp0\
    PUSHd %_root%
    
    wmic bios get smbiosbiosversion > %_root%\exbios.txt

    Die Ausgabe war immer, egal welches Model: "MODEL.VERSION", darum wollte (muss?) ich das via "." splitten.

    Ich habe leider kein ASUS Gerät Zuhause um zu testen, ob ich mit der obigen Funktion testen kann, aber ich erinnere mich daran, dass ich sonst falsche Informationen erhalte.

    Ich dachte da an sowas wie if-else, falls kein "." vorkommt....

    Kompliziert :/

  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 19. Oktober 2017 um 17:05

    Puhh, ich habe einfach noch zu wenig Erfahrung.

    alpines,

    würdest du mir meine Funktion dementsprechend einmal vernünftig aufbauen? Ich wäre dir sehr dankbar und weiß das zu schätzen!!

    Die aktuelle Funktion:

    Code
    Func _SystemInfo()
        $WMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\cimv2")
        $getBIOS = $WMI.ExecQuery("Select * from Win32_BIOS")
        For $element In $getBIOS
            Local $splitBios = StringSplit("X751SA.705", ".")
            Global $getBiosVersion = $splitBios[2]
            Global $getModelName = $splitBios[1]
            Global $getSerial = StringReplace(StringReplace($element.SerialNumber, "SSN12345678901234567", "Nicht vorhanden !"), "na", "Nicht vorhanden !")
        Next
    EndFunc   ;==>_SystemInfo
  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 19. Oktober 2017 um 16:54

    Bin ich hier irgendwo auf dem richtigen weg :/ ?

    C
    #include <MsgBoxConstants.au3>
    #include <Array.au3>
    
    Local $d = "."
    Local $info = "X751SA.705"
    $pairs = StringSplit($info, $d , 2)
    For $i = 0 To UBound($pairs) - 1
        If $pairs[$i] = "" Then ContinueLoop
        ConsoleWrite($pairs[$i] & @CRLF)
    Next
    
    
    MsgBox(52, "model:", $pairs[0])
    MsgBox(52, "bios:", $pairs[1])
    Alles anzeigen
  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 19. Oktober 2017 um 15:01

    Hallo zusammen,

    erst einmal Danke für die Antworten und entschuldigt, dass ich mich unverständlich ausgedrückt habe.

    Das gesamte Script funktioniert bisher Reibungslos, natürlich bin ich für jeden Vorschlag/Idee dankbar, wie man etwas besser realisieren kann,

    Auf den Firmenrechner (ASUS), lese ich mittels "$element.SMBIOSBIOSVersion" Das Model und die Bios-Version aus. Die Asus Geräte geben folgendes zurück: Beispiel: X751SA.705

    Ich möchte lediglich X751SA und 705 als einzelne Variablen zurück geben.


    Da auf dem heimischen Rechner "SMBIOSBIOSVersion" was anderes zurück gibt wie z.B "A7CN40WW", nehme ich als Test "

    Code
    StringSplit("X751SA.305", ".")

    Und dieses Beispiel funktioniert:

    Code
    Func _SystemInfo()
        $WMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\cimv2")
        $getBIOS = $WMI.ExecQuery("Select * from Win32_BIOS")
    
        For $element In $getBIOS
            Local $splitBios = StringSplit("X751SA.705", ".")
            Global $getBiosVersion = $splitBios[2]
            Global $getModelName = $splitBios[1]
            Global $getSerial = StringReplace(StringReplace($element.SerialNumber, "SSN12345678901234567", "Nicht vorhanden !"), "na", "Nicht vorhanden !")
        Next
    
    EndFunc   ;==>_SystemInfo
    Alles anzeigen

    Ich habe wohl vorher irgendeinen Dummen Fehler eingebaut.

    Wie kann ich denn überprüfen, ob "$splitBios" den Zeichensatz "X751SA.705" enhält um zu splitten und wenn nicht, dass dann Platzhalter für "getBios..." und/oder "getModel.." eingesetzt werden?

    Aber nun zu den Globals, wenn ich diese entferne und die Funktion so ausieht:

    Code
    Func _SystemInfo()
        $WMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\cimv2")
        $getBIOS = $WMI.ExecQuery("Select * from Win32_BIOS")
    
        For $element In $getBIOS
            Local $splitBios = StringSplit("X751SA.705", ".")
            $getBiosVersion = $splitBios[2]
            $getModelName = $splitBios[1]
            $getSerial = StringReplace(StringReplace($element.SerialNumber, "SSN12345678901234567", "Nicht vorhanden !"), "na", "Nicht vorhanden !")
        Next
    
    EndFunc   ;==>_SystemInfo
    Alles anzeigen

    Erhalte ich beim kompilieren diese Fehler

    Zitat

    +>14:56:33 Starting AutoIt3Wrapper v.17.224.935.0 Keyboard:00000407 OS:WIN_10/ CPU:X64 OS:X64 Environment(Language:0407) CodePage: utf8.auto.check:

    +> SciTEDir => C:\Program Files (x86)\ISN AutoIt Studio\Data UserDir => C:\Users\Lenovo\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\Lenovo\AppData\Local\AutoIt v3\SciTE

    >Running AU3Check (3.3.14.2) from:C:\Program Files (x86)\AutoIt3 input:C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\Final_Test_Tools_v3.au3

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\functions.au3"(160,77) : warning: $getModelName: possibly used before declaration.

    $keydefus = @WorkingDir & "WTP\asus-wtp\bin\keydef\keydef" & $getModelName &

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\functions.au3"(208,36) : warning: $getSerial: possibly used before declaration.

    $serial = StringStripWS($getSerial,

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\fttgui.isf"(55,58) : warning: $getBiosVersion: possibly used before declaration.

    $menu_bios = GUICtrlCreateMenu("BIOS: " & $getBiosVersion)

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\functions.au3"(160,77) : error: $getModelName: undeclared global variable.

    $keydefus = @WorkingDir & "WTP\asus-wtp\bin\keydef\keydef" & $getModelName &

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\functions.au3"(208,36) : error: $getSerial: undeclared global variable.

    $serial = StringStripWS($getSerial,

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\fttgui.isf"(55,58) : error: $getBiosVersion: undeclared global variable.

    $menu_bios = GUICtrlCreateMenu("BIOS: " & $getBiosVersion)

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\Final_Test_Tools_v3.au3 - 3 error(s), 3 warning(s)

    !>14:56:35 AU3Check ended. Press F4 to jump to next error.rc:2

    >Running:(3.3.14.2):C:\Program Files (x86)\AutoIt3\aut2exe\aut2exe.exe /in "C:\Users\Lenovo\Documents\ISN AutoIt Studio\Projects\Final Test Tools v3\Final_Test_Tools_v3.au3" /out "C:\Users\Lenovo\AppData\Local\AutoIt v3\Aut2exe\~AU2E46.tmp.exe" /nopack /icon "G:\WTP\finaltest\redicon.ico" /comp 2

    +>14:56:38 Aut2exe.exe ended.C:\Users\Lenovo\AppData\Local\AutoIt v3\Aut2exe\~AU2E46.tmp.exe. rc:0

    +>14:56:38 Created program:C:\Users\Lenovo\Documents\ISN AutoIt Studio\Release\Final Test Tools v3\FinalTestToolsv3.exe

    +>14:56:39 AutoIt3Wrapper Finished.

    Alles anzeigen

    [Blockierte Grafik: http://fs5.directupload.net/images/171019/uwbzifqm.png]

    Daher habe ich die Globals drin gelassen.

  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 18. Oktober 2017 um 21:16

    Bitte mit $test[2] ersetzen.

    Ich erhalte immer diesen oben genannten Fehler.

    Wenn ich die Variablen nicht mit Global deklarieren, bekomme ich die Meldung, dass einige Variablen nicht global deklariert würden ?!

    Zu lang, daher extern

    Script: https://pastebin.com/teQ8eMuJ

    functions.au3: https://pastebin.com/epFN10Fa

    GUI: https://pastebin.com/YRWyi0Ty

  • StringSplit innhalber einer Funktion, funktioniert nicht

    • Sunny C.
    • 18. Oktober 2017 um 19:11

    Hallo zusammen,

    ich habe folgende Funktion:

    Code
    Func _SystemInfo()
        $WMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\cimv2")
        $getBIOS = $WMI.ExecQuery("Select * from Win32_BIOS")
        
        For $element In $getBIOS
            Global $getBiosVersion = $element.SMBIOSBIOSVersion
            Global $getSerial = StringReplace(StringReplace($element.SerialNumber, "SSN12345678901234567", "Nicht vorhanden !"), "na", "Nicht vorhanden !")
        Next
    
    EndFunc   ;==>_SystemInfo

    Ich habe es um getModel erweitert:

    Code
    Func _SystemInfo()
        $WMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\cimv2")
        $getBIOS = $WMI.ExecQuery("Select * from Win32_BIOS")
        
        For $element In $getBIOS
            Global $getBiosVersion = $element.SMBIOSBIOSVersion
            Local $test = StringSplit("1111" & ".DATMODEL", ".")
            Global $getModelName = $modelnamegood[2]
            Global $getSerial = StringReplace(StringReplace($element.SerialNumber, "SSN12345678901234567", "Nicht vorhanden !"), "na", "Nicht vorhanden !")
        Next
    EndFunc   ;==>_SystemInfo
    Alles anzeigen
    Code
    Local $test = StringSplit("1111" & ".DATMODEL", ".")
    Code
    Global $getModelName = $modelnamegood[2]

    Ich kann es so nicht ausgeben, es kommt

    Error: Subscript used on non-accessible variable.

    Es wollte eigentlich so gesplittet werden oder?

    [1] 1111

    [2] DATMODEL

    Und ich möchte "DATMODEL" ausgeben.

    include array ist auch vorhanden

    Code
    $getSerial und $getBiosVersion wird mir ausgegeben

    Danke für Hilfe.

    LG

  • Script pausiert einfach und lässt keine Ausführungen mehr zu

    • Sunny C.
    • 3. März 2017 um 10:59

    Ich habe den Fehler gefunden.
    Ich habe zwei gleiche Abfragen in einer Funktion gehabt, dass hat das Problem verursacht.
    Dennoch Danke.

  • Script pausiert einfach und lässt keine Ausführungen mehr zu

    • Sunny C.
    • 27. Februar 2017 um 09:27

    Hallo zusammen,

    mein Script startet und führt die ersten Aufgaben durch. Aber dann pausiert das Script und kein Button oder Menüitem führt eine Aktion aus.
    Kann mir jemand das Script anpassen, so das dieser Fehler behoben ist und kurz erklären woran das lag?

    Und das Fenster, wird auch nicht verschoben :(

    Spoiler anzeigen
    AutoIt
    If ProcessExists("sysprep.exe") Then
    		_dragsysprepwindow()
    	EndIf
    AutoIt
    Func _dragsysprepwindow()
    	Global $alang[5][2]
    	Local $alang[5][2]
    	$alang[5][2]
    	$stext = "(Sysprep)"
    	$ifound = _arraysearch($alang, @OSLang)
    	If $ifound <> -1 Then $stext = $alang[$ifound][1]
    	$hwnd = WinGetHandle("[CLASS:#32770]", $stext)
    	$apos = WinGetPos($hwnd)
    	WinMove($hwnd, "", @DesktopWidth - $apos[2] - 15, @DesktopHeight - $apos[3] - (@DesktopHeight - 267 - 15))
    EndFunc
    Alles anzeigen

    Hier das Script:

    Spoiler anzeigen
    AutoIt
    Opt("GUIResizeMode", $gui_dockleft)
    FileCreateShortcut(@WorkingDir & "WTP\asus-wtp\bin\UploadTool\UploadTool.exe", @WorkingDir & "WTP\finaltest\UploadTool.lnk", @WorkingDir & "WTP\asus-wtp\bin\UploadTool\")
    FileCreateShortcut(@WorkingDir & "WTP\asus-wtp\bin\AsusWTP.exe", @WorkingDir & "WTP\finaltest\DiagEG.lnk", @WorkingDir & "WTP\asus-wtp\bin\")
    Local $aarray = 0
    RunWait(@WorkingDir & "WTP\finaltest\exbios.bat")
    If NOT _filereadtoarray(@WorkingDir & "WTP\finaltest\exbios.txt", $aarray, 0) Then
    	MsgBox($mb_systemmodal, "", "There was an error reading the exbios file. @error: " & @error)
    EndIf
    Local $biosmodel = StringSplit($aarray[1], ".")
    Local $model = StringStripWS($biosmodel[1], 8)
    Local $bios = StringStripWS($biosmodel[2], 8)
    #Region ### START Koda GUI section ### Form=
    	$final = GUICreate("Final Test Tools", 348, 357, 188, 140)
    	$menuextra = GUICtrlCreateMenu("Extras")
    	$backlightflash = GUICtrlCreateMenuItem("Keyboard Backlight Flash", $menuextra)
    	$batmonitor = GUICtrlCreateMenuItem("Battery Test", $menuextra)
    	$aspowercfg = GUICtrlCreateMenuItem("AsPowerCfg", $menuextra)
    	$audiotools = GUICtrlCreateMenuItem("AudioTools", $menuextra)
    	$uninstaller = GUICtrlCreateMenuItem("Deinstallation", $menuextra)
    	$menumodel = GUICtrlCreateMenu("MODEL: " & $model)
    	$findkeydef = GUICtrlCreateMenuItem("Tastaturlayouts", $menumodel)
    	$menubios = GUICtrlCreateMenu("BIOS: " & $bios)
    	$checkbios = GUICtrlCreateMenuItem("Nachprüfen", $menubios)
    	$fixbios = GUICtrlCreateMenuItem("BIOS-File FIX", $menubios)
    	$sortbios = GUICtrlCreateMenuItem("Bios Ordner sortieren", $menubios)
    	$winflash = GUICtrlCreateMenuItem("WinFlash ausführen", $menubios)
    	$menusystem = GUICtrlCreateMenu("SYSTEM: " & @CPUArch)
    	$menuhelp = GUICtrlCreateMenu("?")
    	$license = GUICtrlCreateMenuItem("Lizenz", $menuhelp)
    	$team = GUICtrlCreateMenuItem("Final Angels", $menuhelp)
    	$info = GUICtrlCreateMenuItem("Info", $menuhelp)
    	$group1 = GUICtrlCreateGroup("Final Test Tools", 8, 8, 329, 121)
    	$button1 = GUICtrlCreateButton("Start Final Test", 16, 32, 91, 41)
    	$button2 = GUICtrlCreateButton("AsusWTP", 72, 80, 91, 41)
    	$button3 = GUICtrlCreateButton("Windows Active", 176, 80, 91, 41)
    	$button4 = GUICtrlCreateButton("UploadTool", 224, 32, 91, 41)
    	$button5 = GUICtrlCreateButton("2ND Injection", 120, 32, 91, 41)
    	$group2 = GUICtrlCreateGroup("SN / KEY", 8, 136, 153, 169)
    	$button6 = GUICtrlCreateButton("ACTIVATE /ATO", 24, 160, 123, 41)
    	$button7 = GUICtrlCreateButton("KEY RESET (OA30)", 24, 208, 123, 41)
    	$button8 = GUICtrlCreateButton("SN BURNING", 24, 256, 123, 41)
    	$group3 = GUICtrlCreateGroup("Seconds", 184, 136, 153, 169)
    	$button9 = GUICtrlCreateButton("BATTERIE EATER", 200, 160, 123, 41)
    	$button10 = GUICtrlCreateButton("AUTOTIMER", 200, 208, 123, 41)
    	$button11 = GUICtrlCreateButton("FIND WTP", 200, 256, 123, 41)
    	$version = GUICtrlCreateLabel("v2 Beta", 56, 312, 41, 17)
    	GUICtrlSetColor($version, $color_red)
    	$copy = GUICtrlCreateLabel("(c) by Benjamin Böhnke", 200, 312, 116, 17)
    	GUICtrlCreateGroup("", -99, -99, 1, 1)
    	GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $bioscompare = StringRegExp(FileRead(@WorkingDir & "WTP\finaltest\NB_BIOS.txt"), $model & ".*?\ = (\d+)", 3)
    If NOT ($bios = $bioscompare[0]) Then
    	$bios_check = MsgBox(4 + 48, "Nicht aktuell", "Bios aktualisieren" & @CRLF & "AKTUELL: " & $bios & @CRLF & "NEU: " & $bioscompare[0] & @CRLF & "WinFlash ausführen ?")
    	GUICtrlSetColor($bios, $color_red)
    	Switch $bios_check
    		Case 6
    			_winflash()
    		Case 7
    		Case 2
    	EndSwitch
    EndIf
    While 1
    	$nmsg = GUIGetMsg()
    	Switch $nmsg
    		Case $gui_event_close
    			Exit
    		Case $findkeydef
    			_findkeydef()
    		Case $checkbios
    			_checkbios()
    		Case $fixbios
    			_fixbios()
    		Case $sortbios
    			ShellExecute(@WorkingDir & "WTP\finaltest\filetime\NewFileTime_x64.exe")
    		Case $winflash
    			_winflash()
    		Case $backlightflash
    			_backlightflash()
    		Case $batmonitor
    			_batmonitor()
    		Case $aspowercfg
    			ShellExecute(@WorkingDir & "WTP\finaltest\AsPowerCfg\AsPowerCfg_BAT.exe")
    		Case $audiotools
    			_audiotools()
    		Case $uninstaller
    			ShellExecute(@WorkingDir & "WTP\finaltest\appwizcontrol.bat")
    		Case $button1
    			_button1()
    		Case $button5
    			_button5()
    		Case $button4
    			ShellExecute(@WorkingDir & "WTP\finaltest\UploadTool.lnk")
    		Case $button2
    			ShellExecute(@WorkingDir & "WTP\finaltest\DiagEG.lnk")
    		Case $button3
    			ShellExecute(@WorkingDir & "WTP\WindowsActive\WindowsActive.exe")
    		Case $button6
    			ShellExecute(@WorkingDir & "WTP\finaltest\slmgr.bat")
    		Case $button7
    			_oa30()
    		Case $button8
    			ShellExecute(@WorkingDir & "WTP\finaltest\snburn.bat")
    		Case $button9
    			ShellExecute(@WorkingDir & "WTP\finaltest\bateater\BEPro.exe")
    		Case $button10
    			ShellExecute(@WorkingDir & "WTP\finaltest\time.bat")
    			Sleep(1000)
    			ShellExecute(@WorkingDir & "WTP\finaltest\time.bat")
    		Case $button11
    			ShellExecute(@WorkingDir & "WTP\finaltest\findwtp\FindWTPresult.exe")
    		Case $license
    			ShellExecute("notepad.exe", @WorkingDir & "WTP\finaltest\License.txt")
    		Case $team
    			MsgBox(64, "Das aktuelle Team", "Final Angels" & @CRLF & @CRLF & "Benny Böhnke" & @CRLF & "Daniel Agapov" & @CRLF & "Engin Tasbilek" & @CRLF & "Mathias Pernitzki" & @CRLF & "Hrvoje Majanovic")
    		Case $info
    			ShellExecute("notepad.exe", @WorkingDir & "WTP\finaltest\info.txt")
    		Case $final
    	EndSwitch
    WEnd
    
    
    Func _findkeydef()
    	$keydefus = @WorkingDir & "WTP\asus-wtp\bin\keydef\keydef" & $model & "us.ini"
    	$keydefeu = @WorkingDir & "WTP\asus-wtp\bin\keydef\keydef" & $model & "eu.ini"
    	$ifileexistsus = FileExists($keydefus)
    	$ifileexistseu = FileExists($keydefeu)
    	If $ifileexistsus Then
    		_winapi_shellopenfolderandselectitems($keydefus)
    		ShellExecute($keydefus)
    	ElseIf $ifileexistseu Then
    		_winapi_shellopenfolderandselectitems($keydefeu)
    		ShellExecute($keydefeu)
    	Else
    		MsgBox($mb_systemmodal, "", "Cant find US or EU keydef-File. Only JP or nothing.")
    	EndIf
    EndFunc
    
    
    Func _checkbios()
    	If NOT ($bios = $bioscompare[0]) Then
    		$biosold = MsgBox(4 + 48, "Nicht aktuell", "Bios aktualisieren" & @CRLF & "AKTUELL: " & $bios & @CRLF & "NEU: " & $bioscompare[0] & @CRLF & "Biso aktualisieren und WinFlash ausführen ?")
    		Select
    			Case $biosold = 6
    				_winflash()
    			Case $biosold = 1
    		EndSelect
    	Else
    		MsgBox(0 + $mb_iconinformation, "Aktuell", "Bios ist aktuell !" & @CRLF & "VERSION: " & $bios)
    	EndIf
    EndFunc
    
    
    Func _winflash()
    	If FileExists("C:\Program Files (x86)\ASUS\WinFlash\WinFlash.exe") Then
    		MsgBox(64 + $mb_iconinformation, "Installiert", "WinFlash ist installiert und wird ausgeführt.")
    		FileCreateShortcut("C:\Program Files (x86)\ASUS\WinFlash\WinFlash.exe", @WorkingDir & "WTP\finaltest\WinFlash.lnk", "C:\Program Files (x86)\ASUS\WinFlash\")
    		Sleep(500)
    		ShellExecute(@WorkingDir & "WTP\finaltest\WinFlash.lnk")
    	Else
    		MsgBox(64, "Nicht vorhanden", "WinFlash wird nun installiert")
    		ShellExecute(@WorkingDir & "WTP\finaltest\winflash_install\Setup.exe")
    	EndIf
    EndFunc
    
    
    Func _fixbios()
    	Switch MsgBox(3, "BIOS-Fix", "Möchtest du das BIOS-File korrigieren?")
    		Case 6
    			$rc = FileCopy(@WorkingDir & "WTP\finaltest\NB_BIOS.txt", @WorkingDir & "WTP\asus-wtp\bin\conf\", 1)
    			If $rc > 0 Then
    				MsgBox(64, "OK!", "BIOS-File erfolgreich korrigiert!")
    			Else
    				MsgBox(48, "Error", "BIOS-FILE konnte nicht korrigiert werden")
    			EndIf
    		Case 7
    		Case 2
    	EndSwitch
    EndFunc
    
    
    Func _backlightflash()
    	If NOT @CPUArch = "X86" Then
    		MsgBox(64, "Keyboard Backlight Flasher", @CPUArch & " Variante starten")
    		ShellExecute(@WorkingDir & "WTP\finaltest\kbBacklightFlash.bat")
    	Else
    		MsgBox(64, "Keyboard Backlight Flasher", @CPUArch & " Variante starten")
    		ShellExecute(@WorkingDir & "WTP\finaltest\kbBacklightFlash64.bat")
    	EndIf
    EndFunc
    
    
    Func _batmonitor()
    	FileCreateShortcut(@WorkingDir & "WTP\asus-wtp\advance_test\BatMonitor.exe", @WorkingDir & "WTP\finaltest\BatMonitor.lnk", @WorkingDir & "WTP\asus-wtp\bin\")
    	Sleep(500)
    	ShellExecute(@WorkingDir & "WTP\finaltest\BatMonitor.lnk")
    EndFunc
    
    
    Func _audiotools()
    	$realtek = "C:\Program Files\Realtek\Audio\HDA\RAVCpl64.exe"
    	$smartaudio = "C:\Program Files\CONEXANT\SAII\SmartAudio.exe"
    	$ifileexistsrealtek = FileExists($realtek)
    	$ifileexistssmartaudio = FileExists($smartaudio)
    	If $ifileexistsrealtek Then
    		ShellExecute($realtek)
    	ElseIf $ifileexistssmartaudio Then
    		ShellExecute($smartaudio)
    	Else
    		MsgBox(48, "Überprüfen", "Möglicherweise kein Audiotool vorhanden!")
    	EndIf
    EndFunc
    
    
    Func _button1()
    	ShellExecute(@WorkingDir & "WTP\finaltest\time.bat")
    	Sleep(6000)
    	ShellExecute(@WorkingDir & "WTP\finaltest\time.bat")
    	Sleep(2000)
    	ShellExecute(@WorkingDir & "WTP\finaltest\DisableLID.exe")
    	Sleep(2000)
    	ShellExecute(@WorkingDir & "WTP\finaltest\DisableLID_XP.exe")
    	Sleep(2000)
    	ShellExecute(@WorkingDir & "WTP\finaltest\nbsettings.bat")
    	Sleep(2000)
    	ShellExecute(@WorkingDir & "WTP\finaltest\DiagEG.lnk")
    	Sleep(3000)
    	ShellExecute(@WorkingDir & "WTP\finaltest\nbsettings.bat")
    	Sleep(20000)
    	Switch @OSVersion
    		Case "WIN_10"
    			ShellExecute(@WorkingDir & "WTP\WindowsActive\WindowsActive.exe")
    			_dragwindowsactivewindow()
    		Case "WIN_81"
    			ShellExecute(@WorkingDir & "WTP\WindowsActive\WindowsActive.exe")
    			_dragwindowsactivewindow()
    		Case "WIN_8"
    			ShellExecute(@WorkingDir & "WTP\WindowsActive\WindowsActive.exe")
    			_dragwindowsactivewindow()
    	EndSwitch
    	If ProcessExists("FINALTESTv2.exe") Then
    		_dragfinaltesttoolswindow()
    	 EndIf
    	If ProcessExists("sysprep.exe") Then
    		_dragsysprepwindow()
    	EndIf
    EndFunc
    
    
    Func _dragsysprepwindow()
    	Global $alang[5][2]
    	Local $alang[5][2]
    	$alang[5][2]
    	$stext = "(Sysprep)"
    	$ifound = _arraysearch($alang, @OSLang)
    	If $ifound <> -1 Then $stext = $alang[$ifound][1]
    	$hwnd = WinGetHandle("[CLASS:#32770]", $stext)
    	$apos = WinGetPos($hwnd)
    	WinMove($hwnd, "", @DesktopWidth - $apos[2] - 15, @DesktopHeight - $apos[3] - (@DesktopHeight - 267 - 15))
    EndFunc
    
    
    Func _dragwindowsactivewindow()
    	WinWait("[CLASS:#32770; TITLE:WindowsActive]")
    	$hwnd = WinGetHandle("[CLASS:#32770; TITLE:WindowsActive]")
    	$apos = WinGetPos($hwnd)
    	WinMove($hwnd, "", @DesktopWidth - $apos[2] - 15, @DesktopHeight - $apos[3] - (@DesktopHeight - 284 - 267 - 10 - 15))
    EndFunc
    
    
    Func _dragfinaltesttoolswindow()
    	WinWait("[TITLE:Final Test Tools]")
    	$hwnd = WinGetHandle("[TITLE:Final Test Tools]")
    	$apos = WinGetPos($hwnd)
    	WinMove($hwnd, "", @DesktopWidth - $apos[2] - (@DesktopWidth - 329 - 12), @DesktopHeight - $apos[3] - (@DesktopHeight - 499 - 269 - 25))
    	WinWait("[CLASS: AutoIt v3 GUI; TITLE:Final Test Tools]")
    	$hwnd = WinGetHandle("[CLASS: AutoIt v3 GUI; TITLE:Final Test Tools]")
    	$apos = WinGetPos($hwnd)
    	WinMove($hwnd, "", @DesktopWidth - $apos[2] - (@DesktopWidth - 329 - 12), @DesktopHeight - $apos[3] - (@DesktopHeight - 499 - 269 - 25))
    EndFunc
    
    
    Func _button5()
    	Local $afilelist = _filelisttoarray("C:\Test Report\Detailed report\", "*")
    	If @error = 1 Then
    		MsgBox(52, "Pfadfehler", "Der Pfad scheint falsch zu sein!")
    		Exit
    	EndIf
    	If @error = 4 Then
    		MsgBox(52, "Keine Seriennummer", "Keine Seriennummer gefunden" & @CR & "Scheinbar ist keine Datei erstellt worden.")
    		Exit
    	EndIf
    	$sfile = $afilelist[1]
    	$sfile = StringRegExpReplace($sfile, "\.[^.]+$", "")
    	$array = StringSplit($sfile, "\")
    	$serial = StringTrimRight($array[$array[0]], 0)
    	$serial_final = StringReplace($serial, "-1", "")
    	MsgBox(64, "Zwischenablage", "SN: " & $serial_final & @CR & "Wurde in die Zwischenablage kopiert!")
    	ClipPut($serial_final)
    EndFunc
    
    
    Func _oa30()
    	Switch MsgBox(52, "Windows Aktivierung", "Möchtest du den Key für eine Windows Aktivierung löschen?")
    		Case 6
    			ShellExecute(@WorkingDir & "WTP\finaltest\keyReset.bat")
    		Case 7
    		Case 2
    	EndSwitch
    EndFunc
    Alles anzeigen

    LG

  • sysprep.exe Fenster verschieben

    • Sunny C.
    • 18. August 2016 um 11:31

    Danke, das hat bestens funktioniert !!!
    Vielen vielen Dank !

  • sysprep.exe Fenster verschieben

    • Sunny C.
    • 17. August 2016 um 14:24

    Danke für die Antworten.

    Das andere Fenster hat die gleiche Class wie das Sysprep. Dieses nennt sich aber "WindowsActive" und ist nicht Abhängig von der OS-Sprache.
    Für weitere Hilfe wäre ich dankbar.

    So geht es leider nicht:

    AutoIt
    $Hwnd = WinGetHandle('[CLASS:#32770]','WindowsActive')
    $aPos=WinGetPos($Hwnd)
    WinMove($Hwnd,'',@DesktopWidth-$aPos[2],@DesktopHeight-$aPos[3]-(@DesktopHeight-267))

    Auch wenn ich ein Winwait davor packe, funktioniert das nicht. Generell, wenn das Fenster schon offen ist und ich das Script starte, wird mit gesagt das es einen Fehler sub...-Fehler gibt. Ist das Fenster zu, gibt es keinen Fehler, aber dasd Fenster wird auch nicht verschoben.
    LG

  • Bios Version in Textdatei abgleichen

    • Sunny C.
    • 16. August 2016 um 11:52

    Hallo zusammen,

    wie ich die Biosn-Version des Computers auslesen kann, weis ich bereits.
    Ich möchte die aktuelle Bios-Version mit der, in einer Textdatei liegenden abgleichen, hat dafür jemand einen Code?
    Die TXT ist so aufgebaut:

    Spoiler anzeigen


    #model = newest BIOS version
    1015E = 304
    A8DC = 214
    A8E = 302
    A8F = 302
    A8FM = 212
    A8H = 204
    A8HE = 210
    A8J = 212
    A8JA = 212
    A8JC = 211
    A8JE = 210
    A8JM = 211
    A8JN = 211
    A8JP = 210
    A8JR = 210
    A8JS = 213
    A8LE = 207
    A8M = 220
    A8N = 215
    A8SC = 302
    A8SE = 203
    A8SG = 201
    A8SR = 304
    A8SV = 302
    A8TC = 222
    A8TM = 222
    B23E = 210
    B33E = 215
    [...]

    Ich wäre für jede Hilfe dankbar.

  • Modelname auslesen und im Ordner nach der gleichnamigen Datei suchen und öffnen

    • Sunny C.
    • 12. August 2016 um 22:54

    Ich verstehe was du meinst, aber nicht wie man das umsetzen muss.

    AutoIt
    #include <FileConstants.au3>
    #include <MsgBoxConstants.au3>
    #Include <WinAPIEx.au3>
    
    
    
    
    ; Generated by AutoIt Scriptomatic
    
    
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    
    
    $Modelname=""
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystemProduct", "WQL", _
                                            $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    
    
    If IsObj($colItems) then
       For $objItem In $colItems
        $Modelname = $Modelname & "Name: " & $objItem.Name & @CRLF
        if Msgbox(1,"WMI Output",$Modelname) = 2 then ExitLoop
        $Modelname=""
       Next
    Else
       Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_ComputerSystemProduct" )
    Endif
    
    
    $sSelectedFile = _WinAPI_ShellOpenFolderAndSelectItems('C:\keydef'& $Modelname &'.txt')
    MsgBox(0, "Selected file", $sSelectedFile)
    Alles anzeigen


    Ich brauche diese MSGBOX z.B gar nicht:

    AutoIt
    if Msgbox(1,"WMI Output",$Modelname) = 2 then ExitLoop

    Diese dient nur zur Überprüfung, ob auch das gewünschte Ergenis erzielt wird.
    Aber bisher erhalte ich nur "0" als Ergebnis. Das Model "Predator G3-710" wird richtig ausgegeben, allerdings in dieser MSGBOX, was ja überflüssig wäre.


    Edit://
    Ich habe es wohl doch hinbekommen:

    AutoIt
    #include <FileConstants.au3>
    #include <MsgBoxConstants.au3>
    #Include <WinAPIEx.au3>
    
    
    
    
    ; Generated by AutoIt Scriptomatic
    
    
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    
    
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystemProduct", "WQL", _
                                            $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    
    
    If IsObj($colItems) then
       For $objItem In $colItems
        $Modelname = $objItem.Name
       Next
    Else
       Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_ComputerSystemProduct" )
    Endif
    
    
    _WinAPI_ShellOpenFolderAndSelectItems('C:\keydef'& $Modelname &'.txt')
    Alles anzeigen

    Jetzt habe ich nur eine weitere Frage

    In dem Fall nenn sich das keydef file: "keydefPredator G3-710"

    Eigentlich gibt es aber "eu" "jp" und "us" = keydefPredator G3-710us.txt

    Es soll eigentlich auch immer das "us" file gefunden werden, wenn dies nicht vorhanden ist, dann das "eu" und wenn das das auch nicht gibt, dann das "jp", sollten alle nicht gefunden werden, eine Fehlermeldung.

    Edit2//
    So bekomme ich Syntaxerror

    AutoIt
    #include <FileConstants.au3>
    #include <MsgBoxConstants.au3>
    #Include <WinAPIEx.au3>
    #include <WinAPIFiles.au3>
    
    
    
    
    ; Generated by AutoIt Scriptomatic
    
    
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    
    
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystemProduct", "WQL", _
                                            $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    
    
    If IsObj($colItems) then
       For $objItem In $colItems
        $Modelname = $objItem.Name
       Next
    Else
       Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_ComputerSystemProduct" )
    Endif
    
    
    
    
    $keyDef = 'C:\keydef'& $Modelname &'us.txt'
    
    
    $iFileExists = FileExists($keyDef)
    
    
        ; Display a message of whether the file exists or not.
        If $iFileExists Then
            _WinAPI_ShellOpenFolderAndSelectItems($keyDef)
        ElseIf
            _WinAPI_ShellOpenFolderAndSelectItems('C:\keydef'& $Modelname &'eu.txt')
    	Else
    		MsgBox($MB_SYSTEMMODAL, "", "Nur Japanisch.")
        EndIf
    EndFunc   ;==>Example
    Alles anzeigen

    Edit3//
    Ebfalls

    AutoIt
    #include <FileConstants.au3>
    #include <MsgBoxConstants.au3>
    #Include <WinAPIEx.au3>
    
    
    
    
    ; Generated by AutoIt Scriptomatic
    
    
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    
    
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystemProduct", "WQL", _
                                            $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    
    
    If IsObj($colItems) then
       For $objItem In $colItems
        $Modelname = $objItem.Name
       Next
    Else
       Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_ComputerSystemProduct" )
    Endif
    
    
    
    
    $keyDefUS = 'C:\keydef'& $Modelname &'us.txt'
    $keyDefEU = 'C:\keydef'& $Modelname &'eu.txt'
    
    
    $iFileExistsUS = FileExists($keyDefUS)
    $iFileExistsEU = FileExists($keyDefEU)
    
    
        ; Display a message of whether the file exists or not.
        If $iFileExistsUS Then
            _WinAPI_ShellOpenFolderAndSelectItems($keyDefUS)
        ElseIf $iFileExistsEU Then
    		_WinAPI_ShellOpenFolderAndSelectItems($keyDefEU)
    	Else
    		MsgBox($MB_SYSTEMMODAL, "", "Nur Japanisch.")
        EndIf
    EndFunc   ;==>Example
    Alles anzeigen

    Edit4//
    Habe es hinbekommen. Kann mir nur jemand sagen, ob der Code allgemein so verwendet werden kann?

    AutoIt
    #include <FileConstants.au3>
    #include <MsgBoxConstants.au3>
    #Include <WinAPIEx.au3>
    
    
    
    
    ; Generated by AutoIt Scriptomatic
    
    
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    
    
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystemProduct", "WQL", _
                                            $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    
    
    If IsObj($colItems) then
       For $objItem In $colItems
        $Modelname = $objItem.Name
       Next
    Else
       Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_ComputerSystemProduct" )
    Endif
    
    
    
    
    $keyDefUS = 'C:\keydef'& $Modelname &'us.txt'
    $keyDefEU = 'C:\keydef'& $Modelname &'eu.txt'
    
    
    $iFileExistsUS = FileExists($keyDefUS)
    $iFileExistsEU = FileExists($keyDefEU)
    
    
        ; Display a message of whether the file exists or not.
        If $iFileExistsUS Then
            _WinAPI_ShellOpenFolderAndSelectItems($keyDefUS)
        ElseIf $iFileExistsEU Then
    		_WinAPI_ShellOpenFolderAndSelectItems($keyDefEU)
    	Else
    		MsgBox($MB_SYSTEMMODAL, "", "Nur Japanisch.")
        EndIf
    Alles anzeigen
  • Modelname auslesen und im Ordner nach der gleichnamigen Datei suchen und öffnen

    • Sunny C.
    • 12. August 2016 um 21:25

    Hallo zusammen,

    mit folgendem Script, mache ich den Modelname der Notebooks ausfindig:

    AutoIt
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    
    
    $Output=""
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystemProduct", "WQL", _
                                            $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    
    
    If IsObj($colItems) then
       For $objItem In $colItems
        $Output = $Output & $objItem.Name
        if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
        $Output=""
       Next
    Else
       Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_ComputerSystemProduct" )
    Endif
    Alles anzeigen

    Mit diesem Script, kann ich nach der vermeindlichen Datei suchen:

    AutoIt
    $sSelectedFile = _WinAPI_ShellOpenFolderAndSelectItems('C:\recovery.txt')
    MsgBox(0, "Selected file", $sSelectedFile)


    Wie kann ich nun beide Scripte miteinander verbinden?

    Die gesuchte Datei die direkt zu öffnen ist, nennt sich: keydef$modelname
    $modelname steht natürlich für das zu erkennende Modeltyp.

    Ich danke auch hier im Voraus.

    LG

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™