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

Beiträge von bernd670

  • Datei Time (Erstellung, Bearbeitung, letzter Zugriff) mit unterschiedlichen Ergebnissen

    • bernd670
    • 31. März 2018 um 09:27

    Hallo,

    die 2 Stunden Zeitunterschied kommen daher, dass die Zeiten in UTC gespeichert werden. Das ist ja auch sinnvoll wenn man z.B. Dateien in verschieden Zeitzonen miteinander vergleichen will. Mit der Funktion _Date_Time_FileTimeToLocalFileTime kann man sie in die Lokale Zeit konvertieren.

    Wenn du eine Datei immer nur zwischen gleichen Dateisystemen kopierst, sollte die Modified-Zeit immer die gleiche sein, solange die Datei nicht verändert wurde.

    Problematisch ist es wenn es sich um unterschiedliche Dateisysteme handelt. Bei FAT (FAT32, exFAT ...) hat die Modified-Zeit nur eine Genauigkeit von 2 Sekunden. das heisst wenn die Zeit in NTFS z.B. 21:14:40.624 ist dann ist die Zeit in FAT 21:14:42.000. Es wird also immer auf die nächsten 2 Sekunden aufgerundet.

    Richtig Interessant wird es wenn dann noch ein Dateisystem dazukommt, das zwichen Groß- und Kleinschreibung unterscheidet.

  • GUI: Verhindern, dass Neustart durchgeführt wird und die Meldung "Das Programm verhindert, dass Windows abgemeldet wird." aufkommt

    • bernd670
    • 29. März 2018 um 15:05

    Hallo,

    hast du dir in der Hilfe schon mal das Beispiel von _WinAPI_ShutdownBlockReasonQuery angesehen. Wenn es auch mit Windows 10 funktionieren soll, muss man nur die erste If-Abfrage etwas anpassen.

    Spoiler anzeigen
    Code
    #include <WinAPISys.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    
    If  Number(_WinAPI_GetVersion()) < 6.0 Then ; Anpassung für Windows 10
        MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Require Windows Vista or later.')
        Exit
    EndIf
    
    Local $hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), 200, 200)
    Local $Button = GUICtrlCreateButton('', 73, 62, 54, 54, $BS_ICON)
    GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 45)
    GUICtrlSetTip(-1, 'Log off ' & @UserName)
    Local $Check = GUICtrlCreateCheckbox('Block Windows shutdown', 10, 173, 144, 21)
    GUIRegisterMsg($WM_QUERYENDSESSION, 'WM_QUERYENDSESSION')
    GUISetState(@SW_SHOW)
    
    ; Set the highest shutdown priority for the current process to prevent closure the other processes.
    _WinAPI_SetProcessShutdownParameters(0x03FF)
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $Button
                Shutdown(0)
            Case $Check
                If GUICtrlRead($Check) = $GUI_CHECKED Then
                    _WinAPI_ShutdownBlockReasonCreate($hForm, 'This application is blocking system shutdown because the saving critical data is in progress.')
                Else
                    _WinAPI_ShutdownBlockReasonDestroy($hForm)
                EndIf
        EndSwitch
    WEnd
    
    Func WM_QUERYENDSESSION($hWnd, $Msg, $wParam, $lParam)
        #forceref $Msg, $wParam, $lParam
    
        Switch $hWnd
            Case $hForm
                If _WinAPI_ShutdownBlockReasonQuery($hForm) Then
                    Return 0
                EndIf
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_QUERYENDSESSION
    Alles anzeigen
  • Bildscan

    • bernd670
    • 28. März 2018 um 23:22

    Hallo,

    der Fehler liegt in der Funktion _save, wenn man eine Datei mit FileOpen öffnet sollte man alle weiteren Dateioperationen mit dem Filehandle durchführen der von FileOpen zurückgegeben wird. Besonders die Funktion FileClose, den diese funktioniert nur mit dem Filehandle und kann nicht mit Dateinamen aufgerufen werden.

    Richtig wäre deine Funktion so:

    Spoiler anzeigen
    AutoIt
    #Region ### save ###
    Func _save($Tdata)
        Local $sFile = @ScriptDir & "\Save.txt"
        $hFile = FileOpen($sFile, $FO_APPEND)
        FileWrite($hFile, $Tdata)
        FileClose($hFile)
    EndFunc   
    #EndRegion ### save ###

    Da aber $FO_APPEND der Standardmodus ist ginge auch folgendes:

    Spoiler anzeigen
    AutoIt
    #Region ### save ###
    Func _save($Tdata)
        Local $sFile = @ScriptDir & "\Save.txt"
        FileWrite($sFile, $Tdata)
    EndFunc   ;==>_save
    #EndRegion ### save ###

    Bei dir wrd die Datei immer wieder geöffnet aber nie geschlossen und FileWrite schreibt direkt in die Datei.

    Nun solltest du nur folgendes bedenken, du führst bei jeden Pixel eine Schreiboperation auf die Festplatte aus. Bei einem Bild mit 4K Auflösung sind das dann ca. 9.000.000 Schreiboperationen. Wer also mal ein Testprogramm braucht, das testet ob eine SSD wirklich totgeschrieben werden kann, hier ist eins.

    Ich habe dein Programm mal etwas geändert, jetzt wird nur noch einmal pro Datei geschrieben und die Ausgabe in die EditBox geschieht nur noch einmal je Pixelzeile. Dadurch wird dein Programm extrem beschleunigt.

    Spoiler anzeigen
    Code
    #cs ----------------------------------------------------------------------------
    
        AutoIt Version: 3.3.14.5
        Author: Skilkor
    
        Script Function:
        scan & save color-grid of imported image
    
    #ce ----------------------------------------------------------------------------
    
    #Region ### #include ###
    #include <EditConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiEdit.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <FileConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <ProgressConstants.au3>
    #include <GDIPlus.au3>
    #EndRegion ### #include ###
    
    #Region ### Global ###
    Global $hGuiTitel = 'Image Scan'
    Global $data
    Global $Pic_ODia = FileOpenDialog('Pic', @ScriptDir & '\', 'Images (*.BMP;*.JPG)', 2)
    #EndRegion ### Global ###
    
    #Region ### hGui ###
    $hGui = GUICreate($hGuiTitel, 720, 450, -1, -1)
    $imp_b = GUICtrlCreateButton('import...', 10, 10, 50, 25)
    $scan_b = GUICtrlCreateButton('Scan...', 10, 40, 50, 25)
    $Pic_Show = GUICtrlCreatePic('', 80, 10, 380, 140)
    $data_Field = GUICtrlCreateEdit('Startup: Init import' & @CRLF, 10, 160, 700, 210, BitOR($ES_WANTRETURN, $ES_MULTILINE, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $WS_VSCROLL), -1)
    _GUICtrlEdit_SetLimitText($data_Field, 0)
    $Prog_Main = GUICtrlCreateProgress(10, 380, 700, 25, $PBS_SMOOTH)
    $Prog_Sub = GUICtrlCreateProgress(10, 415, 700, 25, $PBS_SMOOTH)
    
    GUISetState(@SW_SHOW)
    #EndRegion ### hGui ###
    _import()
    #Region ### While 1 ###
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $imp_b
                _import()
            Case $scan_b
                _scan_init()
    
        EndSwitch
    WEnd
    #EndRegion ### While 1 ###
    
    #Region ### Fun _import() ###
    Func _import()
    
        If @error Then
            _Data_Field('ERROR: No file(s) were selected.')
        Else
            GUICtrlSetImage($Pic_Show, $Pic_ODia)
            _Data_Field('Imported: ' & $Pic_ODia)
        EndIf
        Return
    EndFunc   ;==>_import
    #EndRegion ### Fun _import() ###
    
    #Region ### Scan_init ###
    Func _scan_init()
        _Data_Field('Scan: Startup')
        _GDIPlus_Startup()
        _Data_Field('Scan: GDI+ Startup')
        $hImage = _GDIPlus_ImageLoadFromFile($Pic_ODia)
        _Data_Field('Scan: GDI+ Load Image - ' & $hImage)
        $width = _GDIPlus_ImageGetWidth($hImage) ;x
        _Data_Field('Scan: GDI+ width = ' & $width)
        $height = _GDIPlus_ImageGetHeight($hImage) ;y
        _Data_Field('Scan: GDI+ height = ' & $height)
        _scan($width - 1, $height - 1, $hImage)
    EndFunc   ;==>_scan_init
    #EndRegion ### Scan_init ###
    
    #Region ### Scan ###
    Func _scan($x, $y, $hImage)
        $sSaveData = ""
        For $a = 0 To $y
            $sDataField = ""
            GUICtrlSetData($Prog_Main, (100 / $y * $a))
            For $i = 0 To $x
                $PGC_w = _GDIPlus_BitmapGetPixel($hImage, $i, $a)
    
                $sDataField &= 'Scan: @Grid: x: ' & $i & ' | y: ' & $a & ' | Pixel Color: ' & $PGC_w & @CRLF
                $sSaveData &= $PGC_w & ' - '
                GUICtrlSetData($Prog_Sub, (100 / $x * $i))
            Next
            _Data_Field($sDataField)
        Next
        _save($sSaveData)
    
        $size = $y & 'x' & $x
    
        _GDIPlus_Shutdown()
        _Data_Field('Scan: GDI+ Shutdown')
    EndFunc   ;==>_scan
    #EndRegion ### Scan ###
    
    #Region ### Func _Data_Field ###
    Func _Data_Field($data)
    
        GUICtrlSetData($data_Field, $data & @CRLF, 1)
    EndFunc   ;==>_Data_Field
    #EndRegion ### Func _Data_Field ###
    
    #Region ### save ###
    Func _save($Tdata)
        Local $sFile = @ScriptDir & "\Save.txt"
        $hFile = FileOpen($sFile, $FO_OVERWRITE)
        FileWrite($hFile, $Tdata)
        FileClose($hFile)
    EndFunc   ;==>_save
    #EndRegion ### save ###
    Alles anzeigen
  • Monitor schaltet sich nicht mehr ab bei "@SW_hide"

    • bernd670
    • 20. Juni 2015 um 11:59

    Hallo,

    hast schon mal probiert @SW_MINIMIZE und @SW_HIDE zu kombinieren, bzw. @SW_SHOW und @SW_RESTORE.

    AutoIt: verstecken
    WinSetState("$WKodi", "", @SW_MINIMIZE)
    WinSetState("$WKodi", "", @SW_HIDE)
    AutoIt: wiederherstellen
    WinSetState("$WKodi", "", @SW_SHOW)
    WinSetState("$WKodi", "", @SW_RESTORE)
  • Icondatei mit mehreren Icongrößen mit GDI+ laden

    • bernd670
    • 16. Juni 2015 um 19:23

    Ich mache immer den Haken bei Use our download manager and get recommended downloads raus und drücke auf den kleinen Download-Button, dann passiert nichts.

    Habe es eben mal mit Haken und/oder "Download Now" probiert dann schlägt es bei mir auch Alarm.

  • Icondatei mit mehreren Icongrößen mit GDI+ laden

    • bernd670
    • 16. Juni 2015 um 19:07

    Bei mir wird keine Adware installiert!

  • Icondatei mit mehreren Icongrößen mit GDI+ laden

    • bernd670
    • 16. Juni 2015 um 18:12

    Und wer noch einen guten Icon-Editor sucht, der nebenbei auch noch open source ist, dem kann ich Greenfish Icon Editor Pro empfehlen.

  • FTP Verbindung herstellen

    • bernd670
    • 13. Juni 2015 um 01:18

    Hallo,

    lass mich mal raten, du hast die Änderungen an der FTPEx.au3 nicht wieder rückgängig gemacht oder. Deshalb wird nämlich UNKNOWN status = 40 ausgegeben. Die Werte die du geändert hast habe nichts mit Timeouts zu tun, das sind einfach nur die Statuscodes.

  • FF.au3 und Inner HTML

    • bernd670
    • 12. Juni 2015 um 17:41

    Hallo,

    Bei einem so kurzen HTML-Quellcode-Schnipsel kann man immer nur Vermutungen abgeben und daran haben hier die wenigsten interesse.

    Also am besten den Link zur Seite oder einfach mal "Seite speichern" und den Quelltext anhängen!

  • Variable Daten von Access übernehmen und per MSG verteilen

    • bernd670
    • 10. Juni 2015 um 20:19

    Nur zur Info,

    Für jeden Aufruf von Wow64DisableWow64FsRedirection muss auch Wow64RevertWow64FsRedirection aufgerufen werden.

    Zitat von MSDN

    Every call to the Wow64DisableWow64FsRedirection function must have a matching call to the Wow64RevertWow64FsRedirection function. This will ensure redirection is re-enabled and frees associated system resources.

    Im obigen Programm reicht es wenn Wow64DisableWow64FsRedirection einmal vor der Schleife und Wow64RevertWow64FsRedirection nach der Schleife aufgerufen wird.

    So wird Wow64DisableWow64FsRedirection gemäß MSDN richtig aufgerufen

    Spoiler anzeigen
    AutoIt
    Local $sOldVal = DllStructCreate("int")
    Local $pOldVal = DllStructGetPtr($sOldVal)
    DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "ptr", $pOldVal)

    und so wird Wow64RevertWow64FsRedirection gemäß MSDN aufgerufen

    Spoiler anzeigen
    AutoIt
    DllCall("kernel32.dll", "int", "Wow64RevertWow64FsRedirection", "int", $sOldVal)


    Im obigen Programm also z. B. so:

    Spoiler anzeigen
    AutoIt
    $oldWow64FR = _DisableWow64FsRedirection()
    
    
    For $i = 1 To $user[0]
    	Run("c:\windows\System32\msg.exe " & $user[$i] & " /Server:" & $pc[$i] & " jojojo")
    Next
    
    
    _RevertWow64FsRedirection($oldWow64FR)
    
    
    
    
    
    
    Func _DisableWow64FsRedirection()
    	Local $sOldVal = DllStructCreate("int")
    	Local $pOldVal = DllStructGetPtr($sOldVal)
    
    
    	DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "ptr", $pOldVal)
    
    
    	Return DllStructGetData($sOldVal, 1)
    EndFunc
    
    
    Func _RevertWow64FsRedirection($iOldVal)
    	DllCall("kernel32.dll", "int", "Wow64RevertWow64FsRedirection", "int", $iOldVal)
    EndFunc
    Alles anzeigen
  • ConsoleWrite (Zeilennummer) und nach langem Pfad Zeilenumbruch einfügen in die Console

    • bernd670
    • 10. Juni 2015 um 17:35

    Du kannst im SciTE, im Menü Optionen, die Option "Zeilen in der Ausgabe umbrechen" wählen, dann wird der Text nicht mehr über das Zeilenende geschrieben.

  • Dateinamen auf Duplikate überprüfen

    • bernd670
    • 9. Juni 2015 um 20:54

    Hallo,

    mit StringReplace funktioniert das so nicht, StringReplace gibt immer einen String zurück egal ob was ersetzt wurde oder nicht. Wenn du StringReplace verwenden willst mußt du danach @extended auswerten, in @extended steht die Anzahl der Ersetzungen, also 0 wenn nichts ersetzt wurde.

    Besser ist aber wenn du es mit StringRegExp auswertest, z. B. so:

    AutoIt
    if StringRegExp($Dateiname, "[\Q\/:*?""<>|\E]") Then
    	$Zeichen = msgbox(262144,"Fehler","Der Dateiname darf keines der folgenden Zeichen enthalten:" & @crlf & @crlf & "\ / : * ? "" < > |" )
    ....

    Das & ist normal kein ungültiges Zeichen für Dateinamen, ausser bei Verwendung in der DOS-Box!

  • Brauche Hilfe zu StringRegExp (Neu)

    • bernd670
    • 8. Juni 2015 um 21:51
    Zitat von AspirinJunkie

    Gibts da irgendein Tool welches die Anzahl der Schritte ausgibt?

    Ich habe es auch mit RegexBuddy gemacht, man kann sich aber z. B. den kostenlosen Regex Coach herunterladen, der hat eine Step-Funktion, damit kann man zumindest schrittweise beobachten wie der Pattern arbeitet.

  • Brauche Hilfe zu StringRegExp (Neu)

    • bernd670
    • 8. Juni 2015 um 20:24
    Zitat von Friesel

    Falls die ID immer gleich aufgebaut ist, lässt sich das Ganze noch weiter vereinfachen, was auch theoretisch etwas schneller sein sollte, weil weniger überprüft werden muss.

    Nur mal zur Info,
    id=".*_(.+)" .+src="text/bild1.+" benötigt 1532 Schritte bis die ID gefunden wird und id=".*?(\d+)".+src="text/bild1.+" nur 220 Schritte, ist also rund 7 mal schneller!

  • DateDiff bestimmter Monat innerhalb eines Zeitraums

    • bernd670
    • 8. Juni 2015 um 20:10

    Du musst das Datum erstmal aus dem Datepicker auslesen und den String entsprechend zerlegen.

    AutoIt
    Func _Datefunc2()
    	$szdate = GUICtrlRead($startdate)
    	$MaxTageMonat = _DateDaysInMonth(StringRight($szdate,4), StringMid($szdate,4,2))
    
    
    	$days82 = 	$diffausgabe
    	GUICtrlSetData($Ergebnis, $days82 & "/" & String($MaxTageMonat))
    EndFunc
  • Backreferenz bei StringRegExpReplace nur eingeschränkt möglich

    • bernd670
    • 8. Juni 2015 um 13:39

    In den Bemerkungen von StringRegExpReplace steht doch drin das nur \ und $ gültige Formate für Backreferenzen in Ersetzungen sind.

    Zitat von Hilfe

    The "\" and "$" replacement formats are the only valid back-references formats supported.

  • Desktop reservieren bei zwei Monitoren

    • bernd670
    • 8. Juni 2015 um 11:42

    Hallo,

    evtl. mal so probieren.

    AutoIt
    #include <ScreenCapture.au3>
    #include <WindowsConstants.au3>
    
    
    Const $SPI_SETWORKAREA = 47
    Const $SPIF_SENDCHANGE = 2
    
    
    $aVS = _GetVirtualScreenSize() ; [0] = breite, [1] = höhe
    
    
    $tRECT = DllStructCreate('int;int;int;int')
    DllStructSetData($tRECT, 1, 0) ; left
    DllStructSetData($tRECT, 2, 40) ; top
    DllStructSetData($tRECT, 3, $aVS[0]) ; right
    DllStructSetData($tRECT, 4, @DesktopHeight -  40) ; buttom
    _WinAPI_SystemParametersInfo($SPI_SETWORKAREA, 0, DllStructGetPtr($tRECT), $SPIF_SENDCHANGE)
    
    
    
    
    Func _GetVirtualScreenSize()
    	Local $aVSS[2] = [0, 0]
    
    
    	$aVSS[0] = _WinAPI_GetSystemMetrics($SM_CXVIRTUALSCREEN)
    	$aVSS[1] = _WinAPI_GetSystemMetrics($SM_CYVIRTUALSCREEN)
    
    
    	If ($aVSS[0] = 0) Or ($aVSS[1] = 0) Then
    		$aVSS[0] = 0
    		$aVSS[1] = 0
    	EndIf
    
    
    	Return SetError(($aVSS[0] Or $aVSS[1]),0, $aVSS)
    EndFunc
    Alles anzeigen

    Wenn das nicht geht, muss man wahrscheinlich mit der Funktion GetMonitorInfo erstmal den Bereich des 2. Montiors auslesen und dann setzten.

  • Selection option ändern ohne Form (IE)

    • bernd670
    • 5. Juni 2015 um 00:49

    Warum so kompliziert, du mußt doch nur das machen was die Funktion marketplaceChanged macht. Die Url mit der entsprechenden marketplaceID aufzurufen.

    Sprich https://sel.....html?abc=xyz&marketplaceID=A1F83G8C2ARO7P

  • Brauche Hilfe zu StringRegExp (Neu)

    • bernd670
    • 4. Juni 2015 um 17:56

    Hallo,

    einfach die Anführungszeichen im String verdoppeln!

    AutoIt
    $iresult = StringRegExp($iquellcode1, '<div class="blablablabla" blablablabla"blablablabla(''blablablabla'');">blablablabla</div>', 3)

    Steht in der Hilfe unter Language Reference - Datatypes Abschnitt Strings

  • Drag & Drop von Datei in TreeView

    • bernd670
    • 4. Juni 2015 um 12:07

    Ich selbst benutze Drag&Drop nur selten, aber hier wird beschrieben wie Drag&Drop mit TreeView funktioniert -> Drag and Drop Operations.

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™