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

  • Merkwürdiges Verhalten auch bei DirCopy ?

    • Oscar
    • 13. November 2017 um 17:29
    Zitat von Musashi

    Ich habe bei den Flags zu _WinAPI_ShellFileOperation aber nichts entdecken können, dass z.B. das Ersetzen einer Datei im Zielordner verhindert, wenn diese 'neuer' ist.

    Im dialogfreien Modus nicht, nein!

    Mit dem Windows-Dialog hätte zumindest der Anwender die Möglichkeit, ob der dann immer über das entsprechende Wissen verfügt, sei mal dahingestellt.

    Will man wirklich die volle Kontrolle über die Kopieraktion, muss man wohl jede Datei einzeln testen/kopieren/ersetzen.

  • Merkwürdiges Verhalten auch bei DirCopy ?

    • Oscar
    • 13. November 2017 um 12:12

    Ich weiß nicht, ob ich Dich richtig verstehe.

    Wenn Du _WinAPI_ShellFileOperation($sSourceDir, $sDestinationDir, $FO_COPY, 0) mit Null als Flag aufrufst, dann wird doch der Anwender gefragt, ob eine evtl. bestehende Datei überschrieben werden soll:

    DirCopy_Screenshot.png

    Somit ist _WinAPI_ShellFileOperation mit Flag=0 sogar besser als DirCopy mit Flag=0, oder siehst Du das anders?

    Und wenn Dich die Nachfrage zum erstellen des Zielverzeichnisses beim "Überschreiben"-Flag stört, dann einfach: BitOR($FOF_NOCONFIRMATION, $FOF_NOCONFIRMMKDIR).

  • Merkwürdiges Verhalten auch bei DirCopy ?

    • Oscar
    • 13. November 2017 um 09:29
    Zitat von Musashi

    Trotzdem ärgerlich, da Funktionen wie DirMove und DirCopy ja nun wirklich keine Exoten sind.

    Da stimme ich Dir zu.

    Aber eigentlich hat man mit "_WinAPI_ShellFileOperation" sogar gleich noch eine Benutzer-Rückfrage, ohne dass man sich selbst darum kümmern muss.

    Wenn man sich also eine kleine Funktion ("_DirCopy") schreibt, kann man das echte DirCopy leicht ersetzen:

    AutoIt
    #include <WinAPIShellEx.au3>
    ; Testprogramm zur Funktion DirCopy mit Flag $FC_NOOVERWRITE :
    ; -> Der Ordner ..\Quelle wird in der Zip-Datei mitgeliefert
    
    Opt('MustDeclareVars', 1)  ; Variablen müssen deklariert werden
    
    ; Quellverzeichnis :
    Global $sSourceDir = @ScriptDir & '\Quelle\*'
    ; Zielverzeichnis :
    Global $sDestinationDir = @ScriptDir & '\Ziel'
    
    If _DirCopy($sSourceDir, $sDestinationDir, 0) Then ; oder $FOF_NOCONFIRMATION fuer: "ueberschreiben ohne Nachfrage"
        ConsoleWrite('@@ DirCopy : Verzeichnis = ' & $sSourceDir & ' erfolgreich kopiert' & @CRLF)
    Else
        ConsoleWrite('@@ DirCopy : Verzeichnis = ' & $sSourceDir & ' - Fehler bei DirCopy ' & @CRLF)
    EndIf
    
    ;~ If DirCopy($sSourceDir, $sDestinationDir, $FC_NOOVERWRITE) Then
    ;~     ConsoleWrite('@@ DirCopy : Verzeichnis = ' & $sSourceDir & ' erfolgreich kopiert' & @CRLF)
    ;~ Else
    ;~     ConsoleWrite('@@ DirCopy : Verzeichnis = ' & $sSourceDir & ' - Fehler bei DirCopy ' & @CRLF)
    ;~ EndIf
    
    Func _DirCopy($sSourceDir, $sDestinationDir, $iFlags = 0)
        _WinAPI_ShellFileOperation($sSourceDir, $sDestinationDir, $FO_COPY, $iFlags)
        Return @error == 0
    EndFunc
    Alles anzeigen
  • Merkwürdiges Verhalten auch bei DirCopy ?

    • Oscar
    • 12. November 2017 um 19:51

    Ja, kann ich bestätigen!

    Erst ein $FC_OVERWRITE kopiert die fehlenden Dateien.

    Auch wenn man alle Dateien und das Unterverzeichnis aus dem Zielverzeichnis löscht, wird keine einzige Datei kopiert.

    Offensichtlich findet bei $FC_NOOVERWRITE nur ein Test auf die Existenz des Zielverzeichnisses statt. Existiert es bereits bricht DirCopy ab.

    Für mich ein klarer Bug!

    Aber vermutlich ist das wieder ein Feature. :rolleyes:

    Noch ein Grund mehr, lieber _WinAPI_ShellFileOperation() zu benutzen.

  • _GDIPlus_ImageGetPropertyItems

    • Oscar
    • 9. November 2017 um 08:56

    Diese Funktion liest ausgewaehlte (siehe $aDescription in _GDIPlus_ImageGetItemValue) Exifdaten aus der uebergebenen GDI+ Bitmap aus und gibt diese als String in englisch ($iLanguage = 0) oder deutsch ($iLanguage = 1) zurueck.

    Es werden zur Zeit 24 Exifdaten ausgelesen (vorausgesetzt diese sind in dem Bild gespeichert).

    Edit 20.01.2018: Neue Version! Es werden jetzt zusätzlich einige GPS-Daten (Latitude, Longitude, Altitude und ImageDirection) ausgelesen. Außerdem kann man jetzt die UDF per Include einbinden (siehe Example).

    Dateien

    _GDIPlus_ImageGetPropertyItems.au3 10,18 kB – 352 Downloads _GDIPlus_ImageGetPropertyItems_Example.au3 1,05 kB – 319 Downloads
  • _GDIPlus_ImageSaveAsJPG

    • Oscar
    • 8. November 2017 um 09:50

    Diese Funktion kann eine GDI+ Bitmap als JPG abspeichern.

    Das allein ist ja nichts Besonderes, aber meine Funktion bietet an, die Bitmap vorher zu skalieren und zu drehen bzw. zu spiegeln und kann dann trotzdem noch die EXIF-Daten der Ursprungsbitmap übernehmen.

    Beim skalieren einer GDI+ Bitmap (mit _GDIPlus_ImageScale) wird nämlich eine neue Bitmap erstellt und wenn man diese abspeichert, gehen die EXIF-Daten verloren. Will man diese beibehalten, muss man die Daten von der "alten" Bitmap rüberkopieren.

    Und genau dieses kopieren der EXIF-Daten hat mich den ganzen gestrigen Tag beschäftigt. Ich wollte das unbedingt nur mit AutoIt schaffen (ohne externe Programme verwenden zu müssen).

    Heute habe ich dann den Durchbruch geschafft und die Funktion fertig gestellt:

    Spoiler anzeigen
    AutoIt
    #include <GDIPlus.au3>
    
    Global $sImagefile = @ScriptDir & '\test.jpg'
    Global $sNewFile = @ScriptDir & '\test_new.jpg'
    
    _GDIPlus_Startup()
    Global $hImage = _GDIPlus_BitmapCreateFromFile($sImagefile)
    
    ; Bild als JPG speichern mit Uebername der EXIF-Daten, 90% Qualitaet, Breite und Hoehe jeweils 25% und keine Drehung
    _GDIPlus_ImageSaveAsJPG($hImage, $sNewFile, True, 90, 0.25, 0.25, 0)
    
    _GDIPlus_BitmapDispose($hImage)
    _GDIPlus_Shutdown()
    
    If FileExists($sNewFile) Then ShellExecute($sNewFile)
    Exit
    
    #cs
        $iRotate = Type of rotation and flip:
        0 - No rotation and no flipping (A 180-degree rotation, a horizontal flip and then a vertical flip)
        1 - A 90-degree rotation without flipping (A 270-degree rotation, a horizontal flip and then a vertical flip)
        2 - A 180-degree rotation without flipping (No rotation, a horizontal flip followed by a vertical flip)
        3 - A 270-degree rotation without flipping (A 90-degree rotation, a horizontal flip and then a vertical flip)
        4 - No rotation and a horizontal flip (A 180-degree rotation followed by a vertical flip)
        5 - A 90-degree rotation followed by a horizontal flip (A 270-degree rotation followed by a vertical flip)
        6 - A 180-degree rotation followed by a horizontal flip (No rotation and a vertical flip)
        7 - A 270-degree rotation followed by a horizontal flip (A 90-degree rotation followed by a vertical flip)
    #ce
    Func _GDIPlus_ImageSaveAsJPG($hImage, $sSaveFile, $bEXIF = True, $iQuality = 90, $fScaleW = 1.0, $fScaleH = 1.0, $iRotate = 0)
        Local $hScaledBitmap, $sCLSID, $tData, $tParams, $bRet, $iError = 0
        $hScaledBitmap = _GDIPlus_ImageScale($hImage, $fScaleW, $fScaleH) ; das Bild skalieren (neue Bitmap wird erstellt)
        If $iRotate Then _GDIPlus_ImageRotateFlip($hScaledBitmap, $iRotate) ; die neue Bitmap drehen bzw. spiegeln (wenn gewuenscht)
        If $bEXIF Then ; die EXIF-Daten in die neue Bitmap kopieren (wenn gewuenscht)
            _GDIPlus_ImageCopyPropertyItems($hImage, $hScaledBitmap)
            If @error Then Return SetError(@error, @extended, False)
        EndIf
        $sCLSID = _GDIPlus_EncodersGetCLSID('JPG')
        $tParams = _GDIPlus_ParamInit(1)
        $tData = DllStructCreate('int Quality') ; Struktur fuer die JPG-Qualitaet erstellen
        DllStructSetData($tData, 'Quality', $iQuality) ; JPG-Qualitaet entsprechend setzen (von 0 = schlechteste bis 100 = beste)
        _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, 'Quality'))
        $bRet = _GDIPlus_ImageSaveToFileEx($hScaledBitmap, $sSaveFile, $sCLSID, $tParams)
        If @error Then $iError = 4
        _GDIPlus_BitmapDispose($hScaledBitmap)
        $tData = 0
        Return SetError($iError, 0, $bRet)
    EndFunc   ;==>_GDIPlus_ImageSaveAsJPG
    
    Func _GDIPlus_ImageCopyPropertyItems(ByRef $hSourceImage, ByRef $hDestImage)
        Local Const $tagGDIPPROPERTYITEM = 'uint id;uint length;ushort type;ptr value;'
        Local $aRes, $iSize, $iCount, $tBuffer, $pBuffer, $tGDIPPROPERTYITEM
        $aRes = DllCall($__g_hGDIPDll, 'uint', 'GdipGetPropertySize', 'hwnd', $hSourceImage, 'uint*', 0, 'uint*', 0)
        If @error Then Return SetError(1, @extended, False)
        $iSize = $aRes[2] ; $aRes[2] = Total size in bytes
        $iCount = $aRes[3] ; $aRes[3] = Number of property items
        $tBuffer = DllStructCreate('byte[' & $iSize & ']')
        $pBuffer = DllStructGetPtr($tBuffer)
        $aRes = DllCall($__g_hGDIPDll, 'uint', 'GdipGetAllPropertyItems', 'hwnd', $hSourceImage, 'uint', $iSize, 'uint', $iCount, 'ptr', $pBuffer)
        If @error Then Return SetError(2, @extended, False)
        For $i = 0 To $iCount - 1
            $tGDIPPROPERTYITEM = DllStructCreate($tagGDIPPROPERTYITEM, $pBuffer)
            $aRes = DllCall($__g_hGDIPDll, 'uint', 'GdipSetPropertyItem', 'hwnd', $hDestImage, 'ptr', $pBuffer)
            If @error Then Return SetError(3, @extended, False)
            $pBuffer += DllStructGetSize($tGDIPPROPERTYITEM)
            $tGDIPPROPERTYITEM = 0
        Next
        $tBuffer = 0
        Return True
    EndFunc   ;==>_GDIPlus_ImageCopyPropertyItems
    Alles anzeigen

    Vielleicht könnt ihr so eine Funktion ja auch gebrauchen...

    P.S.: Als Anhang findet ihr ein Test-JPG (mit EXIF-Daten).

    Dateien

    _GDIPlus_ImageSaveAsJPG.au3 3,9 kB – 292 Downloads test.jpg 171,24 kB – 0 Downloads
  • regexreplace

    • Oscar
    • 5. November 2017 um 14:24
    Zitat von BugFix

    Das ist das Gute am Forum - letztlich wird eine Lösung nahe am Optimum gefunden.

    Sehe ich auch so!

    Es schadet ja nicht, wenn man die bisherigen Ergebnisse mal neu hinterfragt.

    Am meisten wunderte ich mich aber über die Tatsache, dass StringRegExpReplace schneller als StringReplace ist.

    Aus den "alten" Testergebnissen hatte ich immer in Erinnerung, dass die einfachen Stringfunktionen schneller als RegExp waren.

    Dass sich das jetzt umgedreht hat, überraschte mich doch sehr.

  • regexreplace

    • Oscar
    • 5. November 2017 um 10:34

    Hmm...ich kann mich noch dukel an den Thread damals erinnern und damals war die Callback-Variante am schnellsten.

    Inzwischen muss man wohl sagen, dass StringRegExpReplace schneller ist.

    Ich habe mal das Script von Bitnugger etwas geändert:

    Spoiler anzeigen
    AutoIt
    ;-- TIME_STAMP   2017-11-05 09:19:00   v 0.2
    
    #Region ;************ Includes ************
    #include <File.au3>
    #EndRegion ;************ Includes ************
    
    Global $g_iCount = 0, $g_bSaveDiff = False ; True = $sReplace1 und $sReplace2 speichern, wenn unterschiedlich
    
    _Example()
    
    Func _Example()
        Local $hFile, $iLen, $sString = ''
        Local $sText = FileRead(@ScriptDir & '\openthesaurus.txt')
        $sString = $sText
    ;~     For $i = 1  To 9
    ;~         $sString &= $sText
    ;~     Next
        $iLen = StringLen($sString)
        Local $sReplace1 = $sString, $sReplace2 = $sString
    
        Local $hTimer1 = TimerInit()
        _StringRegExpReplace_Simple($sReplace1)
        Local $iCount = @extended
        Local $fDiff1 = TimerDiff($hTimer1)
    
        Local $hTimer2 = TimerInit()
        _StringRegExpReplace_Callback($sReplace2, '([äöüÄÖÜß])', '_MyCallbackReplace("$1")')
        Local $fDiff2 = TimerDiff($hTimer2)
    
        ConsoleWrite(StringFormat('Laenge der  Textdatei = %i Bytes\r\r', $iLen))
        ConsoleWrite(StringFormat('_StringRegExpReplace_Simple    Substitutions = %5i  Time: %f ms\r', $iCount, $fDiff1))
        ConsoleWrite(StringFormat('_StringRegExpReplace_Callback  Substitutions = %5i  Time: %f ms\r', $g_iCount, $fDiff2))
    
    ;~     ConsoleWrite('$sReplace1 = ' & $sReplace1 & @CRLF)
    ;~     ConsoleWrite('$sReplace2 = ' & $sReplace2 & @CRLF & @CRLF)
    
        Local $bSave = False
        If $sReplace1 <> $sReplace2 Then
            ConsoleWrite('! Ops... Zeichen stimmen nicht mehr überein!' & @CRLF)
            $bSave = True
        ElseIf $iCount <> $g_iCount Then
            ConsoleWrite('! Ops... Länge stimmt nicht mehr überein!' & @CRLF)
            $bSave = True
        EndIf
    
        If $g_bSaveDiff And $bSave Then
            $hFile = FileOpen(@ScriptDir & '\Replace1.txt', $FO_OVERWRITE + $FO_ANSI)
            FileWrite($hFile, $sReplace1)
            FileClose($hFile)
            $hFile = FileOpen(@ScriptDir & '\Replace2.txt', $FO_OVERWRITE + $FO_ANSI)
            FileWrite($hFile, $sReplace2)
            FileClose($hFile)
        EndIf
    EndFunc   ;==>_Example
    
    Func _StringRegExpReplace_Simple(ByRef $sString)
        Local $iCount = 0
        Local $aReplace = [['Ä', 'Ae'], ['Ö', 'Oe'], ['Ü', 'Ue'], ['ä', 'ae'], ['ö', 'oe'], ['ü', 'ue'], ['ß', 'ss']]
        For $i = 0 To UBound($aReplace) - 1 Step 1
            $sString = StringRegExpReplace($sString, $aReplace[$i][0], $aReplace[$i][1])
    ;~         $sString = StringReplace($sString, $aReplace[$i][0], $aReplace[$i][1]) ; <- langsam!
            $iCount += @extended
        Next
        $sString = StringReplace($sString, Chr(26), "'", 0, 2)
        Return SetExtended($iCount)
    EndFunc   ;==>_StringRegExpReplace_Simple
    
    Func _MyCallbackReplace($_sMatch)
        Local Static $sReplace = 'äöüÄÖÜß' ; durchsuchen mit StringInStr -- Pos ist Index für Replace Array
        Local Static $aReplace = ['bleibt-leer', 'ae', 'oe', 'ue', 'Ae', 'Oe', 'Ue', 'ss'] ; Ersetzungen
        Local $iPos = StringInStr($sReplace, $_sMatch, $STR_CASESENSE) ; Hier fehlte das $STR_CASESENSE
        If $iPos = 0 Then Return $_sMatch ; kann eigentlich nicht passieren
        $g_iCount += 1
        Return $aReplace[$iPos]
    EndFunc   ;==>_MyCallbackReplace
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _StringRegExpReplace_Callback
    ; Description ...: Replaces ByRef all matches in a string by manipulation of the matches in a callback function
    ; Parameters ....: $sString    String to manipulate
    ; ...............: $sPattern   RegExp pattern for the match
    ; ...............: $sCallback  Callback function as string, i.e. "MyCallback('$1')" -- '$1' represents the match
    ; .....optional..: $sBefore    String to insert before the manipulated match
    ; .....optional..: $sAfter     String to insert after the manipulated match
    ; Return values .: Success     1
    ; ...............: Failure     0  set error = 1
    ; Author ........: Taz77
    ; ===============================================================================================================================
    Func _StringRegExpReplace_Callback(ByRef $sString, $sPattern, $sCallback, $sBefore = '', $sAfter = '')
        $sString = Execute("'" & StringRegExpReplace(StringReplace($sString, "'", Chr(26), 0, 2), $sPattern, $sBefore & "'&" & $sCallback & "&'" & $sAfter) & "'")
        If @error Then
            ConsoleWrite('_StringRegExpReplace_Callback error! Pattern: "' & $sPattern & '", Callback: "' & $sCallback & '"' & @LF)
            Return SetError(1, 0, 0)
        EndIf
        $sString = StringReplace($sString, Chr(26), "'", 0, 2)
        Return 1
    EndFunc   ;==>_StringRegExpReplace_Callback
    Alles anzeigen

    auf den Thesaurus als Textform von hier: https://www.openthesaurus.de/export/OpenThe…Textversion.zip

    losgelassen und das Ergebnis sieht so aus:

    Code
    Laenge der  Textdatei = 2675226 Bytes
    
    _StringRegExpReplace_Simple    Substitutions = 36375  Time: 163.841491 ms
    _StringRegExpReplace_Callback  Substitutions = 36375  Time: 466.781470 ms

    Und auch wenn man die Stringlänge auf das Zehnfache erhöht (For...Next-Schleife) verhalten sich beide Funktionen zeitlich linear.

  • DNS-Server IP auslesen

    • Oscar
    • 2. November 2017 um 18:16

    Das hier sollte doch ausreichen:

    AutoIt
    TCPStartup()
    $sIP = TCPNameToIP(@ComputerName)
    TCPShutdown()
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sIP = ' & $sIP & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
  • BITMAP-Datei mit FileRead lesen.

    • Oscar
    • 2. November 2017 um 15:08
    Zitat von DOheim

    Und mit dem Feld $Daten will ich ja im Programm arbeiten.

    Was willst Du denn mit den Daten machen?

  • Hotkey mit fortlaufenden Nummern

    • Oscar
    • 26. Oktober 2017 um 18:02
    Zitat von Joschy41

    Welche Variante ist besser?

    Diese: ;)

    AutoIt
    #include <ScreenCapture.au3>
    
    Global $iScreenshotNr = 1
    Global $sUser = @UserName
    Global $sDir = @ScriptDir & '\' & $sUser & '\'
    If Not FileExists($sDir) Then DirCreate($sDir)
    HotKeySet('{PRINTSCREEN}', '_Screenshot')
    HotKeySet('{ESC}', '_Exit')
    
    While Sleep(1000)
    WEnd
    
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
    
    Func _Screenshot()
        While FileExists($sDir & $sUser & $iScreenshotNr & '.jpg')
            $iScreenshotNr += 1
        WEnd
        If _ScreenCapture_Capture($sDir & $sUser & $iScreenshotNr & '.jpg') Then
            ToolTip($sDir & $sUser & $iScreenshotNr & '.jpg', Default, Default, 'Screenshot', 1, 5)
        Else
            ToolTip('Fehler! Der Screenshot konnte nicht gespeichert werden.', Default, Default, 'Screenshot', 3, 5)
        EndIf
        AdlibRegister('_CloseToolTip', 2000)
    EndFunc   ;==>_Screenshot
    
    Func _CloseToolTip()
        ToolTip('')
        AdlibUnRegister()
    EndFunc   ;==>_CloseToolTip
    Alles anzeigen
  • Hotkey mit fortlaufenden Nummern

    • Oscar
    • 26. Oktober 2017 um 10:18
    Zitat von Joschy41

    Das verstehe ich jetzt nicht ganz so

    Dann benutze lieber das Beispiel von Tuxedo aus Post#6.

    Er verwendet _ScreenCapture_Capture mit dem Dateinamen. Da tritt das Problem nicht auf.

    Zitat von Joschy41

    Aber es funktioniert so...

    Aber nicht lange! Zum Einen ist die Anzahl an offenen Handles begrenzt und zum Anderen wird Dir irgendwann der Speicher ausgehen.

  • Hotkey mit fortlaufenden Nummern

    • Oscar
    • 25. Oktober 2017 um 17:12

    Joschy41: Wenn Du _ScreenCapture_Capture ohne Dateinamen aufrufst, wird ein Handle auf eine HBITMAP übergeben. Nach dem Speichern musst Du dieses Handle wieder freigeben (mit _WinAPI_DeleteObject), ansonsten hast Du ein Speicherleck.

  • ChangeDisplayResolution

    • Oscar
    • 24. Oktober 2017 um 18:45

    So, jetzt ist das Programm fertig (Version 1.0 gibt's in Post#1).

  • ChangeDisplayResolution

    • Oscar
    • 23. Oktober 2017 um 20:01

    Ein kleines Tool (erstellt ein Traymenü) zum ändern der Bildschirm-Auflösung der angeschlossenen Monitore. Sollte ansonsten selbsterklärend sein.

    Screenshot:

    Die angeschlossenen Monitore werden automatisch erkannt. Ebenso die verfügbaren Auflösungen. Wobei ich die Auflösungen auf die 32 Bit Auflösungen und auf alle mit mehr als 60 Hz beschränkt habe.

    Wer mehr will muss die Konstanten im Script (kommentiert) ändern.

    Neu in Version 1.0.0.0:

    - Bei der aktuellen Auflösung befindet sich jetzt ein Haken.

    - Man kann das Programm jetzt in den Autostart packen ("Start with windows").

    - Eine MsgBox mit Programminformationen, wenn man den Info-Eintrag (ganz oben im Menü) anklickt.

    Dateien

    ChangeDisplayResolution_v1_0_0_0.zip 713,7 kB – 540 Downloads
  • Variable erstellen/zusammenfügen

    • Oscar
    • 23. Oktober 2017 um 19:54
    Zitat von autoiter

    Er muss hier doch nur die Neudeklaration in den Funktionen weglassen und eben "addieren" mit &=

    Achso, er will die Buchstaben nur in einer Variablen (also Inhalt)! :S

    Ich hatte das jetzt so verstanden, dass die Buchstaben die Variable (also den Variablennamen) ergeben sollen.

  • Variable erstellen/zusammenfügen

    • Oscar
    • 23. Oktober 2017 um 19:47

    Hmm...was soll das für einen Sinn ergeben?

    Natürlich könntest Du einer globalen Variablen in jeder Funktion einen String addieren und die Variable dann mit Assign erstellen.

    Aber diese Variable müsstest Du dann mit Eval abfragen.

    Ich denke, wenn Du uns erzählst, was das am Ende werden soll, dann können wir Dir auch bessere Lösungen präsentieren.

  • DisplaySettings

    • Oscar
    • 23. Oktober 2017 um 07:43

    Hmm...wenn ich bei mir eine geringere (1920 x 1080) Auflösung einstelle, dann wird korrekt 60 Hz angezeigt.

    Bei allen Auflösungen darüber (bis 2560 x1440) schaltet die Monitor-Anzeige immer wieder auf 59 Hz. Also so, wie hier (unter: "More Information") beschrieben:

    https://support.microsoft.com/en-us/help/200…selected-settin

    "No action is needed." Tja, und was heißt das nun für mein Tool? Sind jetzt alle 59 und 60 Hz Auflösungen gleich?

    Windows sagt 59 Hz, mein Monitor sagt 60 Hz....

  • DisplaySettings

    • Oscar
    • 22. Oktober 2017 um 19:35

    @Musashi: Oh, sorry! Ich hatte noch DISPLAY2 drinstehen. Hab's oben geändert.

    autoiter: Du hast Windows10, nicht?

    Ich vermute: ein Fehler bei Windows7!?

    Oder hat das mit dem Grafikkarten-Treiber zu tun?

    Musashi, Du hast auch eine NVIDIA, oder?

    Autoiter, was hast Du für eine Grafikkarte?

  • DisplaySettings

    • Oscar
    • 22. Oktober 2017 um 15:05

    Verdammt!

    Da läuft irgendwas schief! Ich bekomme hier falsche Werte angezeigt.

    Ich habe zwei Monitore mit folgenden Modi:

    Display1: 2560 x 1440, 32 Bit, 60 Hz

    Display2: 1920 x 1200, 32 Bit, 60 Hz

    aber das folgende Script:

    AutoIt
    #include <WinAPIGdi.au3>
    $aDS = _WinAPI_EnumDisplaySettings('\\.\Display1', $ENUM_CURRENT_SETTINGS)
    ConsoleWrite(StringFormat('-> Current Settings: %d x %d, %d Bit, %d Hz\n', $aDS[0], $aDS[1], $aDS[2], $aDS[3]))
    ConsoleWrite('-> DesktopRefresh: ' & @DesktopRefresh & @CRLF)

    gibt mir das aus:

    Code
    \\.\Display1
    -> Current Settings: 2560 x 1440, 32 Bit, 59 Hz
    -> DesktopRefresh: 59
    
    \\.\Display2
    -> Current Settings: 1920 x 1200, 32 Bit, 59 Hz
    -> DesktopRefresh: 59

    Die Frequenz stimmt nicht! Da steht jedes Mal 59 Hz, obwohl 60 Hz eingestellt sind und auch auf dem OnScreenMenü der Monitore so angezeigt werden.

    Warum kommen da falsche Werte raus und ist das bei euch genauso?

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™