Beiträge von hipfzwirgel

    Hallo Sven,

    erstmal vielen lieben Dank für den Vorschlag. :klatschen:
    Im Grunde geht es genau darum. Ich habe drei KVM_Switche bei denen ich die "Dongle"-Bezeichung ändern soll. Also das "Suffix" _Port2 oder ähnlich soll weg
    bzw. geändert werden. Jeder der KVMs hat 32 Ports ist also alles überschaubar.

    Ich stelle also fest mein Ansatz geht in Richtung Grütze und auf die Art und Weise wie du sie vorschlägst wäre ich im Leben nicht gekommen. Eigentlich schade das es fast keine Arrayfunktionen gibt mit denen man Indizes direkt bearbeiten kann wie z.B. statt Stringsplit _ArrayIndexsplit oder so ähnlich.

    Olla alle zusammen,

    zunächst ein gutes erfolgreiches und vor allem ein gesundes neues Jahr für euch alle.

    Ich glaub ich krieg Hirnfrost: ich möchte die Zeilen eines Textes einlesen und alles ab dem Unterstrich weg haben.

    die Textzeilen sehen so aus:


    Rechnername1_Port1

    Rechnername2_Port2
    .

    .

    .

    Rechnername32_Port32


    Jetzt habe ich schon so viel mit Stringsplit und Arrays etc. gearbeitet aber vermutlich hat mir die spanische Wintersonne das Hirn frittiert. Ich krieg das nicht hin ;(



    Mit dem Code im Spoiler sieht das Ergebnis so aus:

    Row|Col 0

    [0]|

    [1]|1

    [2]|

    [3]|2

    [4]|Rechnername1

    [5]|Port1

    [6]|2

    [7]|Rechnername2

    [8]|Port2

    [9]|2

    [10]|Rechnername3

    [11]|Port3

    Hat jemand eine Idee a) woher die Einträge mit den Zahlen herrühren und b) wie ich die Einträge Port x weg bekomme? mit Redim vielleicht...
    Oder ist der komplette Ansatz Grütze?

    Hallo, ich hätte noch einen anderen Ansatz:

    ich hatte bei meinem HW-Buchungstool fast das gleiche Problem: ich konnte nur einmal Scannen dann hing sich die Hookprozedur auf. Selbst mit Hilfe der Spezialisten hier im Forum
    konnte nicht festgestellt werden warum das so war. Ich vermute, dass es mit der wie von Velted beschriebenen Änderung im OS zusammenhängt, wonach die Hookprozedur nur eine
    knappe Sekunde lebt und dann vom OS gekillt wird. Ich hatte das so gelöst: ich habe die Hookprozedur in eine exe ausgelagert. Diese wird per Buttonklick aufgerufen, dann wird gescannt und dann der eingescannte Text
    durch das aufrufende HW-Buchungstool ausgewertet. Damit ist sichergestellt, dass die Hookprozedur nur den Scan einliest und kein weiterer Code in der Hook-Proz aus geführt wird oder diese "stört".
    Zudem muss ich mir keine Sorgen mehr machen ob der Hook noch läuft und andere Eingaben blockiert und ich ihn deaktivere und später wieder aktiviere... Ob diese Lösung für deinen Anwendungsfall "performant" genug ist kann ich natürlich nicht beurteilen. Bei mir jedenfalls funzt das so einwandfrei aber bei mir wird auch kein Massenscan gemacht...


    siehe auch den Hinweis unter https://learn.microsoft.com/de…/win32/winmsg/about-hooks

    "...Hooks neigen dazu, das System zu verlangsamen, da sie die Menge der Verarbeitung des Systems für jede
    Nachricht erhöhen müssen. Sie sollten einen Hook nur bei Bedarf installieren und so bald wie möglich entfernen..."


    und ein Mitschnitt aus meiner Unterhaltung wegen des Probs seinerzeit mit Bugfix:

    ".... könnte uns das in die Suppe spucken(gefunden bei LowLevelKeyboardProc callback function auf MS-Seite):


    ...der Wert wird in Millisekunden angegeben. Wenn die Hook-Prozedur eine Zeitüberschreitung aufweist, übergibt das System die Nachricht an den nächsten Hook. Unter Windows 7 und höher wird der Hook jedoch stillschweigend entfernt, ohne aufgerufen zu werden. Es gibt keine Möglichkeit für die Anwendung zu wissen, ob der Hook entfernt wurde.

    Windows 10 Version 1709 und höher Der maximale Timeout-Wert, den das System zulässt, beträgt 1000 Millisekunden (1 Sekunde).

    Das System verwendet standardmäßig eine Zeitüberschreitung von 1000 Millisekunden, wenn der Wert LowLevelHooksTimeout auf einen Wert größer als 1000 gesetzt wird ..."

    Hallo Peter S. Taler,

    leider kann ich das nicht abschalten (Group-Policies, etc.) aber das ist auch nicht mehr nötig. Warum auch immer, geht es jetzt seit 2 Tagen wieder.
    Keine Ahnung was das gewesen sein könnte. Ich schließe den Post da sich das Prob von alleine erledigt hat...

    Hallo Nochmal,

    ich muss das Proggi etwas anpassen, da die Abfrage bei Dell Rechnern etwas umfangreicher ist, d.h. ich muss mehrere Klassen abfragen.
    Eine davon ist die Klasse Bootorder. Damit habe ich ein Problem.


    Das objitem.BootOrder aus Zeile 13 gibt in dieser Form nur den Wert WindowsBootmanager zurück. Da sollten aber auf meinem TestDevice mind. 5 BootGeräte zurückgegeben werden.
    Der VBS-Code von WMI-Explorer sieht so aus: strBootOrder = Join(objItem.BootOrder, ","). Die Join Funktion schreibt kommagetrennt die Werte von objitem.BootOrder in die Variable strBootOrder.

    Kann mir jemand einen Tipp geben wie ich das in AutoIt umsetzen kann? Meine Zeile 13 war der klägliche Versuch das zu erreichen ;(





    Hallo ihr Zwei,

    also bei meinem UseCase fällt das nicht so ins Gewicht. Da reden wir, nach meinen Tests auf den bei uns existierenden Rechnern, von
    unter hundert Bios-Optionen, sprich Einträgen.

    Aber ich gebe Bugfix recht, sollte jemand das für deutlich größere Datenmengen, bzw. Arrays einsetzen ist das sicherlich das bessere Vorgehen.

    Das Tool ist von meiner Seite aus fertig und somit auch dieser Post. Ich lasse ihn aber noch ein paar Tage offen falls wer noch Fragen hat oder weiter diskutieren möchte ;)


    Nochmals vielen herzlichen Dank an euch beide. Ihr wart mir wie immer eine große Hilfe und Bereicherung :klatschen:


    Hallo Moombas,

    vielen lieben Dank für den Tipp. wird gleich getestet :thumbup:

    Ich bin noch eine Antwort bzgl. der Variante von Bugfix schuldig:

    Habe also eben auf Lenovo-Desktop getestet. Was soll ich sagen: :klatschen::party: 

    Funktioniert besser wie meine, da die Leerzeilen zwischendrin oder auch gleich die am Anfang weg gefiltert werden. Vielen leiben Dank dafür Bugfix :thumbup::thumbup::thumbup::thumbup:

    Hallo Moombas,

    da muss ich dir Recht geben. Der Hintergrund meiner Anfrage ist die Entwicklung eines Tools um die gesetzten BIOS-Optionen, für die bei uns
    eingesetzten Computermodelle abzufragen. Da macht nur ein dynamisches Array Sinn. Die verschiedenen Hersteller haben ja unterschiedlich viele Bios-Optionen

    Könnt ihr mir in dem Zusammenhang sagen. wie ich die beiden Indizes des mit _ArrayAdd($a_String, $aBiosArray[UBound($aBiosArray) - 1], Default, ',') erzeugten Arrays
    in eine TextDatei hienein bekomme?

    ich habe es so versucht $s_aString += "AttributeName: " & $a_String[UBound($aBiosArray) - 1][1] & " -- CurrentSetting: " & $a_String[UBound($aBiosArray) - 1][2]
    aber in $s_aString wird nichts geschrieben ;(

    Hallo Moombas,

    so sieht das Array aus ohne den ExitLoop:

    Row|Col 0|Col 1

    [0]|0|

    [1]|WakeOnLAN|ACOnly

    [2]|WakeOnLANDock|Enable

    [3]|EthernetLANOptionROM|Enable

    [4]|IPv4NetworkStack|Enable

    [5]|IPv6NetworkStack|Enable

    [6]|UefiPxeBootPriority|IPv4First

    [7]|WirelessAutoDisconnection|Disable

    [8]|MACAddressPassThrough|Disable

    [9]|USBBIOSSupport|Enable

    [10]|AlwaysOnUSB|Enable

    [11]|TrackPoint|Automatic

    [12]|TouchPad|Automatic

    [13]|FnCtrlKeySwap|Disable

    [14]|FnSticky|Enable

    [15]|FnKeyAsPrimary|Enable

    [16]|BootDisplayDevice|ExternalDisplay

    [17]|SharedDisplayPriority|HDMI

    [18]|TotalGraphicsMemory|512MB

    [19]|BootTimeExtension|3

    [20]|SpeedStep|Enable

    [21]|AdaptiveThermalManagementAC|MaximizePerformance

    [22]|AdaptiveThermalManagementBattery|Balanced

    [23]|CPUPowerManagement|Automatic

    [24]|OnByAcAttach|Enable

    [25]|PasswordBeep|Disable

    [26]|KeyboardBeep|Disable

    [27]|HyperThreadingTechnology|Enable

    [28]|AMTControl|Disable

    [29]|USBKeyProvisioning|Disable

    [30]|WakeByThunderbolt|Enable

    [31]|ThunderboltSecurityLevel|NoSecurity

    [32]|PreBootForThunderboltDevice|Disable

    [33]|LockBIOSSetting|Disable

    [34]|MinimumPasswordLength|Disable

    [35]|BIOSPasswordAtUnattendedBoot|Enable

    [36]|BIOSPasswordAtReboot|Disable

    [37]|BIOSPasswordAtBootDeviceList|Disable

    [38]|PasswordCountExceededError|Disable

    [39]|FingerprintPredesktopAuthentication|Enable

    [40]|FingerprintReaderPriority|External

    [41]|FingerprintSecurityMode|Normal

    [42]|FingerprintPasswordAuthentication|Enable

    [43]|SecurityChip|Enable

    [44]|TXTFeature|Disable

    [45]|PhysicalPresenceForTpmClear|Enable

    [46]|BIOSUpdateByEndUsers|Enable

    [47]|SecureRollBackPrevention|Enable

    [48]|WindowsUEFIFirmwareUpdate|Enable

    [49]|DataExecutionPrevention|Enable

    [50]|VirtualizationTechnology|Enable

    [51]|VTdFeature|Enable

    [52]|EthernetLANAccess|Enable

    [53]|WirelessLANAccess|Enable

    [54]|WirelessWANAccess|Enable

    [55]|BluetoothAccess|Enable

    [56]|USBPortAccess|Enable

    [57]|MemoryCardSlotAccess|Enable

    [58]|SmartCardSlotAccess|Enable

    [59]|IntegratedCameraAccess|Enable

    [60]|MicrophoneAccess|Enable

    [61]|FingerprintReaderAccess|Enable

    [62]|ThunderboltAccess|Enable

    [63]|NfcAccess|Enable

    [64]|BottomCoverTamperDetected|Disable

    [65]|InternalStorageTamper|Disable

    [66]|ComputraceModuleActivation|Enable

    [67]|SecureBoot|Enable

    [68]|SGXControl|SoftwareControl

    [69]|DeviceGuard|Disable

    [70]|BootMode|Diagnostics

    [71]|StartupOptionKeys|Enable

    [72]|BootDeviceListF12Option|Enable

    [73]|BootOrder|USBCD:USBFDD:NVMe1:NVMe0:HDD0:USBHDD:PCILAN

    [74]|NetworkBoot|PCILAN

    [75]|BootOrderLock|Disable

    [76]|I8254ClockGating|Auto

    [77]|ThunderboltBIOSAssistMode|Disable

    [78]|ThunderboltBIOSAssistMode|Disable

    .

    .

    .

    [254]|ThunderboltBIOSAssistMode|Disable

    [255]|ThunderboltBIOSAssistMode|Disable


    Mit ExitLoop oder der Variante von Bugfix fallen die Zeilen ab Nr. 77 weg...


    :!::!::!: Nachtrag: Die Lösung mit ExitLoop ist nur suboptimal. Bei LenovoDesktop Rechnern kommen am Anfang und auch zwischen drin Leereinträge vor :!::!::!:


    Ich teste morgen die Bugfix-Variante auf Lenovo-Desktoprechner und berichte...

    Hallo Bugfix,

    jetzt warst du schneller als ich. Werde deinen Versuch noch testen. Mein Versuch war auch erfolgreich:
    Ich habe einfach in die If-Abfrage meiner Zeile 20 ein Exitloop eingebaut. Damit hört die Schleife auf wenn der erste leere Wert auftaucht.

    Hallo Moombas,

    jetzt sind wir auf jedenfall ein Stück weiter: Es wird ein 2 dimensionales Array erstellt. In Col 1 steht der erste Wert und in Col. 2 der 2. wert.
    Soweit so gut. Nur eins noch:

    Der _ArrayDelete löscht das ganze $a_String-Array.
    Hast du eine Idee zur Lösung?


    Die Zeilen

    ;(;(;( geht auch nicht:


    Fehlermeldung von SciTE

    "E:\BiosDump.au3" (43) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

    $a_String[UBound($a_String) - 1][2] = StringSplit($aBiosArray[UBound($aBiosArray) - 1], ",")[2]

    ^ ERROR

    ich glaube so geht das ohnehin nicht, da Stringsplit ja ein komplettes Array erzeugt und wir versuchen das in eine Zeile zu Schreiben....

    das mit dem _Arrayadd scheint auch nicht zu gehen, da das _ArrayDisplay im Nachgang $a_String nicht anzeigt...

    Hallo Moombas,

    vielen lieben Dank für die Idee. ich musste deinen Code etwas korrigieren, aber leider klappt das nicht wie wir dachten


    erzeugt aber die folgende Ausgabe:


    Row|Col 0

    [0]|

    [1]|{Array}

    [2]|{Array}

    [3]|{Array}

    [4]|{Array}

    [5]|{Array}

    [6]|{Array}

    .

    .

    .


    Jetzt scheint der Stringsplit nicht zu gehen. ;(

    Hallo Profis,

    mit der folgenden Schleife frage ich die Bios-Settings eines Lenovorechners ab


    Die Ausgabe für $aBiosArray[UBound($aBiosArray) - 1] =$objitem.CurrentSetting wäre z.B.


    Row|Col 0

    [1]|WakeOnLAN,ACOnly

    .

    .

    .

    [n] laber,bla


    Um die Ausgabe "lesefreundlich" zu machen hätte ich gerne den Wert des jeweiligen Index in 2 Werte aufgeteilt, nämlich
    "AttributeName: WakeOnLan " -- CurrentSetting: " ACOnly.

    Die Zeile $a_String = StringSplit($aBiosArray[UBound($aBiosArray) - 1], ",") erzeugt zwar ein Array mit den beiden Strings als jeweiligem Index
    aber es scheint so als ob $a_String immer wieder überschrieben wird.

    Hat jemand eine Idee wie ich die beiden Beispiel-Strings WakeOnLan und ACOnly als zwei Werte gespeichert bekomme?


    Hallo Peter,

    es geht um Win 10 21H2. ich frage nur, weil das bisher immer funktioniert hat und auf einmal eben nicht mehr.
    Für mich macht eine Elevation nur zum Fensterverschieben i-wie keinen Sinn. UAC abschalten geht nicht, da es sich um einen Firmen-Rechner handelt.

    Es interessiert mich eigentlich ob jemand weiss, was sich da geändert haben könnte und das plötzlich die UAC sich da einmischt.

    Hallo Musashi,

    vielen lieben Dank für deine Erklärung. Jetzt würde es mich aber dennoch interessieren, wieso WinMove überhaupt erhöhte Rechte benötigt.
    schließlich kann ich ja die Fenster, egal ob das zugrundeliegende Programm mit oder ohne Adminrechte gestartet wurde mit der Maus
    beliebig verschieben, ohne dass Elevation eine Rolle spielt, bzw. die UAC einschreitet?

    Hat jemand dazu eine Erklärung?

    Hallole Zusammen,

    jetzt bin ich geplättet: seit neuestem muss mein Script mit Adminrechten ausgeführt werden, damit es Winmove() ausführt.
    Starte ich das Script im SciTE mit F5 ohne Admin werden die Fenster nicht verschoben. Das gleiche gilt, wenn ich das Script kompiliere
    und als *.exe starte. Es wird die *.exe zwar ausgeführt aber die Winmove-Funktionen nicht, d.h. die Fenster werden nicht verschoben.

    Hat jemand eine Idee wieso WinMove() erhöhte Rechte benötigt?


    Hallo zusammen,

    vielen lieben Dank für eure Denkansätze.

    Die Vorschläge die UDF umzuschreiben oder dergleichen würden ja genau das beinhalten was ich umgehen wollte: Zu viel Aufwand 8)
    Ich betrachte die Fragestellung als gelöst und erstelle ggf. einen eigenen Splashscreen.

    Hallole,

    ja es ist die von Melba23. Musashi hat recht.

    MojoeB: da zunächst der Aufruf von Splash in Verbindung mit der ExtMsgbox nicht ging, hatte ich gedacht frage ich mal nach.
    Das was die beiden aufgerufenen Funktionen machen spielt dabei, wenn überhaupt, nur eine untergeordnete Rolle. Deshalb hatte ich den Code nicht näher ausgeführt.
    Ich habe schon richtige Splashscreens geschrieben aber ich dachte vielleicht kann man ja die ExtMsgBox i-wie dazu verwenden. Das wäre viel weniger aufwändig...