Desktop2HTML

  • Ich hab ein kleines Script gebastelt dass die Windowsoberfläche pixelweise ausliest und dann im ASCII-Format mit Farbe als HTML-Datei schreibt.

    Ist schwer zu erklären aber startet das script einfach mal und klickt direkt auf OK ohne Daten einzugeben...

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.9.3 (beta)
    Author: Health

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

    Script Function:
    Read & write pixels.

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

    #ce ----------------------------------------------------------------------------

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

    #include <GUIConstants.au3>
    #include <Color.au3>

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

    ; ---------- Functions
    Func Draw($Width = 50, $Height = 50, $Left = 0, $Top = 0, $Filter = "no filter")
    $Timer = TimerInit()
    Dim $Color[$Width + 1][$Height + 1]

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

    ; read pixels
    ProgressOn("reading pixels in " & $Width & "x" & $Height & " at " & $Left & "x" & $Top, "", "", @DesktopWidth - 350, @DesktopHeight - 175)
    For $ix = $Left To $Width + $Left
    $Pro = Round(100 / $Width * ($ix - $Left))
    ProgressSet($Pro, $Pro & "% done")
    For $iy = $Top To $Height + $Top
    $Color[$ix - $Left][$iy - $Top] = PixelGetColor($ix, $iy)
    Next
    Next
    ProgressOff()

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

    ; draw pixels
    ProgressOn($Width * $Height & " pixels drawing...", "", "", @DesktopWidth - 350, @DesktopHeight - 175)

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

    ; ---------------------------
    $Font = "'Lucida Console'"
    $FontSize = 1 ; pixels
    $Char = "." ; dot is the best char for this

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

    $String = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"' & @CRLF
    $String &= ' "http://www.w3.org/TR/html4/loose.dtd">' & @CRLF
    $String &= '<html>' & @CRLF
    $String &= '<head>' & @CRLF
    $String &= '<meta http-equiv="content-type" content="text/html; charset=utf-8">' & @CRLF
    $String &= '<title>Graphic</title>' & @CRLF
    $String &= '</head>' & @CRLF
    $String &= '<body style="font-family:' & $Font & ';text-align:center">' & @CRLF
    $String &= '<p style="font-size:' & $FontSize & 'px;line-height:' & $FontSize & 'px">' & @CRLF

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

    For $iy = 0 To $Height
    $Pro = Round(100 / $Height * $iy)
    ProgressSet($Pro, $Pro & "% done")
    For $ix = 0 To $Width
    $DrawColor = "0x" & Hex($Color[$ix][$iy], 6) ; original color
    Switch $Filter
    Case "red"
    $DrawColor = "" & Hex(_ColorGetRed($DrawColor), 2) & "0000"
    Case "green"
    $DrawColor = "00" & Hex(_ColorGetGreen($DrawColor), 2) & "00"
    Case "blue"
    $DrawColor = "0000" & Hex(_ColorGetBlue($DrawColor), 2)
    Case "black/white"
    $Red = _ColorGetRed($DrawColor)
    $Green = _ColorGetGreen($DrawColor)
    $Blue = _ColorGetBlue($DrawColor)
    $Temp = ($Red + $Green + $Blue) / 3
    $DrawColor = Hex($Temp, 2) & Hex($Temp, 2) & Hex($Temp, 2)
    Case Else
    $DrawColor = Hex($Color[$ix][$iy], 6)
    EndSwitch
    $String &= '<u style="color:#' & $DrawColor & '">' & $Char & '</u>'

    Next
    $String &= '<br>' & @CRLF
    Next
    ProgressOff()

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

    $String &= '</p>' & @CRLF
    $String &= '<p style="font-size:10pt">generated in ' & Round(TimerDiff($Timer) / 1000, 3) & ' seconds<br>' & @CRLF
    $String &= $Width * $Height & ' chars, ' & @MDAY & "." & @MON & "." & StringRight(@YEAR, 2) & " - " & @HOUR & ":" & @MIN & ":" & @SEC & '</p>' & @CRLF
    $String &= '</body>' & @CRLF
    $String &= '</html>'

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

    FileWrite(@MDAY & "." & @MON & "." & StringRight(@YEAR, 2) & "-" & @HOUR & "." & @MIN & "." & @SEC & ".html", $String)
    MsgBox(-1, "Graphic", "Pixels writing in HTML done!")
    Exit
    EndFunc

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

    ; ---------- GUI
    $settings = GuiCreate("settings", 370, 220)

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

    GuiCtrlCreateGroup("size and position", 10, 10, 190, 160)
    $Width = GuiCtrlCreateInput("", 80, 40, 50, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 3)
    $Height = GuiCtrlCreateInput("", 80, 70, 50, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 3)
    $Left = GuiCtrlCreateInput("", 80, 100, 50, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 3)
    $Top = GuiCtrlCreateInput("", 80, 130, 50, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 3)

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

    GuiCtrlCreateLabel("width:", 30, 43, 40, 20)
    GuiCtrlCreateLabel("height:", 30, 73, 40, 20)
    GuiCtrlCreateLabel("left:", 30, 103, 40, 20)
    GuiCtrlCreateLabel("top:", 30, 133, 40, 20)

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

    GuiCtrlCreateLabel("pixels", 140, 43, 40, 20)
    GuiCtrlCreateLabel("pixels", 140, 73, 40, 20)
    GuiCtrlCreateLabel("pixels", 140, 103, 40, 20)
    GuiCtrlCreateLabel("pixels", 140, 133, 40, 20)

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

    GuiCtrlCreateGroup("filters", 210, 10, 150, 160)
    $Radio_1 = GuiCtrlCreateRadio("red filter", 230, 40, 110, 20)
    $Radio_2 = GuiCtrlCreateRadio("green filter", 230, 70, 110, 20)
    $Radio_3 = GuiCtrlCreateRadio("blue filter", 230, 100, 110, 20)
    $Radio_4 = GuiCtrlCreateRadio("black/white filter", 230, 130, 110, 20)

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

    $OK = GuiCtrlCreateButton("OK", 10, 180, 170, 30)
    GUICtrlSetState(-1, $GUI_DEFBUTTON) ; default button
    $Cancel = GuiCtrlCreateButton("Cancel", 190, 180, 170, 30)

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

    GuiSetState()

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

    ; ---------- While
    While 1
    Switch GuiGetMsg()
    Case $OK
    $Width = GUICtrlRead($Width)
    If $Width = "" Or $Width <= 0 Then $Width = 50
    $Height = GUICtrlRead($Height)
    If $Height = "" Or $Height <= 0 Then $Height = 50
    $Left = GUICtrlRead($Left)
    If $Left = "" Then $Left = 0
    $Top = GUICtrlRead($Top)
    If $Top = "" Then $Top = 0
    $Filter = ""
    If GUICtrlRead($Radio_1) = $GUI_CHECKED Then $Filter = "red"
    If GUICtrlRead($Radio_2) = $GUI_CHECKED Then $Filter = "green"
    If GUICtrlRead($Radio_3) = $GUI_CHECKED Then $Filter = "blue"
    If GUICtrlRead($Radio_4) = $GUI_CHECKED Then $Filter = "black/white"
    GUIDelete($settings)
    Draw($Width, $Height, $Left, $Top, $Filter)
    Case $Cancel
    Exit
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    ;
    ; ---
    ;

    [/autoit]

    Viel Spaß :comp1:

    2 Mal editiert, zuletzt von Health (27. Oktober 2007 um 14:16)

  • Idee: super

    Leider kann man nicht den ganzen Moniten 1280 x 1024 eingeben und so den ganzen Monitor erfassen.

    Aber super Leistung.

    Gruss, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Ich habs mal mit 999x999 probiert. Da hat sich mein Browser aufgehängt (IE und FF). 29 MB als html sind wohl nicht so toll

    Einmal editiert, zuletzt von progandy (27. Oktober 2007 um 16:44)