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

Beiträge von Andy

  • gemeinsame Variable oder Programmschnittstelle zur selbstständigen Zusammenarbeit meiner Programme machen

    • Andy
    • 17. Oktober 2010 um 14:55

    such mal nach der MessageHandler.au3 und/oder Message.au3

  • GDI+ Bitmap.SetPixel

    • Andy
    • 17. Oktober 2010 um 11:22
    Zitat

    Woher hast du denn deine HSV Funktion genommen? Von Autoit übersetzt?

    Ja, ich hatte für das Assemblertut eine Funktion gesucht, die man "einfach" 1:1 in Assembler übersetzen kann. Eigentlich war ich ziemlich begeistert, da nur relativ einfache Rechnerei umzusetzen war. Allerdings wurde die Umsetzung doch relativ umfangreich, so dass ich mich entschlossen habe, das Beispiel nicht im Tut zu verwenden.
    Übrigens hatte ich den ursprünglich mit Float-Zahlen werkelnden Algorithmus komplett in Integer umgesetzt! Zuerst in AutoIt, dann in Assembler. In AutoIt war natürlich kaum ein Geschwindigkeitszuwachs bemerkbar, in Assembler allerdings war der Schub gewaltig, unoptimiert (war ja fürs Tut geplant) schon Faktor 4! Ich denke, auch C++-Programmierer hätten von diesem Wink mit dem Zaunpfahl profitiert.

    Da auch die anschliessende Matrixmultiplikation extrem gut zu parallelisieren ist, habe ich "multithreating" - AutoIt benutzt. Prog@ndy hatte zu diesem Thema mal einiges gezeigt, aber mit AutoItcode kommt man nicht weiter, da AutoIt nicht threadsicher ist. Das ist der weitere Vorteil von Assembler, man weiss ziemlich genau, was der Prozessor (bzw ASM-code) macht oder auch nicht macht. Daher ist es kein Problem 3-4 Threads mit aufwendigen Berechnungen gleichzeitig zu starten und dann auf Ergebnisse zu warten. Leider bringt Multithreathing nicht sonderlich viel, solange die Threads nur auf einem Core laufen ^^. Allerdings ist es schon beeindruckend, wenn das AutoItscript 4 Threads anstösst und sofort mit dem Programmcode weitermacht. Für hochkomplexe und langwierige Berechnungen lohnt sich das sicher!

    Zitat

    Aber ich dachte immer das wär viiieeell komplizierter soetwas.

    Learning by doing! Bleib am Ball, du lernst jeden Tag etwas dazu!

    /edit/ Integerversion

    Spoiler anzeigen
    [autoit]


    ;hier nun die Variante, die intern nur mit Integerzahlen arbeitet, in AutoIt bringt das kaum Geschwindigkeitsgewinn, in Assembler um so mehr!
    Func int_ColorConvertRGBtoHSL($avArray) ;integerversion
    ;die Variablen werden als Integer übergeben

    [/autoit] [autoit][/autoit] [autoit]

    ;die Variablen werden NICHT durch die Konstante $__COLORCONSTANTS_RGBMAX =255 geteilt
    local $nR = int(Number($avArray[0]))
    local $nG = int(Number($avArray[1]))
    local $nB = int(Number($avArray[2]))

    [/autoit] [autoit][/autoit] [autoit]

    local $nMax = $nB
    If $nMax < $nG Then $nMax = $nG
    If $nMax < $nR Then $nMax = $nR

    [/autoit] [autoit][/autoit] [autoit]

    local $nMin = $nR
    If $nMin > $nG Then $nMin = $nG
    If $nMin > $nB Then $nMin = $nB

    [/autoit] [autoit][/autoit] [autoit]

    local $nMinMaxDiff = ($nMax - $nMin)
    local $nMinMaxSum = ($nMax + $nMin)

    [/autoit] [autoit][/autoit] [autoit]

    ; Lightness
    ;Bis hierhin alles wie gehabt
    ;Wenn man nun ausschliesslich den Rechenweg für die Ermittlung von $nL in der Orginalfunktion anschaut, stellt man fest, dass
    ;$nL = ($nMinMaxDiff / $__COLORCONSTANTS_RGBMAX) / 2 * $__COLORCONSTANTS_HSLMAX
    ;Konstanten einsetzen führt zu $nL = ($nMinMaxDiff / 255) /2 * 240
    ;Zwei DIV-Befehle sind im Assembler sehr "teuer" d.h. kosten sehr viel Zeit, schön wäre es, das DIV durch eine Multiplikation
    ;ersetzen zu können und eine Division durch ein extrem schnelles shiften von Bits zu ersetzen.
    ;Ein BitShift nach rechts ist Division durch 2, wir müssen also die Gleichung nur so erweitern, daß durch eine Potenz von 2 geteilt wird.
    ;$nL = ($nMinMaxDiff / 255) * 120 :erweitern mit 2^16 (hohe Potenz von 2) führt zu
    ; 2^16 * $nL = ($nMinMaxDiff / 255) * 120 * 2^16 :zusammenfassen auf der rechten Seite fuhrt zu 2^16/255*120=30840.47 welches zur nächsten Ganzzahl aufgerundet wird, also 30841 um den Rundungsfehler bei Integer auszugleichen
    ; 2^16 * $nL = $nMinMaxDiff * 30841
    ; $nL = $nMinMaxDiff * 30841 / 2^16
    ;Geteilt durch 2^16 entspricht einem BitShift nach rechts von 16, das führt der Prozessor in EINEM Takt durch, die Division würde ca 40-80 Takte dauern!

    [/autoit] [autoit][/autoit] [autoit]

    local $nL=$nMinMaxSum*30841/65536 ;(shr 16) führt zum gleichen Ergebnis wie /2^16
    ;also kann man schreiben
    ;$nL=BitShift($nMinMaxSum*30841,16) ;diese zeile kann man fast genau so in Assembler übernehmen
    $avArray[2] = $nL ;und abspeichern im Array

    [/autoit] [autoit][/autoit] [autoit]

    ; Grayscale
    $nH = 0
    $nS = 0
    ;Die Formeln etwas ausmultiplizieren führt zu
    If $nMinMaxDiff <> 0 Then
    ; Saturation
    If $nL < 120 Then
    local $nS = int($nMinMaxDiff *240 / $nMinMaxSum)
    Else
    local $nS = int($nMinMaxDiff *240/ (510-$nMinMaxSum))
    EndIf
    $avArray[1] = $nS

    [/autoit] [autoit][/autoit] [autoit]

    ; Hue
    Switch $nMax
    Case $nR
    local $nH = int(($nG - $nB)*40 / $nMinMaxDiff)
    If $nH < 0 Then $nH += 239 ;Rundungsfehler ausgleichen

    [/autoit] [autoit][/autoit] [autoit]

    case $nG
    local $nH = int(($nB - $nR)*40/ $nMinMaxDiff) ;+80
    If $nH < 0 Then
    $nH += 79 ;Rundungsfehler ausgleichen
    else
    $nH += 80
    endif
    case $nB
    local $nH = int(($nR - $nG)*40 / $nMinMaxDiff) ;+160
    If $nH < 0 Then
    $nH += 159 ;Rundungsfehler ausgleichen
    else
    $nH += 160
    endif
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    If $nH > 240 Then $nH -= 240
    EndIf
    $avArray[0] = int($nH)

    [/autoit] [autoit][/autoit] [autoit]

    Return $avArray
    ;die Funktion ist nun vollständig im Integerzahlenraum, man muss keine Fliesskommazahlen verarbeiten!
    ;Darurch können die sehr einfachen Assemblerbefehle benutzt werden!
    EndFunc ;==>_ColorConvertRGBtoHSL

    [/autoit]
  • GDI+ Bitmap.SetPixel

    • Andy
    • 17. Oktober 2010 um 00:56

    Bei mir sieht das so aus:
    Nach einem RGB2HSV bekomme ich vom linken Teil des Orginalbildes aus deinem Link das hier:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
    Und nach 2x Sobel-Matrix (senkrecht und waagrecht) :
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
    Wozu brauchst du die Kantenerkennung?

    Bilder

    • HSV.jpg
      • 9,08 kB
      • 319 × 419
    • HSV+2xSobel.jpg
      • 20,45 kB
      • 319 × 419
  • _TCP_File

    • Andy
    • 16. Oktober 2010 um 13:58

    Das war ein Schuss aus der Hüfte in 2 min zusammengehackt. Bei Dateien >2 Gig muss man 64Bit-Pointer verwenden, siehe http://msdn.microsoft.com/en-us/library/…2(v=VS.85).aspx
    auch die Infos in http://msdn.microsoft.com/en-us/library/…1(v=VS.85).aspx sollte man beachten.
    Man kann so natürlich auch die Dateien (Sektoren) bearbeiten, d.h. schreiben, obwohl im READ-Mode(0) geöffnet wurde.
    Für "Geheimniskrämer" besteht so die Möglichkeit, am "Dateisystem" vorbei Daten auf den Datenträger zu schreiben, die nirgendwo im Dateisystem auftauchen.
    Man schreibt dazu in einen Sektor (idR 512 Bytes gross) der nur zu einem kleinen Teil von einem Dateifragment belegt ist (z.B. von einer 5 Byte grossen DUMMY.TXT-Datei), seine Daten hinter den "eigentlichen" Dateiinhalt. Da Windows nur Daten in "freie" Sektoren schreibt, bleibt der "geheime" Inhalt so lange in diesem Sektor, bis dieser durch einen Dateisystembefehl (Move, Delete der DUMMY.TXT usw) überschrieben wird.

  • _TCP_File

    • Andy
    • 16. Oktober 2010 um 11:33
    [autoit]

    #include <Constants.au3>

    [/autoit][autoit][/autoit][autoit]

    Local Const $sFile = @AutoItExe
    Local $hFile = FileOpen($sFile, 0)

    [/autoit][autoit][/autoit][autoit]

    ; Prüft Dateiposition und versucht den Inhalt ab der aktuellen Dateiposition zu lesen.
    MsgBox(0, "FileGetPos", StringFormat("Position: %d\nDaten:\n%s", FileGetPos($hFile), FileRead($hFile)))

    [/autoit][autoit][/autoit][autoit]

    ; Setzt nun die Position an 21354...
    Local $n = FileSetPos($hFile,21354,$FILE_BEGIN)

    [/autoit][autoit][/autoit][autoit]

    for $i=0 to 5 ;...und liest 5x 1024 Byte ein
    ; Prüft Dateiposition und versucht 1 Kb ab der aktuellen Dateiposition zu lesen.
    MsgBox(0, "FileGetPos", StringFormat("Position: %d\nDaten:\n%s", FileGetPos($hFile), stringtobinary(FileRead($hFile,1024))))
    Local $n = FileSetPos($hFile,1024 ,$FILE_CURRENT) ;Dateiposition 1024 Byte weiter setzen
    Next

    [/autoit][autoit][/autoit][autoit]

    ; Schließt das Handle.
    FileClose($hFile)

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Bilder auf Bildschirm zeichnen

    • Andy
    • 15. Oktober 2010 um 19:56
    [autoit]

    #include <WinAPI.au3>
    #include <GDIPlus.au3>
    _GDIPlus_Startup() ;wichtig!

    [/autoit][autoit][/autoit][autoit]

    $dc = _WinAPI_GetDC(0) ;der DC des Desktops, der "compatibleDC" erstellt einen kompatiblen DC, in den du auch reingezeichnet hast!
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $dc = ' & $dc & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $sprite = _GDIPlus_ImageLoadFromFile( "rgbhsv.jpg")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sprite = ' & $sprite & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit][autoit][/autoit][autoit]

    $graphics = _GDIPlus_GraphicsCreateFromHDC($dc)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $graphics = ' & $graphics & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    _GDIPlus_GraphicsDrawImageRect($graphics, $sprite, 0, 0, 200, 200)

    [/autoit][autoit][/autoit][autoit]

    While 1

    [/autoit][autoit][/autoit][autoit]

    WEnd

    [/autoit]
  • Bilder auf Bildschirm zeichnen

    • Andy
    • 15. Oktober 2010 um 19:49

    schau dir mal das Beispiel zu

    [autoit]

    _WinAPI_DrawLine ()

    [/autoit]

    an...
    /edit/ zeichnen....ich sollte die Fragen besser lesen...

  • 3 Fragen

    • Andy
    • 15. Oktober 2010 um 17:45
    Zitat

    Du solltest mal den Code hier posten.

    ich weiss, wieso du nicht "deinen Code" geschrieben hast^^

  • Bei GDI+ macht notebook nervige geräusche

    • Andy
    • 15. Oktober 2010 um 12:41

    Wahrscheinlich ist der Akku fast leer und der Hamster muss im Laufrad richtig Gas geben :rock: Daher die Geräusche, der arme Kerl pfeifft auf der letzten Rille!

  • Bei GDI+ macht notebook nervige geräusche

    • Andy
    • 15. Oktober 2010 um 12:36

    Das mit dem "Eisenbahnrattern" habe ich auf einem älteren Rechner hier bei uns auch ab und zu. Hört sich eher an, als ob man einen Reissverschluss aufmacht. Das Geräusch kommt eindeutig aus dem Rechner, wenn das Mausrad bewegt wird. Sobald man aber das Fenster wechselt, ist das Phänomen weg! Da es nur ca. 1x pro Monat auftritt, habe ich damit auch kein Problem...

  • Bei GDI+ macht notebook nervige geräusche

    • Andy
    • 15. Oktober 2010 um 12:23

    Kann es sein, dass die Geräusche aus dem Lautsprecher kommen?

  • Bei GDI+ macht notebook nervige geräusche

    • Andy
    • 15. Oktober 2010 um 12:22

    Wieso 3D-Benchmark?
    Der spricht doch grösstenteils die Graka an, und genau DAS wollen wir doch nicht testen?!
    Die Prozessorauslastung kannst du auch mit 2 Zeilen AutoItcode auf 100% bringen.

    [autoit]

    while 1
    wend

    [/autoit]


    Als Exe kompilieren und einfach mehrmals starten, um die Prozessoren bzw Core´s alle zu belasten....

  • Bei GDI+ macht notebook nervige geräusche

    • Andy
    • 15. Oktober 2010 um 11:45

    Da auch ohne ein AutoIt-Script zu starten massig GDI+-Funktionen vom System verwendet werden und natürlich auch Objekte bestehen, könnte ich mir gut vorstellen, dass bei Verwendung des AutoIt-Scriptes reichlich Prozessorlast erzeugt wird. Das "fiepen" könnte von Spannungswandlern oder sogar dem Lüfter kommen, wenn der Prozessor am Anschlag fährt^^
    Gerade bei Notebooks bzw der (nicht) darin integrierten Grafikprozessoren werden ggf bestimmte GDI-Funktionen nicht von der Graka, sondern vom Prozessor übernommen. Was sagt der Taskmanager bezgl. der Prozessorauslastung?
    Zeig doch mal ein Beispielscript.

  • _TCP_File

    • Andy
    • 15. Oktober 2010 um 09:25
    Zitat

    oder schrittweises Auslesen einer Datei... Dann wird eben immer ein anderer Bereich ausgelesen und versendet...
    Aber WIE...?

    Mit

    [autoit]

    FileSetPos()

    [/autoit]

    setzt man einen Zeiger in einer Datei, ab dem man dann einen bestimmten Datenbereich auslesen kann. Damit ist es auch möglich, Sektorenweise einen Datenträger auszulesen.

  • Auflösung der Grafikkarte

    • Andy
    • 14. Oktober 2010 um 22:51

    Video Controller wärs gewesen^^

    Spoiler anzeigen
    [autoit]

    ; Generated by AutoIt Scriptomatic

    [/autoit] [autoit][/autoit] [autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

    [/autoit] [autoit][/autoit] [autoit]

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM CIM_VideoControllerResolution", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    [/autoit] [autoit][/autoit] [autoit]

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
    $Output = $Output & "Description: " & $objItem.Description & @CRLF
    $Output = $Output & "HorizontalResolution: " & $objItem.HorizontalResolution & @CRLF
    $Output = $Output & "MaxRefreshRate: " & $objItem.MaxRefreshRate & @CRLF
    $Output = $Output & "MinRefreshRate: " & $objItem.MinRefreshRate & @CRLF
    $Output = $Output & "NumberOfColors: " & $objItem.NumberOfColors & @CRLF
    $Output = $Output & "RefreshRate: " & $objItem.RefreshRate & @CRLF
    $Output = $Output & "ScanMode: " & $objItem.ScanMode & @CRLF
    $Output = $Output & "SettingID: " & $objItem.SettingID & @CRLF
    $Output = $Output & "VerticalResolution: " & $objItem.VerticalResolution & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "CIM_VideoControllerResolution" )
    Endif

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • Suche eine (schnelle) IsInRect Funktion...

    • Andy
    • 13. Oktober 2010 um 00:50

    BugFix ,
    Faweyr´s Einzeiler ist (auf meinem Rechner zumindest) ungeschlagen. Der Overhead des DllCalls frisst evtl. Performancegewinne sofort auf.
    3xAND und 4x Addition ist auch in AutoIt "sauschnell"^^
    Sehr interessant auch, dass die Sequenz

    [autoit]

    if erstervergleich then
    if zweiterverglech then
    if drittervergleich then
    if viertervergleich then

    [/autoit]

    LANGSAMER ist als der Einzeiler, der IMMER ALLE Vergleiche durchführen muss...

  • TCPOptimizer - Empfehlenswert?

    • Andy
    • 13. Oktober 2010 um 00:36
    Zitat

    Mich würde es aber interessieren, ob ich den wirklich meine Downloadgeschwindigkeit von 180 auf 400 kb/s erhöhen kann, ohne Nebenwirkungen?

    Was soll die Frage?
    In der Zeit, in der du hier einen Thread erstellst und die Antworten liest, hättest du 90% aller Optionen von TCPOptimizer ausprobieren können!
    Ich weiss jedenfalls, dass TCPOptimizer bei einigen unserer Rechner (XP32) ziemlich viel gebracht hatte. Leider wurden bei jedem Windows-"Sicherheits"-Update die "Orginal"-Daten wiederhergestellt. Irgendwann blieb auch das aus, ob das an einigen meiner Mails an MS gelegen hatte weiss ich nicht :rolleyes: Seitdem "fluppt" es jedenfalls....
    Bei neueren Rechnern (auch XP32) hat der Umstieg von einem 10Mb-Switch auf ein entsprechendes Gigabit-Gerät und entsprechenden Karten in den Rechnern am meisten gebracht :rofl:

    Sobald es allerdings, wie BugFix schon bemerkte, durch einen Router geht, sollte man dessen Einstellungen überprüfen!

  • Kann man mit AutoIt einen Viewer erstellen?

    • Andy
    • 12. Oktober 2010 um 11:58

    Ja, Programme, welche die Mini-Preview unterstützen gibt es wohl einige, aber zumindest bei Tante Google habe ich keinen Hinweis auf ein "kostenloses" Programm gefunden, welches ALLE CDR-Versionen darstellen kann. Alternativ wird empfohlen, sich einige Lizenzen einer "alten" CD-Version zu besorgen (gibt es wohl für kleines Geld) und denjenigen, der die Dateien schickt zu bitten, in diesem Format (bzw Version) abzuspeichern!

    /EDIT/ Was sagt eigentlich der Support von Corel zu diesem Problem? Normalerweise kontaktiert man als Kunde doch erst einmal den Hersteller....

  • Verschlüsselte Passwortabfrage

    • Andy
    • 11. Oktober 2010 um 17:12

    aber sonst klappt noch alles?
    das Passwort wird gehashed und mit dem hash im quellcode verglichen....wo ist da der Unterschied das Passwort direkt zu vergleichen?
    Und jetzt komm nicht mit "PASSWORT" ist im Quellcode leichter zu finden als 0xAB22E2C248E6F22A.... 8|

  • Verschlüsselte Passwortabfrage

    • Andy
    • 11. Oktober 2010 um 14:37

    ja, dann hast du dein Passwort verschlüsselt! Und was bringt dir das?
    Woher weiss dein Programm denn, ob das entschlüsselte Passwort das richtige ist?
    Das geht nur mit einem Vergleich....und schon bist du wieder in den A**** gekniffen, denn um zu vergleichen ob das entschlüsselte Passwort das richtige ist, brauchst du das......entschlüsselte Passwort!

    Mit ein bisschen googeln hättest du das aber auch herausgefunden! Man braucht nicht mal einen Decompiler, um den AutoItquellcode auszulesen, mit den einfachsten Windows Bordmitteln geht das auch. Aber auch andere Programmiersprachen sind nicht besser bzw. sicherer. Passwörter gehören nicht in den Quellcode! Bei einem "Passwortgeschützten WoW-"Angelbot" ist das einfach nur dämlich, wenn aber Zugangsdaten für FTP/Fileserver in einem Quellcode liegen, dann interessieren sich auch "böse Buben" dafür....und dann gnade dir Gott wenn du einem Staatsanwalt erklären muss, warum dein Server in einem Botnet fleissig Kinderpornos durch das Netz schickt!

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™