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. Oscar

Beiträge von Oscar

  • Daten von HDD auslesen

    • Oscar
    • 27. März 2020 um 05:14

    Ich vermute, dass man die WMI-Abfrage nicht während des Events aufrufen darf.

    Setze nur ein Flag und rufe es dann im While-Loop auf:

    AutoIt
    #Region    ;************ Includes ************
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <WinAPIFiles.au3>
    #EndRegion ;************ Includes ************
    
    GUICreate("Test", -1, -1, 0, 0)
    
    ;Deklarierung MY_WM_DEVICECHANGE (Laufwerk hinzu oder entfernt)
    Global Const $DBT_DEVICEARRIVAL = 0x8000 ; A device or piece of media has been inserted and is now available.
    Global Const $DBT_DEVICEREMOVECOMPLETE = 0x8004 ; A device or piece of media has been removed.
    
    GUIRegisterMsg($WM_DEVICECHANGE, 'MY_WM_DEVICECHANGE') ;Laufwerk hinzu oder entfernt
    Global $new = False
    _test()
    
    Func MY_WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
        #forceref $hWnd, $Msg, $lParam
        Switch $wParam
            Case $DBT_DEVICEARRIVAL ;Laufwerk hinzu
                $new = True
            Case $DBT_DEVICEREMOVECOMPLETE ;Laufwerk entfernt
                $new = True
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>MY_WM_DEVICECHANGE
    
    
    Func _test()
        $new = False
        $sDrive = 'g:'
        $Ret = _GetDriveInfo($sDrive)
        If IsArray($Ret) Then
            _ArrayDisplay($Ret, 'Informationen über Laufwerk "' & $sDrive & '"')
        Else
            MsgBox(0, 'Fehler', $Ret)
        EndIf
    EndFunc   ;==>_test
    
    
    While 1
        Sleep(10)
        If $new Then _test()
    WEnd
    
    
    ;===============================================================================
    ; Function Name: _GetDriveInfo($sDrive)
    ; Description:: Erweiterte Informationen zu einer Festplatte/USB-Stick
    ; Parameter(s): $sDrive = Laufwerksbuchstabe
    ; Requirement(s): ---
    ; Return Value(s): 2D-Array mit Bezeichnung und Wert (siehe Beispiel)
    ; Author(s): Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _GetDriveInfo($sDrive)
        Local Const $aBusType = StringSplit('UNKNOWN,SCSI,ATAPI,ATA,1394,SSA,FIBRE,USB,RAID,ISCSI,SAS,SATA,SD,MMC,Virtual,FileBakVirtual,Spaces,NVMe,SCM,UFS,MAX,MAX Res', ',', $STR_NOCOUNT)
        $sDrive = StringRegExpReplace($sDrive, '(?i)(.*)([a-z]{1}:)(.*)', '$2')
        Local $sDriveType = DriveGetType($sDrive)
        If $sDriveType <> 'Fixed' And $sDriveType <> 'Removable' Then SetError(1, 0, 1)
        If Not FileExists($sDrive) Then Return SetError(1, 0, 1)
        Local $wbemFlagReturnImmediately = 0x10
        Local $wbemFlagForwardOnly = 0x20
        Local $colItems = ''
        Local $aPartition, $aPhysicalDrive, $aOut[14][2]
        $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
        If Not IsObj($objWMIService) Then Return SetError(2, 0, 2)
        $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_LogicalDiskToPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        If IsObj($colItems) Then
            For $objItem In $colItems
                If StringInStr($objItem.Dependent, '"' & $sDrive & '"') Then
                    $aPartition = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
                EndIf
            Next
        EndIf
        If Not IsArray($aPartition) Then Return SetError(3, 0, 3)
        $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDriveToDiskPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        If IsObj($colItems) Then
            For $objItem In $colItems
                If StringInStr($objItem.Dependent, '"' & $aPartition[0] & '"') Then
                    $aPhysicalDrive = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
                EndIf
            Next
        EndIf
        If Not IsArray($aPhysicalDrive) Then Return SetError(4, 0, 4)
        Local $iBus = _WinAPI_GetDriveBusType($sDrive)
        $aPhysicalDrive[0] = StringReplace($aPhysicalDrive[0], '\\', '\')
        $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        If IsObj($colItems) Then
            For $objItem In $colItems
                If StringInStr($objItem.DeviceID, $aPhysicalDrive[0]) Then
                    $aOut[0][0] = 'Volume-Label'
                    $aOut[0][1] = DriveGetLabel($sDrive)
                    $aOut[1][0] = 'Serial-Nr. (Volume)'
                    $aOut[1][1] = DriveGetSerial($sDrive)
                    $aOut[2][0] = 'Model'
                    $aOut[2][1] = $objItem.Model
                    $aOut[3][0] = 'Serial-Nr. (Drive)'
                    $aOut[3][1] = $objItem.SerialNumber
                    $aOut[4][0] = 'Interface'
                    $aOut[4][1] = $aBusType[$iBus]
                    $aOut[5][0] = 'Size'
                    $aOut[5][1] = _WinAPI_StrFormatByteSizeEx($objItem.Size)
                    $aOut[6][0] = 'Media Type'
                    $aOut[6][1] = StringRegExpReplace($objItem.MediaType, '[^[:print:]]', ' ')
                    $aOut[7][0] = 'Total Cylinders'
                    $aOut[7][1] = $objItem.TotalCylinders
                    $aOut[8][0] = 'Total Heads'
                    $aOut[8][1] = $objItem.TotalHeads
                    $aOut[9][0] = 'Total Tracks'
                    $aOut[9][1] = $objItem.TotalTracks
                    $aOut[10][0] = 'Total Sectors'
                    $aOut[10][1] = $objItem.TotalSectors
                    $aOut[11][0] = 'Tracks Per Cylinder'
                    $aOut[11][1] = $objItem.TracksPerCylinder
                    $aOut[12][0] = 'Sectors Per Track'
                    $aOut[12][1] = $objItem.SectorsPerTrack
                    $aOut[13][0] = 'Bytes Per Sector'
                    $aOut[13][1] = $objItem.BytesPerSector
                EndIf
            Next
        EndIf
        $objWMIService = ''
        Return $aOut
    EndFunc   ;==>_GetDriveInfo
    Alles anzeigen
  • Daten von HDD auslesen

    • Oscar
    • 26. März 2020 um 07:08
    Zitat von Tweaky

    Oder ist diese Funktion noch aktuell?

    Nee, die Seriennummer des Laufwerks stimmt nicht.

    Ich hatte das damals mit der DeviceID gemacht, weil WMI bei SerialNr einen Leerstring zurückgab. Ich weiß nicht mehr, ob das bei WinXP war oder Win7.

    Heute würde ich das so machen:

    AutoIt
    #include <WinAPIFiles.au3>
    #include <WinAPIConv.au3>
    
    ; Anfang Beispiel
    #include <Array.au3> ; wird nur für _ArrayDisplay benötigt
    $sDrive = 'c:'
    $Ret = _GetDriveInfo($sDrive)
    If IsArray($Ret) Then
        _ArrayDisplay($Ret, 'Informationen über Laufwerk "' & $sDrive & '"')
    Else
        MsgBox(0, 'Fehler', $Ret)
    EndIf
    ; Ende Beispiel
    
    
    
    ;===============================================================================
    ; Function Name: _GetDriveInfo($sDrive)
    ; Description:: Erweiterte Informationen zu einer Festplatte/USB-Stick
    ; Parameter(s): $sDrive = Laufwerksbuchstabe
    ; Requirement(s): ---
    ; Return Value(s): 2D-Array mit Bezeichnung und Wert (siehe Beispiel)
    ; Author(s): Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _GetDriveInfo($sDrive)
        Local Const $aBusType = StringSplit('UNKNOWN,SCSI,ATAPI,ATA,1394,SSA,FIBRE,USB,RAID,ISCSI,SAS,SATA,SD,MMC,Virtual,FileBakVirtual,Spaces,NVMe,SCM,UFS,MAX,MAX Res', ',', $STR_NOCOUNT)
        $sDrive = StringRegExpReplace($sDrive, '(?i)(.*)([a-z]{1}:)(.*)', '$2')
        Local $sDriveType = DriveGetType($sDrive)
        If $sDriveType <> 'Fixed' And $sDriveType <> 'Removable' Then SetError(1, 0, 1)
        If Not FileExists($sDrive) Then Return SetError(1, 0, 1)
        Local $wbemFlagReturnImmediately = 0x10
        Local $wbemFlagForwardOnly = 0x20
        Local $colItems = ''
        Local $aPartition, $aPhysicalDrive, $aOut[14][2]
        $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
        If Not IsObj($objWMIService) Then Return SetError(2, 0, 2)
        $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_LogicalDiskToPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        If IsObj($colItems) Then
            For $objItem In $colItems
                If StringInStr($objItem.Dependent, '"' & $sDrive & '"') Then
                    $aPartition = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
                EndIf
            Next
        EndIf
        If Not IsArray($aPartition) Then Return SetError(3, 0, 3)
        $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDriveToDiskPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        If IsObj($colItems) Then
            For $objItem In $colItems
                If StringInStr($objItem.Dependent, '"' & $aPartition[0] & '"') Then
                    $aPhysicalDrive = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
                EndIf
            Next
        EndIf
        If Not IsArray($aPhysicalDrive) Then Return SetError(4, 0, 4)
        Local $iBus = _WinAPI_GetDriveBusType($sDrive)
        $aPhysicalDrive[0] = StringReplace($aPhysicalDrive[0], '\\', '\')
        $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        If IsObj($colItems) Then
            For $objItem In $colItems
                If StringInStr($objItem.DeviceID, $aPhysicalDrive[0]) Then
                    $aOut[0][0] = 'Volume-Label'
                    $aOut[0][1] = DriveGetLabel($sDrive)
                    $aOut[1][0] = 'Serial-Nr. (Volume)'
                    $aOut[1][1] = DriveGetSerial($sDrive)
                    $aOut[2][0] = 'Model'
                    $aOut[2][1] = $objItem.Model
                    $aOut[3][0] = 'Serial-Nr. (Drive)'
                    $aOut[3][1] = $objItem.SerialNumber
                    $aOut[4][0] = 'Interface'
                    $aOut[4][1] = $aBusType[$iBus]
                    $aOut[5][0] = 'Size'
                    $aOut[5][1] = _WinAPI_StrFormatByteSizeEx($objItem.Size)
                    $aOut[6][0] = 'Media Type'
                    $aOut[6][1] = StringRegExpReplace($objItem.MediaType, '[^[:print:]]', ' ')
                    $aOut[7][0] = 'Total Cylinders'
                    $aOut[7][1] = $objItem.TotalCylinders
                    $aOut[8][0] = 'Total Heads'
                    $aOut[8][1] = $objItem.TotalHeads
                    $aOut[9][0] = 'Total Tracks'
                    $aOut[9][1] = $objItem.TotalTracks
                    $aOut[10][0] = 'Total Sectors'
                    $aOut[10][1] = $objItem.TotalSectors
                    $aOut[11][0] = 'Tracks Per Cylinder'
                    $aOut[11][1] = $objItem.TracksPerCylinder
                    $aOut[12][0] = 'Sectors Per Track'
                    $aOut[12][1] = $objItem.SectorsPerTrack
                    $aOut[13][0] = 'Bytes Per Sector'
                    $aOut[13][1] = $objItem.BytesPerSector
                EndIf
            Next
        EndIf
        $objWMIService = ''
        Return $aOut
    EndFunc   ;==>_GetDriveInfo
    Alles anzeigen

    Edit: Oh, es gibt wieder AutoIt als Code-Formatierung! Danke an die Admins! :):thumbup:

  • Debugger für AutoIt3 - sinnfrei oder sinnvoll?

    • Oscar
    • 26. März 2020 um 04:57
    Zitat von Andy

    Ich hatte für AssembleIt einen (32Bit-) Debugger geschrieben, so einen SCHEI** macht man nur ein Mal im Leben!

    Das würde ich nicht sagen!

    Deinen Assembler-Debugger finde ich SEHR gut und in Assembler ist ein Debugger auch sehr hilfreich bzw. möchte ihn dort nicht missen wollen.

    Falls ich das nicht schonmal erwähnt hatte: Dafür (nochmal) ein großes DANKESCHÖN!

  • Debugger für AutoIt3 - sinnfrei oder sinnvoll?

    • Oscar
    • 25. März 2020 um 18:40

    Ich programmiere jetzt so ca, 14 Jahre in AutoIt, aber einen Debugger habe ich nie gebraucht/vermisst.

    Die Consolenausgabe reicht mir. Einfach eine Variable markieren und [ALT] + [D] drücken und es wird eine Consolenausgabe in das Script eingefügt.

    Meine Meinung dazu.

  • Frame aus Video extrahieren

    • Oscar
    • 23. März 2020 um 13:39
    Zitat von eukalyptus

    Frames ohne Umweg über die Festplatte:

    Klasse! :):thumbup:

    Das habe ich mir gleich mal abgespeichert. Das kann ich bestimmt auch mal gebrauchen.

    Danke!

  • Mehr Daten, als Partition groß ist! wtf...

    • Oscar
    • 18. März 2020 um 18:46

    Ich habe mal schnell ein AutoIt-Programm geschrieben, zum auflisten der Hardlinks (und Berechnung der Dateigrößen):

    C++
    #include <FileConstants.au3>
    #include <WinAPIFiles.au3>
    #include <WinAPIHObj.au3>
    #include <WinAPIInternals.au3>
    
    Global $oDict = ObjCreate('Scripting.Dictionary')
    Global $iFileSize = 0
    Global $iFileSizeOnDisk = 0
    
    _GetHardLinks('c:') ; Vorsicht! "C:" dauert ziemlich lange. Unter Win10 gibt es sehr viele Hardlinks.
    ConsoleWrite(StringFormat('FileSize = %s (%s)\r\n', _WinAPI_StrFormatByteSize($iFileSize), _WinAPI_StrFormatByteSizeEx($iFileSize)))
    ConsoleWrite(StringFormat('OnDisk = %s (%s)\r\n', _WinAPI_StrFormatByteSize($iFileSizeOnDisk), _WinAPI_StrFormatByteSizeEx($iFileSizeOnDisk)))
    
    Func _GetHardLinks($sPath)
        Local $aFilesFolder, $hFile, $aInfo, $aHardLinks
        If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
        $aFilesFolder = _WinAPI_EnumFiles($sPath)
        If @error Then Return
        For $i = 1 To $aFilesFolder[0][0]
            If BitAND($aFilesFolder[$i][6], $FILE_ATTRIBUTE_DIRECTORY) Then _GetHardLinks($sPath & $aFilesFolder[$i][0])
            $iFileSize += $aFilesFolder[$i][4]
            $iFileSizeOnDisk += $aFilesFolder[$i][5]
            $hFile = _WinAPI_CreateFile($sPath & $aFilesFolder[$i][0], 2, 0, 6)
            If $hFile Then
                $aInfo = _WinAPI_GetFileInformationByHandle($hFile)
                If IsArray($aInfo) Then
                    If $aInfo[6] > 1 Then ; wenn Hardlinks vorhanden
                        If Not $oDict.Exists(String($aInfo[7])) Then ; wenn noch nicht im Dictionary
                            $oDict.Add(String($aInfo[7]), 1)
                            $aHardLinks = _WinAPI_EnumHardLinks($sPath & $aFilesFolder[$i][0]) ; die Pfade zu den Hardlinks holen
                            If Not @error Then
                                For $j = 1 To $aHardLinks[0]
                                    ConsoleWrite(StringFormat('-> %s\r\n', $aHardLinks[$j])) ; und auflisten
                                Next
                                $iFileSize -= $aFilesFolder[$i][4] * ($aHardLinks[0] - 1) ; die Dateigroesse der Hardlinks abziehen
                                $iFileSizeOnDisk -= $aFilesFolder[$i][5] * ($aHardLinks[0] - 1)
                                ConsoleWrite(@CRLF)
                            EndIf
                        EndIf
                    EndIf
                EndIf
                _WinAPI_CloseHandle($hFile)
            EndIf
        Next
    EndFunc   ;==>_GetHardLinks
    Alles anzeigen

    Ich war sehr erstaunt darüber, dass Win10 doch sehr ausgiebig von den Hardlinks Gebrauch macht .

    Also Vorsicht mit "C:"! Das dauert ziemlich lange (selbst mit SSD).

  • Mehr Daten, als Partition groß ist! wtf...

    • Oscar
    • 18. März 2020 um 16:45
    Zitat von eukalyptus

    NTFSLinksView kann das anzeigen.

    Geht auch mit AutoIt. Files einlesen und dann mit _WinAPI_GetFileInformationByHandle die Infos zu den Files einlesen.

    Index 6 des Arrays enthält die Anzahl der Hardlinks. Wenn mehr als 1, dann mit _WinAPI_EnumHardLinks und dem Dateinpfad die übrigen Hardlinks auflisten.


    Zitat von eukalyptus

    Desweiteren hab ich entdeckt, dass man mit "mklink" ganz einfach HardLinks erstellen kann.

    Auch das geht mit AutoIt: _WinAPI_CreateHardLink

  • Mehr Daten, als Partition groß ist! wtf...

    • Oscar
    • 18. März 2020 um 13:55
    Zitat von eukalyptus

    Heißt das nun, dass NTFS doppelte Dateien nur einmal speichert!?

    Ich würde mal behaupten, dass sich irgendwo auf der Platte Hardlinks befinden.

    Hardlinks werden vom NTFS-Dateisystem doppelt (bzw. mehrfach) gezählt, sind aber physikalisch nur einmal vorhanden.

  • Große Datei durchsuchen - Optimierungsvorschläge gesucht

    • Oscar
    • 15. März 2020 um 10:26

    Die ganze Datei ins RAM laden und dann mit Assembler durchsuchen. :)

  • Telnet result auslesen (TCP send)

    • Oscar
    • 9. März 2020 um 17:41
    Zitat von Speedy86

    Funktioniert bei dir die Namensauflösung ?

    weil bei mir kann er es nicht auflösen.


    Am Router kann ich aber eindeutig den Hostname erkennen und wurde auch richtig eingetragen im $sServerName.


    Sollte dies bei jedem Gerät funktionieren wo ein Hostname korrekt eingetragen ist ? (in meinen Fall ein TV)

    Bei mir funktioniert das!

    Wie Du an dem Beispiel siehs, auch mit dem Amazon-FireTV-Stick. Aber auch meine ESP8266 (Microcontroller), die hier im lokalen Netz sind, kann ich so ansprechen.

  • Telnet result auslesen (TCP send)

    • Oscar
    • 6. März 2020 um 17:34
    Zitat von Speedy86

    Versuche gerade von einem Gerät die Mac Adresse auszulesen und zu verarbeiten.

    Versuch's mal hiermit:

    C++
    #include <AutoItConstants.au3>
    
    TCPStartup()
    Global $sServerName = 'Amazon-FireTV'
    Global $sIP = TCPNameToIP($sServerName)
    If @error Then Exit
    Global $sMAC = _GetMACaddress($sIP)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sMAC = ' & $sMAC & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    TCPShutdown()
    
    Func _GetMACaddress(Const $sIP)
        Local $iPID = Run(StringFormat('%s /c ping -4 -n 1 %s', @ComSpec, $sIP), '', @SW_HIDE)
        ProcessWaitClose($iPID)
        $iPID = Run(StringFormat('%s /c arp /a %s', @ComSpec, $sIP), '', @SW_HIDE, $STDOUT_CHILD)
        ProcessWaitClose($iPID)
        Local $sOutput = _OEMtoChar(StdoutRead($iPID))
        $sOutput = StringRegExpReplace($sOutput, '(?s).+((?:[[:xdigit:]]{2}\-){5}[[:xdigit:]]{2})\W.+', '$1')
        Return @error ? '' : StringUpper($sOutput)
    EndFunc   ;==>_GetMACaddress
    
    Func _OEMtoChar($sOEM)
        Local $aRet
        $aRet = DllCall('user32.dll', 'int', 'OemToChar', 'str', $sOEM, 'str', '')
        Return @error ? $sOEM : $aRet[2]
    EndFunc   ;==>_OEMtoChar
    Alles anzeigen

    Edit: Noch eine kleine Änderung. Man muss mit Ping erstmal einen Arp-Eintrag erzwingen.

  • (lokalem) Array ein globales zuweisen geht nicht?

    • Oscar
    • 5. März 2020 um 19:08

    Dafür braucht man nicht mal RegExp bemühen. Ein einfaches StringInStr reicht:

    C
    _Vend2()
    Func _Vend2() ; Auslesen Vendor aus WMI
        Local $objWMIService = ObjGet("winmgmts:\\localhost\ROOT\CIMV2")
        Local $sModelVendor = $objWMIService.ExecQuery("SELECT Vendor FROM Win32_ComputerSystemProduct", "WQL").ItemIndex(0).Vendor
        If @error Then Return
        ConsoleWrite("-> Vendor = " & $sModelVendor & @CRLF)     ; *** nur für Testanzeige
        If Not StringInStr("LENOVO HP FUJITSU", $sModelVendor) Then
            ConsoleWrite("! Error: The Vendor from this device is not supported right now!" & @CRLF)
        EndIf
        Return $sModelVendor
    EndFunc   ;==>_Vend2
    Alles anzeigen
  • Radio Button

    • Oscar
    • 1. März 2020 um 08:18
    Zitat von xSick

    Hallo,wie bekomme ich das hin das wenn man ein radio Button auswählt der dann einen bestimmten Script lädt ?

    Indem Du so ein Script schreibst!

    Merke: Je ausführlicher die Fragestellung, umso ausführlicher fallen die Antworten aus. ;)

  • Memory usage for Process

    • Oscar
    • 1. März 2020 um 08:14

    Schau Dir mal an, was ProcessGetStats zurückgibt.

    Was Du suchst, ist eher: _WinAPI_GetProcessMemoryInfo.

  • Informationen aus Textfeld auslesen lassen und in Eingabefelder überspielen lassen für Datensätze in einem Programm

    • Oscar
    • 29. Februar 2020 um 15:57

    Ok, also keinen direkten Zugriff auf die Datenbank. Schade, dass wäre wahrscheinlich am einfachsten.

    Die Automatisierung einer Fremdsoftware ist hingegen nicht immer möglich. Das kommt etwas darauf an, ob Windows-eigene Controlelemente verwendet werden oder nicht.

    Wenn Du AutoIt bereits installiert hast, dann sieh mal in das Programmverzeichnis ("c:\Program Files (x86)\AutoIt3\"). Dort gibt es eine Exedatei ("Au3Info.exe" oder "Au3Info_x64.exe" als 64Bit Version).

    Wenn Du diese Datei startest geht ein Fenster auf, wo auf der rechten Seite ein "Finder Tool" zu finden ist. Wenn Du mit der linken Maustaste drauf klickst, die Maustaste gedrückt hälst und den Mauszeiger über dem Eingabefeld der zu steuernden Software ziehst, dann erscheinen dort verschiedene Informationen (hoffentlich).

    Mit diesen Informationen kann man dann rangehen und eine Automatisierung schreiben.

    So kannst Du schonmal prüfen, ob sich die Software überhaupt Informationen entlocken lässt. Wenn das nämlich nicht der Fall ist, dann müsste man eine Automatisierung per MouseMove, MouseClick machen, was aber sehr fehleranfällig ist.

  • Informationen aus Textfeld auslesen lassen und in Eingabefelder überspielen lassen für Datensätze in einem Programm

    • Oscar
    • 29. Februar 2020 um 09:55

    Um eine hilfreichere Antwort geben zu können, brauchen wir weitere Einzelheiten:

    1. In welches Programm willst Du eine Eingabe machen?

    2. Aus welcher Datenbank (Format) holst Du die Informationen?

    3. Was sind das für Attribute?

    Du schreibst etwas von einer Exceltabelle. Dafür gibt es eine AutoIt-UDF. Je nachdem, was das für eine Datenbank ist, kann man auch direkt (mit AutoIt) darauf zugreifen (ohne dieses Zusatzprogramm).

  • 2 Dateien mit demselben Namen mit 7-Zip verpacken - solange bis keine Dateien mehr im Ordner sind

    • Oscar
    • 29. Februar 2020 um 08:51
    Zitat von micci

    Liegt es daran, dass ich am Anfang mit dem Windows-Editor kurz in die Dateien schauen wollte.

    Habe z.B. "Micci-Zippen.au3" mit dem Editor geöffnet. Kann ich mir aber

    irgendwie nicht vorstellen.

    Du musst natürlich vorher AutoIt installieren und dann die ".au3"-Datei in AutoIt öffnen und mit "F5" starten.

  • Eingabe in Inputboxen in Großbuchstaben wandeln

    • Oscar
    • 16. Februar 2020 um 13:08

    Man kann das auch in AutoIt noch verkleinern:

    C++
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    Global $hGui = GUICreate('Test')
    Global $cInput = GUICtrlCreateInput('', 20, 20, 150, 20)
    
    GUISetState()
    
    GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
    
    While 1
        Switch GUIGetMsg()
            Case -3
                Exit
        EndSwitch
    WEnd
    
    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
        Switch BitAND($iwParam, 0xFFFF)
            Case $cInput
                Switch BitShift($iwParam, 16)
                    Case $EN_CHANGE
                        GUICtrlSetData($cInput, StringUpper(GUICtrlRead($cInput)))
                        Return 0
                EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_COMMAND
    Alles anzeigen

    Edit: Oder als Einzeiler:

    C
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    Global $hGui = GUICreate('Test')
    Global $cInput = GUICtrlCreateInput('', 20, 20, 150, 20)
    
    GUISetState()
    
    GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
    
    While 1
        Switch GUIGetMsg()
            Case -3
                Exit
        EndSwitch
    WEnd
    
    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
        If BitAND($iwParam, 0xFFFF) = $cInput And BitShift($iwParam, 16) = $EN_CHANGE Then Return Not GUICtrlSetData($cInput, StringUpper(GUICtrlRead($cInput)))
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_COMMAND
    Alles anzeigen

    Das fördert aber nicht gerade die Lesbarkeit. :rolleyes:

  • Flash-Test

    • Oscar
    • 15. Februar 2020 um 16:50
    Zitat von autoBert

    Mit den Daten von h2testw beurteile ich die SSD als ok, mit dem mehr an Daten bekomme ich Zweifel.

    Ja, Du hast recht!

    Die manchmal höheren Schreibwerte gegenüber den Lesewerten machten mich auch schon stutzig. Das dürfte eigentlich nicht sein.

    Also habe ich mein Script daraufhin nochmal eingehend untersucht und einen kleinen "Bug" gefunden.

    Ich benutze ja zwei kleine Assembler-Routinen: zum erstellen des Schreibpuffers und zum testen des Puffers beim lesen.

    Die Zeit, die diese Assembler-Routinen brauchen habe ich aber nicht berücksichtigt. Sie wurde jeweils mit eingerechnet.

    Das sind zwar nur Millisekunden, aber die machen sich leider bei der Berechnung der Datenrate bemerkbar.

    Beim Lesen wird der Puffer überprüft, ob die Daten auch korrekt sind, was etwas länger dauert, als die Assembler-Routine beim Schreiben (die nur den Puffer erstellen muss).

    Dadurch ergibt sich diese Diskrepanz bei den Werten.

    Ich habe jetzt eine neue Version (v1.5.0.0) erstellt, bei der die Zeiten für die Assembler-Routinen rausgerechnet werden.

    Damit sollte es jetzt korrektere Werte geben. Neue Version in Post#1.

  • Datei einlesen und Inhalt finden

    • Oscar
    • 10. Februar 2020 um 12:27

    Diese Fehlermeldung gibt es in AutoIt nicht!

    Poste bitte ein vollständiges Script, wo der Fehler auftritt und auch die XML-Datei (oder eine entsprechende Beispieldatei, falls die Daten geheim bleiben sollen).

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™