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

Beiträge von Concara

  • Outlook Mail mit eingebetteten Bildern im Body Text als versteckte Anhänge

    • Concara
    • 15. Juni 2022 um 15:42

    Hallo!

    Ich würde gerne Emails per Outlook versenden, die ein Bild im Text enthalten. (HTML Body)

    Das ist Erstellen und Versenden funktioniert auch wunderbar dank Waters OutlookEX UDF.

    Die erstellten Mails enthalten auch das Bild und in Outlook werden sie auch richtig dargestellt, nur mit der Büroklammer als Schönheitsfehler.

    In anderen Mailclients wird das Bild aber überhaupt nicht in der Email dargestellt sondern "nur" als Anhang.

    Water wurde dazu schon vor mehr als 10 Jahren im Englischen Forum tätig.

    Dort hatte er auf die Webseite http://www.outlookcode.com verwiesen. Beitrag aus dem englischen Forum

    Diese ist leider nicht mehr verfügbar und somit konnte ich nicht nachsehen.

    Hat jemand von euch eine Idee wie ich das Bild als Anhang einbinde damit es im Text sichtbar ist und nicht als Anhang selber zum Downloaden angeboten wird.

    Hier mein Testcode:

    AutoIt
    #include <OutlookEx.au3>
    
    $oOutlook = _OL_Open()
    $oMail = _OL_ItemCreate($oOutlook, $olMailItem, "*", "", "Subject=TestMail", "BodyFormat=" & $olFormatHTML, _
        'HTMLBody=This is a picture.<img src="cid:The_Outlook.jpg">This is more text.')
    If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF: _OL_ItemCreate Example Script", "Error creating a mail item. @error = " & @error & ", @extended = " & @extended)
    $oItem = _OL_ItemAttachmentAdd($oOutlook, $oMail, Default, @ScriptDir & "\The_Outlook.JPG")
    If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF: _OL_ItemCreate Example Script", "Error adding an attachment to the mail item. @error = "  & @error & ", @extended = " & @extended)
    _OL_ItemRecipientAdd($oOutlook, $oMail, Default, $olBCC, "test.test@test.com")
    _OL_ItemSend($oOutlook, $oMail, Default)
    ;$oMail.Display
    _OL_Close($oOutlook)
    Alles anzeigen
  • au3-2-exe

    • Concara
    • 12. Mai 2022 um 13:05

    Bei dem Hinweis von BugFix ist aber wichtig das Kleingedruckte in der Hilfe zu lesen. :)

    Und ich bin heil froh, dass es so ist, sonst wäre das eine recht große Sicherheitslücke meiner Meinung nach.

    Zitat

    aus der Hilfe:

    Running Scripts

    Important Notes

    However, the executable must have been compiled with the #pragma compile(AutoItExecuteAllowed, True) directive as the default setting does not permit use of the /AutoItExecuteScript or /AutoItExecuteLine parameters. Moreover, since the interpreter stub searches for any required standard #include files in its current folder, UDF functions and various constants may not be available as those files are normally only found in the full AutoIt install. It is therefore recommended that any scripts intended to be run in this manner are compiled to the .a3x format rather then being left as plain .au3 text files

    Correct usage of single and double quotation marks is important when using the command line - even for double single quotation marks.

  • Login auf USV / Vorlage in anderer Sprache vorhanden

    • Concara
    • 29. April 2022 um 09:00

    Hi!

    Hier Code mit dem ich ein ähnliches Projekt realisiert habe.

    AutoIt
    #include <String.au3>
    Local $sRequest, $sCookies
    ;Local $ip = "192.168.0.1"
    TCPStartup()
    Local $ip = TCPNameToIP("neverssl.com")
    TCPShutdown()
    
    $sRequest = _TCPRequest($ip, "neverssl.com")
    ConsoleWrite("-------------------------------------------" & @CRLF & $sRequest & @CRLF)
    $sCookies = _GetCookies($sRequest)
    ConsoleWrite("-------------------------------------------" & @CRLF & $sCookies & @CRLF)
    
    Func _GetCookies($sQuellcode)
        Local $sCookies, $i, $aCookies
        $sCookies = ''
        $aCookies = _StringBetween($sQuellcode, 'Set-Cookie: ', @CRLF, 1)
        For $i = 0 To UBound($aCookies) - 1
            $sCookies &= $aCookies[$i] & ';'
        Next
        Return $sCookies
    EndFunc   ;==>_GetCookies
    
    Func _TCPRequest($sIp, $sHost, $sSeite = "", $sPost = '', $sCookies = '', $sReferer = '')
        Local $sPacket, $iSocket, $iTimer, $sRecv
        If $sPost = '' Then
            $sPacket = 'GET /' & $sSeite & ' HTTP/1.1' & @CRLF
        Else
            $sPacket = 'POST /' & $sSeite & ' HTTP/1.1' & @CRLF
        EndIf
        $sPacket &= 'Host: ' & $sHost & @CRLF & _
                'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0' & @CRLF & _
                'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' & @CRLF & _
                'Accept-Language: de,en-US;q=0.7,en;q=0.3' & @CRLF & _
                'Connection: keep-alive' & @CRLF
        ;'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' & @CRLF & _
        ;'Keep-Alive: 115' & @CRLF & _
        If $sReferer <> '' Then
            $sPacket &= 'Referer: ' & $sReferer & @CRLF
        EndIf
        If $sCookies <> '' Then
            $sPacket &= 'Cookie: ' & "testcookie; " & $sCookies & @CRLF
        EndIf
        If $sPost <> '' Then
            $sPacket &= 'Content-Type: application/x-www-form-urlencoded' & @CRLF
            $sPacket &= 'Content-Length: ' & StringLen($sPost) & @CRLF
        EndIf
        $sPacket &= @CRLF
        If $sPost <> '' Then
            $sPacket &= $sPost
        EndIf
        ;ConsoleWrite(@CR & $sPacket & @CR)
        TCPStartup()
        If @error Then Return SetError(1, 0, "")
        $iSocket = TCPConnect($sIp, 80)
        If @error Then Return SetError(2, 0, "")
        TCPSend($iSocket, $sPacket)
        If @error Then Return SetError(3, 0, "")
        Local $bytes = 0, $parse_start, $seconds, $timer_start = TimerInit()
        While 1
            ;_checkMessages()                ;My nMsg routine
            $sRecv &= TCPRecv($iSocket, 4096)
            ;If @error = -1 Then ExitLoop            ;Just to be thorough
            $parse_start = StringInStr($sRecv, "Content-Length") + 15
            If $parse_start > 15 Then $bytes = Int(StringStripWS(StringStripCR(StringMid($sRecv, $parse_start, StringInStr($sRecv, @CRLF, 0, 1, $parse_start) - $parse_start)), 8))
            ;This is what really makes the difference. Were waiting for all the data to come in
            If $bytes > 0 And StringLen($sRecv) >= $bytes Then ExitLoop
            If TimerDiff($timer_start) > 1000 + ($seconds * 1000) Then
                $seconds += 1
                If $seconds = 5 Then ExitLoop ;Last resort
            EndIf
        WEnd
        TCPCloseSocket($iSocket)
        TCPShutdown()
        Return BinaryToString($sRecv)
    EndFunc   ;==>_TCPRequest
    Alles anzeigen

    Ich denke du solltest aber mit der Funktion zurecht kommen.

    Geh den Loginvorgang mit dem developer Mode durch und erstelle die Requests genau so.

    Auszug aus der Seite die du verlinkt hast (

    In Chrome go to the View menu - Developer - Developer Tools and the Dev panel should open to the right hand side. Under the Network Tab then Headers Tab you will see the Request Headers Section, your Authorization token can be found here. Copy this for use later

    )

    Eventuell passt du den Header in der Funktion noch an.

    Sollte aber nicht unbedingt notwendig sein.

    Mir ist aufgefallen, dass man oft nicht alle Requests braucht, soll heissen, Seite aufrufen erster Request meist erhält man dann das Cookie das man braucht um dann direkt den Login Request abzusetzen.

    Und alle Requests dazwischen sind nicht nötig.

  • Zertifikat einer Signierten Datei überprüfen

    • Concara
    • 7. April 2022 um 12:40

    Du weißt aber schon, dass das nicht zwingend notwendig ist?

    Solange es mit einem gültigen Zeitstempel signiert wurde.

    Mit Powershell geht es auch

    Get-AuthenticodeSignature C:\Windows\explorer.exe | Format-List

    AutoIt
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Debug.au3>
    Local $sFile = "C:\Windows\explorer.exe"
    Local $sCommandline = 'powershell "& Get-AuthenticodeSignature ''' & $sFile & ''' | Format-List"'
    Local $iRun = Run($sCommandline, @ScriptDir, @SW_HIDE, $STDOUT_CHILD)
    ProcessWaitClose($iRun)
    Local $sOutput = StdoutRead($iRun)
    ;ConsoleWrite("$sOutput " & $sOutput & @CRLF)
    Local $aArray = StringRegExp($sOutput, "(\b\d{2}.\d{2}.\d{4} \d{2}:\d{2}:\d{2})", 3)
    _DebugArrayDisplay($aArray)
    Alles anzeigen

    Array0 Zertifikat Beginn

    Array1 Zertifikat Ende

    Array2 Timestamp Beginn

    Array3 Timestamp Ende

  • Zertifikat einer Signierten Datei überprüfen

    • Concara
    • 6. April 2022 um 10:58

    Ich nehme mal an ihr signiert eure Files mit SignTool.exe von Microsoft!?

    Damit kann man das auch überprüfen.

    SignTool verify /?

    Code
    C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64>SignTool verify /v "C:\Windows\explorer.exe"
    
    Verifying: C:\Windows\explorer.exe
    
    Signature Index: 0 (Primary Signature)
    Hash of file (sha256): 7177E59926D1B65B386989764E121E9D37C41BCFF9799E3F1D938D5DE12AAA8B
    
    Signing Certificate Chain:
        Issued to: Microsoft Root Certificate Authority 2010
        Issued by: Microsoft Root Certificate Authority 2010
        Expires:   Sun Jun 24 00:04:01 2035
        SHA1 hash: 3B1EFD3A66EA28B16697394703A72CA340A05BD5
    
            Issued to: Microsoft Windows Production PCA 2011
            Issued by: Microsoft Root Certificate Authority 2010
            Expires:   Mon Oct 19 20:51:42 2026
            SHA1 hash: 580A6F4CC4E4B669B9EBDC1B2B3E087B80D0678D
    
                Issued to: Microsoft Windows
                Issued by: Microsoft Windows Production PCA 2011
                Expires:   Thu Sep 01 20:23:41 2022
                SHA1 hash: FE51E838A087BB561BBB2DD9BA20143384A03B3F
    
    The signature is timestamped: Wed Mar 02 13:44:34 2022
    Timestamp Verified by:
        Issued to: Microsoft Root Certificate Authority 2010
        Issued by: Microsoft Root Certificate Authority 2010
        Expires:   Sun Jun 24 00:04:01 2035
        SHA1 hash: 3B1EFD3A66EA28B16697394703A72CA340A05BD5
    
            Issued to: Microsoft Time-Stamp PCA 2010
            Issued by: Microsoft Root Certificate Authority 2010
            Expires:   Mon Sep 30 20:32:25 2030
            SHA1 hash: 36056A5662DCADECF82CC14C8B80EC5E0BCC59A6
    
                Issued to: Microsoft Time-Stamp Service
                Issued by: Microsoft Time-Stamp PCA 2010
                Expires:   Tue Feb 28 21:05:23 2023
                SHA1 hash: 1306B88D68DA71B39853EFBDE72749EE14828B98
    
    File has page hashes.
    
    
    Successfully verified: C:\Windows\explorer.exe
    
    Number of files successfully Verified: 1
    Number of warnings: 0
    Number of errors: 0
    Alles anzeigen
  • Remote _WinAPI_RegQueryLastWriteTime

    • Concara
    • 31. März 2022 um 11:06

    Es kann oft so einfach sein.

    Man muss nur genau lesen :)

    Falls jemand auch das Problem hat, den Zeitpunkt, wann ein Registry Key das letztemal verändert wurde, remote, auszulesen.

    Hier ein Beispiel:

    AutoIt
    #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseX64=y
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <APIRegConstants.au3>
    #include <Date.au3>
    ;#include <Debug.au3>
    #include <WinAPIError.au3>
    #include <WinAPILocale.au3>
    #include <WinAPIReg.au3>
    ;_DebugSetup(Default, True)
    Local $sRegkey = 'SYSTEM\CurrentControlSet\Enum\DISPLAY'
    If $cmdline[0] = 0 Then Exit
    If $cmdline[0] = 2 Then
        $sRegkey = $cmdline[2]
    EndIf
    Local $hKey = _WinAPI_RegConnectRegistry("\\" & $cmdline[1], $HKEY_LOCAL_MACHINE)
    If @error Then
        ConsoleWrite("! _WinAPI_RegConnectRegistry @error =" & @error & @CRLF & @TAB & _WinAPI_GetErrorMessage(@extended) & @CRLF)
        ; _DebugReport("! RegOpenKey @error =" & @error & @CRLF & @TAB &_WinAPI_GetErrorMessage(@extended) & @CRLF)
        Exit
    EndIf
    Local $hKey2 = _WinAPI_RegOpenKey($hKey, $sRegkey, $KEY_QUERY_VALUE)
    If @error Then
        ConsoleWrite("! _WinAPI_RegOpenKey @error =" & @error & @CRLF & @TAB & _WinAPI_GetErrorMessage(@extended) & @CRLF)
        ; _DebugReport("! RegOpenKey @error =" & @error & @CRLF & @TAB &_WinAPI_GetErrorMessage(@extended) & @CRLF)
        Exit
    EndIf
    Local $tFT = _WinAPI_RegQueryLastWriteTime($hKey2)
    $tFT = _Date_Time_FileTimeToLocalFileTime($tFT)
    Local $tST = _Date_Time_FileTimeToSystemTime($tFT)
    _WinAPI_RegCloseKey($hKey2)
    _WinAPI_RegCloseKey($hKey)
    ;_DebugReport('! Last modified at: ' & _WinAPI_GetDateFormat(0, $tST) & ' ' & _WinAPI_GetTimeFormat(0, $tST) & @CRLF)
    ConsoleWrite(_WinAPI_GetDateFormat(0, $tST) & ' ' & _WinAPI_GetTimeFormat(0, $tST) & @CRLF)
    Alles anzeigen
  • Remote _WinAPI_RegQueryLastWriteTime

    • Concara
    • 30. März 2022 um 16:36

    Ich habe da ein Script gefunden für Powershell:

    Externer Inhalt gist.github.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Anscheinend funktioniert das aber Remote auch nicht. (siehe Post dort)

    Ich habe es nicht mal lokal zum funktionieren gebracht.

    Ist jemand von euch fähig so etwas in Autoit umzusetzen?

    Wie geht man da vor?

    Es scheinen Dll Aufrufe zu sein. (advapi32.dll)

    Spoiler anzeigen
    Code
    function Get-RegKeyLastWriteTime {            
     <#
        .SYNOPSIS
        Retrieves the last write time of the supplied registry key
    
        .DESCRIPTION
        The Registry data that a hive stores in containers are called cells. A cell 
        can hold a key, a value, a security descriptor, a list of subkeys, or a 
        list of key values.
    
        Get-RegKeyLastWriteTime retrieves the LastWriteTime through a pointer to the
        FILETIME structure that receives the time at which the enumerated subkey was
        last written. Values do not contain a LastWriteTime property, but changes to
        child values update the parent keys lpftLastWriteTime.
        
        The LastWriteTime is updated when a key is created, modified, accessed, or
        deleted.
    
        .PARAMETER ComputerName
        Computer name to query
    
        .PARAMETER Key
        Root Key to query
    
        HKCR - Symbolic link to HKEY_LOCAL_MACHINE \SOFTWARE \Classes.
        HKCU - Symbolic link to a key under HKEY_USERS representing a user's profile
        hive.
        HKLM - Placeholder with no corresponding physical hive. This key contains
        other keys that are hives.
        HKU  - Placeholder that contains the user-profile hives of logged-on
        accounts.
        HKCC - Symbolic link to the key of the current hardware profile
    
        .PARAMETER SubKey
        Registry Key to query
    
        .EXAMPLE
        Get-RegKeyLastWriteTime -ComputerName testwks -Key HKLM -SubKey Software
    
            .EXAMPLE
        Get-RegKeyLastWriteTime -ComputerName testwks1,testwks2 -SubKey Software
    
        .EXAMPLE
        Get-RegKeyLastWriteTime -SubKey Software\Microsoft
    
        .EXAMPLE
        "testwks1","testwks2" | Get-RegKeyLastWriteTime -SubKey Software\Microsoft `
        \Windows\CurrentVersion
    
        .NOTES
        NAME: Get-RegKeyLastWriteTime
        AUTHOR: Shaun Hess
        VERSION: 1.0
        LASTEDIT: 01JUL2011
        LICENSE: Creative Commons Attribution 3.0 Unported License
        (http://creativecommons.org/licenses/by/3.0/)
    
        .LINK
        http://www.shaunhess.com
        #>            
                
     [CmdletBinding()]            
                
     param(            
     [parameter(            
     ValueFromPipeline=$true,            
     ValueFromPipelineByPropertyName=$true)]            
     [Alias("CN","__SERVER","Computer","CNAME")]            
     [string[]]$ComputerName=$env:ComputerName,            
     [string]$Key = "HKLM",            
     [string]$SubKey            
     )            
                
     BEGIN {            
      switch ($Key) {            
       "HKCR" { $searchKey = 0x80000000} #HK Classes Root            
       "HKCU" { $searchKey = 0x80000001} #HK Current User            
       "HKLM" { $searchKey = 0x80000002} #HK Local Machine            
       "HKU"  { $searchKey = 0x80000003} #HK Users            
       "HKCC" { $searchKey = 0x80000005} #HK Current Config            
       default {            
       "Invalid Key. Use one of the following options:
                HKCR, HKCU, HKLM, HKU, HKCC"}            
      }            
                
      $KEYQUERYVALUE = 0x1            
      $KEYREAD = 0x19            
      $KEYALLACCESS = 0x3F            
     }            
     PROCESS {            
      foreach($computer in $ComputerName) {            
                  
    $sig0 = @'
    [DllImport("advapi32.dll", SetLastError = true)]
      public static extern int RegConnectRegistry(
          string lpMachineName,
        int hkey,
        ref int phkResult);
    '@            
      $type0 = Add-Type -MemberDefinition $sig0 -Name Win32Utils `   -Namespace
     RegConnectRegistry -Using System.Text -PassThru            
                
    $sig1 = @'
    [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
      public static extern int RegOpenKeyEx(
        int hKey,
        string subKey,
        int ulOptions,
        int samDesired,
        out int hkResult);
    '@            
      $type1 = Add-Type -MemberDefinition $sig1 -Name Win32Utils `
     -Namespace RegOpenKeyEx -Using System.Text -PassThru            
                
    $sig2 = @'
    [DllImport("advapi32.dll", EntryPoint = "RegEnumKeyEx")]
    extern public static int RegEnumKeyEx(
        int hkey,
        int index,
        StringBuilder lpName,
        ref int lpcbName,
        int reserved,
        int lpClass,
        int lpcbClass,
        out long lpftLastWriteTime);
    '@            
      $type2 = Add-Type -MemberDefinition $sig2 -Name Win32Utils `
     -Namespace RegEnumKeyEx -Using System.Text -PassThru            
                
    $sig3 = @'
    [DllImport("advapi32.dll", SetLastError=true)]
    public static extern int RegCloseKey(
        int hKey);
    '@            
      $type3 = Add-Type -MemberDefinition $sig3 -Name Win32Utils ` 
     -Namespace RegCloseKey -Using System.Text -PassThru            
                
                
      $hKey = new-object int            
      $hKeyref = new-object int            
      $searchKeyRemote = $type0::RegConnectRegistry($computer, $searchKey, `  [ref]$hKey)            
      $result = $type1::RegOpenKeyEx($hKey, $SubKey, 0, $KEYREAD, `  [ref]$hKeyref)            
                
      #initialize variables            
      $builder = New-Object System.Text.StringBuilder 1024            
      $index = 0            
      $length = [int] 1024            
      $time = New-Object Long            
                
      #234 means more info, 0 means success. Either way, keep reading            
      while ( 0,234 -contains $type2::RegEnumKeyEx($hKeyref, $index++, `      $builder, [ref] $length, $null, $null, $null, [ref] $time) )            
      {            
          #create output object            
          $o = "" | Select Key, LastWriteTime, ComputerName            
       $o.ComputerName = "$computer"             
          $o.Key = $builder.ToString()            
       # TODO Change to use the time api            
          $o.LastWriteTime = (Get-Date $time).AddYears(1600).AddHours(-4)            
          $o            
                
          #reinitialize for next time through the loop            
          $length = [int] 1024            
          $builder = New-Object System.Text.StringBuilder 1024            
      }            
                
      $result = $type3::RegCloseKey($hKey);            
      }            
     }            
    } # End Get-RegKeyLastWriteTime function
    Alles anzeigen
  • Remote _WinAPI_RegQueryLastWriteTime

    • Concara
    • 28. März 2022 um 15:51

    Hallo!

    Hat von euch jemand einen Tipp wie ich von Registry Keys die LastWriteTime erhalten kann.

    Ich habe es nicht geschafft _WinAPI_RegQueryLastWriteTime remote auszuführen.

    Danke für die Hilfe

  • Filter für FileListToArray

    • Concara
    • 8. März 2022 um 16:23

    Wie Musashi geschrieben hat.

    Du hast den Switch auf _Arraydisplay gemacht und nicht auf _FileListtoArray aber Case 0 ist ja wenn du eine Array hast also würde ich das so machen.

    AutoIt
    #include <Array.au3>
    #include <File.au3>
    
    $FileList = _FileListToArray(@ScriptDir, 'UUID-*.txt', 1) ; Dateiname einlesen
    Switch @error
        Case 0
            _ArrayDisplay($FileList)
        Case 1
            MsgBox(0, "Warnung 1", "Pfad nicht gefunden oder ungültig")
            Exit
        Case 2
            MsgBox(0, "Warnung 2", "$sFilter ungültig")
            Exit
        Case 3
            MsgBox(0, "Warnung 3", "$iFlag ungültig")
            Exit
        Case 4
            $sFilerst = MsgBox(4100, "Warnung 4", "Keine UUID-*.txt Datei(en) gefunden!!!" & @CRLF & @CRLF & "Möchten sie eine erstellen?")
            If $sFilerst = 6 Then
                $sEingabe = InputBox("Eingabe Rechnername", "Bitte geben sie den Rechnername ein:", @ComputerName)
                If Not FileWrite("UUID-" & $sEingabe & ".txt", "") Then
                    MsgBox($MB_SYSTEMMODAL, "", "Es ist während dem schreiben der temporären Datei ein Fehler aufgetreten.")
                EndIf
            EndIf
            $FileList = _FileListToArray(@ScriptDir, 'UUID-*.txt', 1)
        Case Else
            MsgBox(0, "Warning E", "unknown Error")
            Exit
    EndSwitch
    Alles anzeigen
  • SVG Inhalt mit Autoit auslesen

    • Concara
    • 24. Februar 2022 um 12:54

    Hallo Dietmar!

    Wenn das stimmt was die Fehlermeldung anbelangt. (Siehe https://www.autoitscript.com/forum/topic/136249-inetget-fails/)

    Dann kann inetget oder inetread den Namen deines Servers nicht auflösen.

    Also kannst du eventuell es mit der IP probieren.

    DOS : ping badge.infosystem Du bekommst damit die IP Adresse

    Beispiel: Url = http://127.0.0.1/*****/666

    sofern ihr nicht ip6 einsetzt und die DNS Auflösung funktioniert.

    DOS: nslookup badge.infosystem

    würde auch noch gehen um mehr herauszufinden


    Edit:

    Hast du eigentlich schon mal "nur" http://badge.infosystem als url angegeben?

    Kommt hier etwas zurück?

  • Abfrageergebnisse in Datei/Datenbank schreiben/lesen

    • Concara
    • 24. Januar 2022 um 16:04

    Hallo

    @Velted

    Du hast sicher mit multiplizieren angefangen zu Rechnen und nicht mit addieren!?

    Warum habe ich bloß hingeschrieben:

    Zitat von Concara

    Bei großen Datenmengen sind einzelne Insert sehr langsam

    Ich kenne die Datenmengen die Lashandan verarbeiten will nicht.

    Zum Anfangen und für ein paar inserts und updates sind die Funktionen ausreichend.

    Der Kommentar von Kanashius ist sinnvoll.

    Hier kann man dann auch gleich erwähnen, dass man das Datum besser mit - einfügt (2022-01-17 07:15:55) damit man die Sqlite date time Funktionen verwenden kann.

    SQLite Datum &amp; Zeit

  • Abfrageergebnisse in Datei/Datenbank schreiben/lesen

    • Concara
    • 24. Januar 2022 um 12:22

    Hallo!

    Ich kopiere die sqlite3.dll und sqlite3_x64.dll immer in den jeweilige Scriptordner , man weiß ja nie ob sich mal etwas ändert und dann hat man zumindest eine funktionsfähige Version.

    Index und Primary key sind zwei verschiedene Sachen, erfüllen aber einfach angewendet die selbe Funktion, nämlich, dass man nur einen Datensatz mit dem gleichen Namen einfügen kann.

    Die index Erstellung habe ich dir ja schon im Scriptbeispiel mit hinzugefügt ( auskommentiert ), wenn auch mit "falschen" Tabellennamen("PCNAME", "Benutzername").

    Beispiel Indexerstellung "nur" auf letzter angemeldeter Benutzer:

    AutoIt
    Func _Create_Databasefile($sDatabaseFileName, $sCollums, $sTablename = $sDatabaseFileName)
        _SQLite_Startup()
        _SQLite_Open(@ScriptDir & "\" & $sDatabaseFileName & ".db3")
        If Not _SQLite_Exec(-1, 'CREATE TABLE if not exists "' & $sTablename & '" (' & $sCollums & ');') = $SQLITE_OK Then _
                MsgBox(16, "SQLite Error", _SQLite_ErrMsg()) ; CREATE a Table
         If Not _SQLite_Exec(-1, 'create unique index if not exists Unique1 on ' & $sDatabaseFileName & ' ("letzter angemeldeter Benutzer");') = $SQLITE_OK Then _
                 MsgBox(16, "SQLite Error", _SQLite_ErrMsg(), 1); CREATE a INDEX
        _SQLite_Close()
        _SQLite_Shutdown()
    EndFunc   ;==>_Create_Databasefile

    Beispiel Primary Key auf letzter angemeldeter Benutzer:

    AutoIt
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    
    Local $sDatabaseFileName = "TEST_DB"
    
    ;Datenbank File erstellen und Tabelle anlegen
    If Not FileExists($sDatabaseFileName & ".db3") Then
        _Create_Databasefile($sDatabaseFileName, ' "Prozessor" TEXT, "RAM" INTEGER, "letzter angemeldeter Benutzer" TEXT PRIMARY KEY, "OS" TEXT')
    EndIF

    pasted-from-clipboard.png

    Beispiel mit einer Abfrage vor dem schreiben in die Datenbank (Datenbank mit index und primary key)

    AutoIt
    ;Ins Script dann diese Includes:
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    
    Local $sDatabaseFileName = "TEST_DB"
    Local $InsertDaten, $sValueExist
    Local $aInsertDaten
    ;Datenbank File erstellen und Tabelle anlegen
    If Not FileExists($sDatabaseFileName & ".db3") Then
        _Create_Databasefile($sDatabaseFileName, ' "Prozessor" TEXT, "RAM" INTEGER, "letzter angemeldeter Benutzer" TEXT PRIMARY KEY, "OS" TEXT')
    EndIf
    
    ;@TAB habe ich bei meinem Projekt als Trennung siehe StringReplace in der _sql Funktion
    $InsertDaten = "Intel Pentium 75" & @TAB & "8192" & @TAB & "MAX Mustermann" & @TAB & "Linux wtf"
    ;~ $InsertDaten = "Intel Pentium 190" & @TAB & "18192" & @TAB & "MAX Mustermann" & @TAB & "Linux wtf1"
    
    ;~ ;Auf einen einzelnen Wert prüfen "letzter angemeldeter Benutzer"
    ;~ $sValueExist = _sql_search_act($sDatabaseFileName, $sDatabaseFileName, "letzter angemeldeter Benutzer", "MAX Mustermann", "letzter angemeldeter Benutzer")
    ;~ ConsoleWrite("$sValueExist = " & $sValueExist & @CRLF)
    ;~ If $sValueExist = "" Then
    ;~     ConsoleWrite("Neueintrag " & $InsertDaten & @CRLF)
    ;~     _sql($sDatabaseFileName, $InsertDaten)
    ;~ Else
    ;~     ConsoleWrite("Update " & $InsertDaten & @CRLF)
    ;~     _sql_update($sDatabaseFileName, $InsertDaten)
    ;~ EndIf
    
    $aInsertDaten = StringSplit($InsertDaten, @TAB)
    ;Eingabewerte prüfen und nur wenn sich was verändert hat Update durchführen
    $sValueExist = _sql_search_act($sDatabaseFileName, $sDatabaseFileName, "letzter angemeldeter Benutzer", $aInsertDaten[3])
    ConsoleWrite("$sValueExist = " & $sValueExist & @CRLF)
    If $sValueExist = "" Then
        ConsoleWrite("Neueintrag " & $InsertDaten & @CRLF)
        _sql($sDatabaseFileName, $InsertDaten)
    ElseIf $sValueExist <> $InsertDaten Then
        ConsoleWrite("Update " & $InsertDaten & @CRLF)
        _sql_update($sDatabaseFileName, $InsertDaten)
    EndIf
    
    
    Func _sql($sDatabaseFileName, $sInsertData, $sTablename = $sDatabaseFileName)
        Local $hQuery, $aRow, $sMsg
        _SQLite_Startup()
        _SQLite_Open(@ScriptDir & "\" & $sDatabaseFileName & ".db3")
        $sInsertData = StringReplace($sInsertData, @TAB, '","')
        $sInsertData = '"' & $sInsertData & '"'
        _SQLite_Exec(-1, "INSERT INTO " & $sTablename & " VALUES (" & $sInsertData & ");")     ; INSERT Data
        _SQLite_Close()
        _SQLite_Shutdown()
    EndFunc   ;==>_sql
    
    Func _sql_update($sDatabaseFileName, $sInsertData, $sTable = $sDatabaseFileName)
        Local $hQuery, $aRow, $sMsg
        _SQLite_Startup()
        _SQLite_Open(@ScriptDir & "\" & $sDatabaseFileName & ".db3")
        $sInsertData = StringReplace($sInsertData, @TAB, ',')
        $sInsertData = StringSplit($sInsertData, ",")
        _SQLite_Exec(-1, 'UPDATE ' & $sTable & ' set "Prozessor" = "' & $sInsertData[1] & _
                '", "RAM" = "' & $sInsertData[2] & _
                '", "OS" = "' & $sInsertData[4] & _
                '" WHERE "letzter angemeldeter Benutzer" = "' & $sInsertData[3] & '";')
        _SQLite_Close()
        _SQLite_Shutdown()
    EndFunc   ;==>_sql_update
    
    Func _sql_search_act($sDatabaseFileName, $sTable, $sTableToSearchFor, $sSearchString, $sTablesReturn = "")
        Local $hQuery, $aRow, $sMsg, $iItems, $sReturnData
        If $sTablesReturn = "" Then
            $sTablesReturn = "*"
        Else
            $sTablesReturn = '"' & $sTablesReturn & '"'
        EndIf
        _SQLite_Startup()
        _SQLite_Open(@ScriptDir & "\" & $sDatabaseFileName & ".db3")
        ConsoleWrite('SELECT ' & $sTablesReturn & ' FROM ' & $sTable & ' where "' & $sTableToSearchFor & '" like "' & $sSearchString & '";' & @CRLF)
        _SQLite_Query(-1, 'SELECT ' & $sTablesReturn & ' FROM ' & $sTable & ' where "' & $sTableToSearchFor & '" like "' & $sSearchString & '";', $hQuery)     ; the query
        While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
            For $iItems = 0 To UBound($aRow) - 1
                $sReturnData &= $aRow[$iItems] & @TAB
            Next
        WEnd
        _SQLite_Close()
        _SQLite_Shutdown()
        Return StringTrimRight($sReturnData, 1)
    EndFunc   ;==>_sql_search_act
    
    Func _Create_Databasefile($sDatabaseFileName, $sCollums, $sTablename = $sDatabaseFileName)
        _SQLite_Startup()
        _SQLite_Open(@ScriptDir & "\" & $sDatabaseFileName & ".db3")
        If Not _SQLite_Exec(-1, 'CREATE TABLE if not exists "' & $sTablename & '" (' & $sCollums & ');') = $SQLITE_OK Then _
                MsgBox(16, "SQLite Error", _SQLite_ErrMsg()) ; CREATE a Table
        If Not _SQLite_Exec(-1, 'create unique index if not exists Unique1 on ' & $sDatabaseFileName & ' ("letzter angemeldeter Benutzer");') = $SQLITE_OK Then _
                MsgBox(16, "SQLite Error", _SQLite_ErrMsg(), 1) ; CREATE a INDEX
        _SQLite_Close()
        _SQLite_Shutdown()
    EndFunc   ;==>_Create_Databasefile
    Alles anzeigen
  • Abfrageergebnisse in Datei/Datenbank schreiben/lesen

    • Concara
    • 19. Januar 2022 um 11:26

    Hallo!

    Meine Meinung nach vergiss das mit INI.

    Wenn du es mit sqlite probieren willst hier mal der Link damit du starten kannst: https://www.autoitscript.com/autoit3/pkgmgr/sqlite/

    Link stammt von dieser Seite https://www.autoitscript.com/autoit3/docs/l…ite_Startup.htm

    Von dort ladest du dir die sqlite3.dll und sqlite3_x64.dll herunter und gib sie in den Script Ordner.

    Oder:

    Auszug:

    If #include <SQLite.dll.au3> is included the SQLite version is checked.
    The SQLite files can be downloaded from https://www.autoitscript.com/autoit3/pkgmgr/sqlite/SQLite3_version.zip that can be stored in @ScriptDir, @SystemDir, @WindowsDir, or @WorkingDir.

    Zum Start flach und mit "schnellem" Erfolg alle Daten in eine Tabelle und "alles" wird rein geschrieben ohne Überprüfung:

    AutoIt
    ;In das Script dann diese Includes:
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    
    Local $sDatabaseFileName = "TEST_DB"
    
    ;Datenbank File erstellen und Tabelle anlegen
    If Not FileExists($sDatabaseFileName & ".db3") Then
        _Create_Databasefile($sDatabaseFileName, ' "Prozessor" TEXT, "RAM" INTEGER, "letzter angemeldeter Benutzer" TEXT, "OS" TEXT')
    EndIF
    
    ;@TAB habe ich bei meinem Projekt als Trennung siehe StringReplace in der _sql Funktion
    $InsertDaten = "Intel Pentium 75" & @TAB & "8192" & @TAB & "MAX Mustermann" & @TAB & "Linux wtf" 
    _sql($sDatabaseFileName, $InsertDaten)
    
    Func _sql($sDatabaseFileName, $sInsertData, $sTablename = $sDatabaseFileName)
        Local $hQuery, $aRow, $sMsg
        _SQLite_Startup()
        _SQLite_Open(@ScriptDir & "\" & $sDatabaseFileName & ".db3")
        $sInsertData = StringReplace($sInsertData, @TAB, '","')
        $sInsertData = '"' & $sInsertData & '"'
        _SQLite_Exec(-1, "INSERT INTO " & $sTablename & " VALUES (" & $sInsertData & ");")     ; INSERT Data
        _SQLite_Close()
        _SQLite_Shutdown()
    EndFunc   ;==>_sql
    
    Func _sql_update($sDatabaseFileName, $sInsertData, $sTablename = $sDatabaseFileName)
        Local $hQuery, $aRow, $sMsg
        _SQLite_Startup()
        _SQLite_Open(@ScriptDir & "\" & $sDatabaseFileName & ".db3")
        $sInsertData = StringReplace($sInsertData, @TAB, '","')
        $sInsertData = '"' & $sInsertData & '"'
        _SQLite_Exec(-1, "UPDATE " & $sTablename & " SET " & $sInsertData & ";")     ; INSERT Data
        _SQLite_Close()
        _SQLite_Shutdown()
    EndFunc   ;==>_sql_update
     
    Func _Create_Databasefile($sDatabaseFileName, $sCollums, $sTablename = $sDatabaseFileName)
        _SQLite_Startup()
        _SQLite_Open(@ScriptDir & "\" & $sDatabaseFileName & ".db3")
        If Not _SQLite_Exec(-1, 'CREATE TABLE if not exists "' & $sTablename & '" (' & $sCollums & ');') = $SQLITE_OK Then _
                MsgBox(16, "SQLite Error", _SQLite_ErrMsg()) ; CREATE a Table
    ;~     If Not _SQLite_Exec(-1, 'create unique index if not exists Unique1 on ' & $sDatabaseFileName & ' ("PCNAME", "Benutzername");') = $SQLITE_OK Then _
    ;~             MsgBox(16, "SQLite Error", _SQLite_ErrMsg(), 1); CREATE a INDEX
        _SQLite_Close()
        _SQLite_Shutdown()
    EndFunc   ;==>_Create_Databasefile
    Alles anzeigen

    Nachteile in dem Script:

    _SQLite_Startup() und _SQLite_Shutdown() werden bei jedem Funktionsaufruf gestartet und beendet.

    Bei großen Datenmengen sind einzelne Insert sehr langsam

    Besser:

    Code
        _SQLite_Startup()
        Do
            Sleep(Random(20, 250, 1))
            _SQLite_Open(@ScriptDir & "\" & $sDatabaseFileName & ".db3")
        Until Not @error
        _SQLite_Exec(-1, "Begin Transaction;")
        _SQLite_Exec(-1, $result) ; INSERT Data
        _SQLite_Exec(-1, "Commit Transaction;")
        _SQLite_Close()
        _SQLite_Shutdown()

    $result ist dann so aufgebaut:

    INSERT INTO "main"."TEST_DB" ("Prozessor", "RAM", "letzter angemeldeter Benutzer", "OS") VALUES ('Intel Pentium 75', '8192', 'MAX Mustermann', 'Linux wtf');

    INSERT INTO "main"."TEST_DB" ("Prozessor", "RAM", "letzter angemeldeter Benutzer", "OS") VALUES ('Intel Pentium 90', '8192', 'MAX Musterfrau', 'Linux Mint');

    INSERT INTO "main"."TEST_DB" ("Prozessor", "RAM", "letzter angemeldeter Benutzer", "OS") VALUES ('Intel Pentium 100', '8192', 'MAX Mustermann1', 'Linux wtf');

    INSERT INTO "main"."TEST_DB" ("Prozessor", "RAM", "letzter angemeldeter Benutzer", "OS") VALUES ('Intel Pentium 200', '8192', 'MAX Musterfrau2', 'Linux Mint');

    .....

    Das geht rasend schnell bei Sqlite und bei anderen DBs auch.

    Auf ein Problem stösst du wahrscheinlich auch, Anführungszeichen "zerstören" dir deine inserts.

    Also musst du eine Routine schreiben die diese doppelt kommentiert.

    Beispiel: Intel "Pentium" 300 wird dann Intel ""Pentium"" 300


    Sehr Hilfreich zum Nachsehen und SQl ausprobieren ein DB Browser: DB Browser for SQLite (sqlitebrowser.org)

  • Neue, aktualisierte UDF für den Windows Task Scheduler!

    • Concara
    • 8. Dezember 2021 um 19:20

    Super Danke!

    Hast du das irgendwo beschrieben ich habe in der Readme nichts gelesen!?


    Auszug aus der Readme

    DOCUMENTATION

    =============

    I have been able - based on the great work done by MrCreatoR! - to generate a single CHM file for the TaskScheduler UDF.

    This help file looks like the AutoIt help file - unfortunately you can't call this help from SciTE yet.

    All other help files (_TS_*.htm, TaskScheduler.htm, default.css) have been removed.

  • Neue, aktualisierte UDF für den Windows Task Scheduler!

    • Concara
    • 8. Dezember 2021 um 19:08

    Ja genau TaskScheduler.chm

    pasted-from-clipboard.png

  • Neue, aktualisierte UDF für den Windows Task Scheduler!

    • Concara
    • 8. Dezember 2021 um 18:59

    Hallo Water!

    Die Hilfedatei funktioniert bei mir leider nicht. Version 1.6.0.0

    LG

    Concara

  • HEX Zahlen die per Schleife erzeugt wurden in ein Array (Variable) schreiben

    • Concara
    • 15. Oktober 2021 um 09:59

    Danke AspirinJunkie!

    Das mit der 0 ist einfach und genial zugleich.

  • HEX Zahlen die per Schleife erzeugt wurden in ein Array (Variable) schreiben

    • Concara
    • 14. Oktober 2021 um 13:31

    Interesannt:

    AutoIt
    Local $iVal = 0x7fffffff
    ConsoleWrite("ConsoleWrite $iVal 0x7fffffff............... = " & $iVal & @CRLF)
    Local $iVal = 0x80000000
    ConsoleWrite("ConsoleWrite $iVal 0x80000000............... = " & $iVal & @CRLF)

    ConsoleWrite $iVal 0x7fffffff............... = 2147483647

    ConsoleWrite $iVal 0x80000000............... = -2147483648

  • HEX Zahlen die per Schleife erzeugt wurden in ein Array (Variable) schreiben

    • Concara
    • 14. Oktober 2021 um 13:00
    AutoIt
    Local $iVal = 0xFFFFFFFF
    ConsoleWrite("ConsoleWrite $iVal ............... = " & $iVal & @CRLF)

    ConsoleWrite $iVal ............... = -1

    Das mein ich.

  • Active-Directory Properties auslesen

    • Concara
    • 14. Oktober 2021 um 12:37

    Hi!

    Da kann dir water 's AD UDF https://www.autoitscript.com/forum/files/fi…-directory-udf/ helfen. Die Funktion lautet _AD_IsObjectDisabled.

    Eventuell brauchst du Adminrechte damit du diese Informationen abfragen darfst.

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™