• Ich gucks mir eben nochmal an,
    bei mir läufts fehlerfrei o_O

    Das wundert mich grad etwas.

    Edit:

    Zitat

    >"C:\Programme\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /prod /AU3Check /in "D:\Desktop-Ordner\Autolt V3\Tools\ShoutBox\ShoutBox.au3"
    +>11:58:14 Starting AutoIt3Wrapper v.2.0.0.3 Environment(Language:0407 Keyboard:00000407 OS:WIN_XP/Service Pack 2 CPU:X86 OS:X86)
    >Running AU3Check (1.54.14.0) from:C:\Programme\AutoIt3
    +>11:58:15 AU3Check ended.rc:0
    +>11:58:15 AutoIt3Wrapper Finished
    >Exit code: 0 Time: 0.874

    Läuft bei mir fehlerfrei.
    Und auch der Syntax Check sagt nichts 8|

    Edit 2:
    Habs, ich fix das eben :D

    Edit 3:

    Zitat

    D:\Desktop-Ordner\Autolt V3\Tools\ShoutBox\ShoutBox.au3(15,36) : ERROR: Opt() called with illegal argument 1: "OnExitFunc"
    Opt("OnExitFunc", "CloseAllHandles")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    D:\Desktop-Ordner\Autolt V3\Tools\ShoutBox\ShoutBox.au3(16,37) : ERROR: AdlibEnable(): undefined function.
    AdlibEnable("_GetNewestPostAd", 5000)

    Das wundert mich grad etwas.
    Er meckert an "OnExitFunc und AdLibEnable o_O

    Edit 4:
    Laut neuster Beta sollte es so laufen:

    Spoiler anzeigen
    [autoit]


    ;#BETA
    #include <ButtonConstants.au3>
    #include <WinHTTP.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <String.au3>
    #include <Date.au3>
    #include <IE.au3>
    #include <Array.au3>
    #include <WinAPI.au3>

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

    #Region StartUp
    OnAutoItExitRegister("CloseAllHandles")
    AdlibRegister("_GetNewestPostAd", 5000)
    Global $__LASTMESSAGE = 0, $hw_connect, $hw_open, $LogOutLink = ""
    Global $_LOGIN_Cookie = IniRead("ShoutBoxClient.ini", "Data", "LogInData", "")
    DirCreate(@ScriptDir & "\ShoutBoxLog\")
    #EndRegion StartUp

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

    #Region GUI
    Opt("GUIResizeMode", 802)
    $MainGUI = GUICreate("Shoutbox Chat", 700, 380, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPCHILDREN))
    $oIE = _IECreateEmbedded()
    $ChatAnzeige = GUICtrlCreateObj($oIE, 0, 0, 550, 300)

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

    $Benutzername = GUICtrlCreateInput(IniRead("ShoutBoxClient.ini", "Data", "User", ""), 574, 5, 120, 20)
    $Passwort = GUICtrlCreateInput("", 574, 25, 120, 20, $ES_PASSWORD)
    $Einloggen = GUICtrlCreateButton("Einloggen", 574, 45, 120, 24)
    $Ausloggen = GUICtrlCreateButton("Ausloggen", 574, 45, 120, 24)
    GUICtrlSetState($Ausloggen, $GUI_HIDE)

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

    $Absenden = GUICtrlCreateButton("&Absenden", 440, 300, 110, 24)
    GUICtrlSetState($Absenden, $GUI_DISABLE)
    $Aktualisieren = GUICtrlCreateButton("Aktualisieren (F5)", 440, 328, 110, 24)
    $Speichern = GUICtrlCreateButton("Speichern", 440, 356, 110, 24)

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

    $Text = GUICtrlCreateEdit("", 0, 300, 440, 80, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL))

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

    $btnExpandHide = GUICtrlCreateButton("<", 550, 0, 19, 380)
    $WhisperList = GUICtrlCreateList("", 569, 71, 131, 309)
    $TopMost = GUICtrlCreateCheckbox("TopMost", 599, 365, 131, 15)

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

    If IniRead("ShoutBoxClient.ini", "Data", "OnTop", "") = "True" Then
    WinSetOnTop($MainGUI, "", 1)
    GUICtrlSetState($TopMost, $GUI_CHECKED)
    EndIf
    If IniRead("ShoutBoxClient.ini", "Data", "ShowOnline", "True") = "False" Then
    _ShowOnlineList(False)
    EndIf

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

    ;Color/Bk Settings
    GUICtrlSetBkColor($Benutzername, 0xF2F6FA)
    GUICtrlSetColor($Benutzername, 0x000000)
    GUICtrlSetBkColor($Passwort, 0xF2F6FA)
    GUICtrlSetColor($Passwort, 0x000000)
    GUICtrlSetBkColor($Text, 0xF2F6FA)
    GUICtrlSetColor($Text, 0x000000)
    GUICtrlSetBkColor($WhisperList, 0xF2F6FA)
    GUICtrlSetColor($WhisperList, 0x000000)

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

    WinRunTrans($MainGUI, "Show")
    #EndRegion GUI

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

    #Region Settings
    $ClearDUMMY = GUICtrlCreateDummy()
    Local $Accels[4][2] = [["^{F5}", $Aktualisieren],["{F5}", $Aktualisieren],["{ENTER}", $Absenden],["{ESC}", $ClearDUMMY]]
    GUISetAccelerators($Accels)

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

    Global $rLastText = ""
    Global $hw_open = _WinHttpOpen("AutoIt ShoutBoxClient")
    Global $hw_connect = _WinHttpConnect($hw_open, "autoit.de")

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

    _IENavigate($oIE, "about:blank")
    _IEDocWriteHTML($oIE, '<html><head><script type="text/javascript">document.oncontextmenu = function(e){return false;};</script><base href="http://autoit.de/"><link rel="stylesheet" type="text/css" media="screen" href="wcf/style/style-3.css" /></head><body style="margin:0px; padding:0px;"><div class="shoutboxMessageFrame shoutboxFrameInner container-2" style="margin:0px; padding:0px; position:absolute; top:0px; left:0px; width:100%; height:100%;"><div id="shoutboxcontent" class="shoutboxMessageFrame shoutboxFrameInner container-2 smallFont" style="text-align:left; margin:0px; padding:0px;"></div></div></body></html>');
    Global $oShoutBox = _IEGetObjById($oIE, "shoutboxcontent")

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

    _TryLogInCookie()
    _GetNewestPost()
    $FirstStart = False
    #EndRegion Settings

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

    #Region Loop
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Einloggen
    $u = GUICtrlRead($Benutzername)
    $p = GUICtrlRead($Passwort)
    _Login($u, $p)
    Case $Ausloggen
    _LogOut()
    Case $Absenden
    If BitAND(GUICtrlGetState($Absenden), $GUI_DISABLE) = $GUI_DISABLE Then
    $u = GUICtrlRead($Benutzername)
    $p = GUICtrlRead($Passwort)
    _Login($u, $p)
    Else
    $rText = GUICtrlRead($Text)
    If $rText <> "" And $rText <> $rLastText Then
    $rLastText = StringRegExpReplace($rText, "\A(\/w)+", "")
    GUICtrlSetData($Text, "")
    GUICtrlSetData($WhisperList, "-------------")
    _Nachricht($rText)
    ControlFocus($MainGUI, "", $Text)
    EndIf
    EndIf
    Case $Aktualisieren
    _GetNewestPost()
    Case $ClearDUMMY
    GUICtrlSetData($WhisperList, "-------------")
    GUICtrlSetData($Text, "")
    Case $Speichern
    _SaveLog()
    Case $WhisperList
    $WTarget = GUICtrlRead($WhisperList)
    If $WTarget = "-------------" Or $WTarget = "" Then
    GUICtrlSetData($Text, StringRegExpReplace(GUICtrlRead($Text), '\A\/w ".*?"\h?', ""))
    ;~ GUICtrlSetData($Text, StringRegExpReplace(GUICtrlRead($Text),'\A".*?"\h?',""))
    Else
    GUICtrlSetData($Text, '/w "' & $WTarget & '" ' & StringRegExpReplace(GUICtrlRead($Text), '\A\/w ".*?"\h?', ""))
    ;~ GUICtrlSetData($Text, '"' & $WTarget&'" '&StringRegExpReplace(GUICtrlRead($Text),'\A".*?"\h?',""))
    EndIf
    Case $TopMost
    Local $Attrib = BitAND(GUICtrlRead($TopMost), $GUI_CHECKED) = $GUI_CHECKED
    IniWrite("ShoutBoxClient.ini", "Data", "OnTop", $Attrib)
    WinSetOnTop($MainGUI, "", $Attrib)
    Case $btnExpandHide
    Switch GUICtrlRead($btnExpandHide)
    Case "<"
    _ShowOnlineList(False)
    Case ">"
    _ShowOnlineList(True)
    EndSwitch
    EndSwitch
    WEnd
    #EndRegion Loop

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

    #Region Func's
    Func _SaveLog()
    $LogPath = @ScriptDir & "\ShoutBoxLog\" & @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & "-" & @MIN & "-" & @SEC & ".htm"
    FileWrite($LogPath, _IEDocReadHTML($oIE))
    EndFunc ;==>_SaveLog

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

    Func _ShowOnlineList($Show)
    Local $pos = WinGetPos($MainGUI)
    Switch $Show
    Case False
    GUICtrlSetData($btnExpandHide, ">")
    WinMove($MainGUI, "", $pos[0], $pos[1], $pos[2] - 131, $pos[3])
    GUICtrlSetState($WhisperList, @SW_HIDE)
    GUICtrlSetState($TopMost, @SW_HIDE)
    Case True
    GUICtrlSetData($btnExpandHide, "<")
    WinMove($MainGUI, "", $pos[0], $pos[1], $pos[2] + 131, $pos[3])
    GUICtrlSetState($WhisperList, @SW_SHOW)
    GUICtrlSetState($TopMost, @SW_SHOW)
    EndSwitch
    IniWrite("ShoutBoxClient.ini", "Data", "ShowOnline", $Show = True)
    EndFunc ;==>_ShowOnlineList

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

    Func _Reconnect()
    ; Prog@ndy
    _WinHTTPCloseHandle($hw_connect)
    Global $hw_connect = _WinHttpConnect($hw_open, "autoit.de")
    Global $_LOGIN_Cookie = IniRead("ShoutBoxClient.ini", "Data", "LogInData", "")
    EndFunc ;==>_Reconnect

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

    Func CloseAllHandles()
    _WinHTTPCloseHandle($hw_connect)
    _WinHTTPCloseHandle($hw_open)
    EndFunc ;==>CloseAllHandles

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

    Func _AddLogIn($hRequest)
    If $_LOGIN_Cookie Then _WinHTTPAddRequestHeaders($hRequest, $_LOGIN_Cookie, BitOR($WINHTTP_ADDREQ_FLAG_ADD, $WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON))
    EndFunc ;==>_AddLogIn

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

    Func _ShowLogOut()
    GUICtrlSetState($Einloggen, $GUI_HIDE)
    GUICtrlSetState($Ausloggen, $GUI_SHOW)
    GUICtrlSetState($Benutzername, $GUI_DISABLE)
    GUICtrlSetState($Passwort, $GUI_DISABLE)
    GUICtrlSetState($Absenden, $GUI_ENABLE)
    GUICtrlSetState($Text, $GUI_ENABLE)
    EndFunc ;==>_ShowLogOut
    Func _LogOut()
    $h_openRequest = _WinHttpOpenRequest($hw_connect, "GET", $LogOutLink, "HTTP/1.1")
    _AddLogIn($h_openRequest)
    _WinHttpSendRequest($h_openRequest)
    _WinHttpReceiveResponse($h_openRequest)
    _WinHTTPCloseHandle($h_openRequest)
    GUICtrlSetState($Einloggen, $GUI_SHOW)
    GUICtrlSetState($Ausloggen, $GUI_HIDE)
    GUICtrlSetState($Benutzername, $GUI_ENABLE)
    GUICtrlSetState($Passwort, $GUI_ENABLE)
    GUICtrlSetState($Absenden, $GUI_DISABLE)
    GUICtrlSetState($Text, $GUI_DISABLE)
    $_LOGIN_Cookie = ""
    IniWrite("ShoutBoxClient.ini", "Data", "LogInData", "")
    EndFunc ;==>_LogOut
    Func _TryLogInCookie()
    $h_openRequest = _WinHttpOpenRequest($hw_connect, "GET", "index.php", "HTTP/1.1")
    _AddLogIn($h_openRequest)

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

    _WinHttpSendRequest($h_openRequest)
    _WinHttpReceiveResponse($h_openRequest)
    Local $data
    Do
    $data &= _WinHTTPReadData($h_openRequest, 1)
    Until @extended = 0
    If $data = "" Then
    MsgBox(16, 'AutoIt ShoutBox Chat - Fehler', "Fehler bei der Verbindung zu http://www.autoit.de. Das Programm wird beendet")
    Exit
    EndIf
    _WinHTTPCloseHandle($h_openRequest)
    $LogOutLink = StringRegExp($data, "(action=UserLogout&(?:amp;)?t=[a-zA-Z0-9]+)", 3)
    If Not @error Then
    _ShowLogOut()
    $LogOutLink = "/index.php?" & $LogOutLink[0]
    Else
    $LogOutLink = ""
    EndIf
    EndFunc ;==>_TryLogInCookie

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

    Func _Login($user, $pw)
    Local $post = "loginUsername=" & _URIEncode($user) & "&loginPassword=" & _URIEncode($pw) & "&url=%2Findex.php%3Fform%3DUserLogin&&x=7&y=7&useCookies=1"
    Local $h_openRequest = _WinHttpOpenRequest($hw_connect, "POST", "/index.php?form=UserLogin", "HTTP/1.1", "http://www.autoit.de/")
    _WinHttpSendRequest($h_openRequest, "Content-Type: application/x-www-form-urlencoded" & @CRLF, $post)
    _WinHttpReceiveResponse($h_openRequest)
    Local $header = "", $Index = 0
    Do
    $header &= _WinHttpQueryHeadersEx($h_openRequest, $WINHTTP_QUERY_SET_COOKIE, $WINHTTP_HEADER_NAME_BY_INDEX, $Index)
    $Index = @extended
    Until $Index = 0
    $header = StringRegExp($header, "(wcf_.*?;)", 3)
    Local $CookieString = "Cookie:"
    For $i = 0 To UBound($header) - 1
    $CookieString &= " " & $header[$i]
    Next
    IniWrite("ShoutBoxClient.ini", "Data", "LogInData", $CookieString)
    IniWrite("ShoutBoxClient.ini", "Data", "User", $user)
    _WinHTTPCloseHandle($h_openRequest)
    _TryLogInCookie()
    EndFunc ;==>_Login

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

    Func _URIEncode($sData)
    ; Prog@ndy
    Local $aData = StringSplit(BinaryToString(StringToBinary($sData, 4), 1), "")
    Local $nChar
    $sData = ""
    For $i = 1 To $aData[0]
    ;~ ConsoleWrite($aData[$i] & @CRLF)
    $nChar = Asc($aData[$i])
    Switch $nChar
    Case 45, 46, 48 - 57, 65 To 90, 95, 97 To 122, 126
    $sData &= $aData[$i]
    Case 32
    $sData &= "+"
    Case Else
    $sData &= "%" & Hex($nChar, 2)
    EndSwitch
    Next
    Return $sData
    EndFunc ;==>_URIEncode

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

    Func _URIDecode($sData)
    ; Prog@ndy
    Local $aData = StringSplit(StringReplace($sData, "+", " ", 0, 1), "%")
    $sData = ""
    For $i = 2 To $aData[0]
    $aData[1] &= Chr(Dec(StringLeft($aData[$i], 2))) & StringTrimLeft($aData[$i], 2)
    Next
    Return BinaryToString(StringToBinary($aData[1], 1), 4)
    EndFunc ;==>_URIDecode

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

    Func _GetNewestPostAd()
    _GetNewestPost()
    EndFunc ;==>_GetNewestPostAd

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

    Func _GetNewestPost($hRequest = -1)
    If $hRequest = -1 Then
    $hRequest = _WinHttpOpenRequest($hw_connect, "GET", "/index.php?page=ShoutboxContent&output=xml&since=" & $__LASTMESSAGE, "HTTP/1.1", "http://www.autoit.de/")
    _AddLogIn($hRequest)
    _WinHttpSendRequest($hRequest)
    EndIf
    _WinHttpReceiveResponse($hRequest)
    Local $data
    Do
    $data &= _WinHTTPReadData($hRequest, 1)
    Until @extended = 0
    _WinHTTPCloseHandle($hRequest)
    Local $LASTMESSAGE = StringRegExp($data, "<last>(.*?)</last>", 1)
    If IsArray($LASTMESSAGE) And $LASTMESSAGE[0] <> $__LASTMESSAGE Then
    $__LASTMESSAGE = $LASTMESSAGE[0]
    Local $messages = StringRegExp($data, "(?s)<line><!\[CDATA\[(.*?)\]\]></line>", 3)
    Local $insert = ""
    For $i = 0 To UBound($messages) - 1
    $insert &= $messages[$i] & "<br />" & @CRLF
    Next
    If StringLen($insert) Then
    _IEDocInsertHTML($oShoutBox, $insert)
    $oIE.Document.parentwindow.Scroll(0, 99999)
    $state = WinGetState("AutoIt Shoutbox Chat -- © by Greek und Prog@ndy")
    If BitAND($state, 16) Then
    $result = StringRegExp($insert, "javascript\:parent\.sbWhisperTo\('(.*?)'\);", 1)
    If IsArray($result) Then
    TrayTip("Shoutbox Client", "Neue Nachricht von: " & $result[0], 2, 1)
    Sleep(2000)
    EndIf
    EndIf
    EndIf
    _ReadOnlineList($data)
    EndIf
    EndFunc ;==>_GetNewestPost

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

    Func _ReadOnlineList(ByRef $data)
    Local $temp = GUICtrlRead($WhisperList)
    $data = StringRegExp($data, "(?s)<onlineList>.*?<a(.*)</onlineList>", 1)
    $data = StringRegExp($data[0], '">(?:<[^>]*>)*(.+?)(?:</[^>]*>)*?</a>', 3)
    GUICtrlSetData($WhisperList, "|-------------|" & _ArrayToString($data), $temp)
    EndFunc ;==>_ReadOnlineList

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

    Func _Nachricht($Text)
    $Text = _URIEncode($Text)
    ;$iDateCalc = _DateDiff( 's',"1970/01/01 00:00:00",_NowCalc())
    $h_openRequest2 = _WinHttpOpenRequest($hw_connect, "POST", "/index.php?page=ShoutboxContent&output=xml", "HTTP/1.1", "http://www.autoit.de/")
    _AddLogIn($h_openRequest2)
    _WinHttpSendRequest($h_openRequest2, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "since=" & $__LASTMESSAGE & "&message=" & $Text)
    _GetNewestPost($h_openRequest2)
    EndFunc ;==>_Nachricht

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

    Func _WinHttpQueryHeadersEx($hRequest, $iInfoLevel = $WINHTTP_QUERY_RAW_HEADERS_CRLF, $sName = $WINHTTP_HEADER_NAME_BY_INDEX, $Index = $WINHTTP_NO_HEADER_INDEX)
    Local $tpName = "wstr"
    If $sName = $WINHTTP_HEADER_NAME_BY_INDEX Then $tpName = "ptr"
    Local $struct = DllStructCreate("dword")

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

    Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpQueryHeaders", _
    "hwnd", $hRequest, _
    "dword", $iInfoLevel, _
    $tpName, $sName, _
    "ptr", 0, _
    "ptr", DllStructGetPtr($struct), _
    "dword*", $Index)

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

    If @error Or $a_iCall[0] Then
    Return SetError(1, 0, 0)
    EndIf

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

    Local $i_size = DllStructGetData($struct, 1)

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

    If Not $i_size Then
    Return SetError(0, 0, "")
    EndIf

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

    Local $lpBuffer = DllStructCreate("wchar[" & $i_size & "]")

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

    $a_iCall = DllCall("winhttp.dll", "int", "WinHttpQueryHeaders", _
    "hwnd", $hRequest, _
    "dword", $iInfoLevel, _
    $tpName, $sName, _
    "ptr", DllStructGetPtr($lpBuffer), _
    "ptr", DllStructGetPtr($struct), _
    "dword*", $Index)

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

    If @error Or Not $a_iCall[0] Then
    Return SetError(2, 0, 0)
    EndIf

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

    Return SetError(0, $a_iCall[6], DllStructGetData($lpBuffer, 1))
    EndFunc ;==>_WinHttpQueryHeadersEx

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

    Func WinRunTrans($Window, $Mod)
    If $Mod = "Show" Then
    WinSetTrans($Window, "", 0)
    GUISetState(@SW_SHOW, $Window)
    For $i = 0 To 255 Step 5
    WinSetTrans($Window, "", $i)
    Sleep(10)
    Next
    ElseIf $Mod = "Hide" Then
    For $i = 255 To 0 Step -5
    WinSetTrans($Window, "", $i)
    Sleep(10)
    Next
    GUISetState(@SW_HIDE, $Window)
    EndIf
    EndFunc ;==>WinRunTrans
    #EndRegion Func's

    [/autoit]


    Tut es aber nicht 8|
    Jemand ne Idee?

    4 Mal editiert, zuletzt von Sen (17. Dezember 2009 um 12:20)

  • Bump. :D

    Mit der neuen Beta/Stable läufts:

    Spoiler anzeigen
    [autoit]


    ;==============================================================
    ; ShoutBox Chat
    ;==============================================================
    ; Author: Progandy / Greek
    ; Little Changes: Sen
    ; Version: 2.4+
    ;==============================================================
    ; Sidenote:
    ; You need newest Beta for AdlibRegister/OnAutoItExitRegister
    ;==============================================================
    #include <ButtonConstants.au3>
    #include <WinHTTP.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <String.au3>
    #include <Date.au3>
    #include <IE.au3>
    #include <Array.au3>
    #include <WinAPI.au3>

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

    #Region StartUp
    OnAutoItExitRegister("CloseAllHandles")
    AdlibRegister("_GetNewestPostAd", 5000)
    Global $__LASTMESSAGE = 0, $hw_connect, $hw_open, $LogOutLink = ""
    Global $_LOGIN_Cookie = IniRead("ShoutBoxClient.ini", "Data", "LogInData", "")
    DirCreate(@ScriptDir & "\ShoutBoxLog\")
    #EndRegion StartUp

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

    #Region GUI
    Opt("GUIResizeMode", 802)
    $MainGUI = GUICreate("Shoutbox Chat", 700, 380, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPCHILDREN))
    $oIE = _IECreateEmbedded()
    $ChatAnzeige = GUICtrlCreateObj($oIE, 0, 0, 550, 300)

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

    $Benutzername = GUICtrlCreateInput(IniRead("ShoutBoxClient.ini", "Data", "User", ""), 574, 5, 120, 20)
    $Passwort = GUICtrlCreateInput("", 574, 25, 120, 20, $ES_PASSWORD)
    $Einloggen = GUICtrlCreateButton("Einloggen", 574, 45, 120, 24)
    $Ausloggen = GUICtrlCreateButton("Ausloggen", 574, 45, 120, 24)
    GUICtrlSetState($Ausloggen, $GUI_HIDE)

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

    $Absenden = GUICtrlCreateButton("&Absenden", 440, 300, 110, 24)
    GUICtrlSetState($Absenden, $GUI_DISABLE)
    $Aktualisieren = GUICtrlCreateButton("Aktualisieren (F5)", 440, 328, 110, 24)
    $Speichern = GUICtrlCreateButton("Speichern", 440, 356, 110, 24)

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

    $Text = GUICtrlCreateEdit("", 0, 300, 440, 80, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL))

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

    $btnExpandHide = GUICtrlCreateButton("<", 550, 0, 19, 380)
    $WhisperList = GUICtrlCreateList("", 569, 71, 131, 309)
    $TopMost = GUICtrlCreateCheckbox("TopMost", 599, 365, 131, 15)

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

    If IniRead("ShoutBoxClient.ini", "Data", "OnTop", "") = "True" Then
    WinSetOnTop($MainGUI, "", 1)
    GUICtrlSetState($TopMost, $GUI_CHECKED)
    EndIf
    If IniRead("ShoutBoxClient.ini", "Data", "ShowOnline", "True") = "False" Then
    _ShowOnlineList(False)
    EndIf

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

    ;Color/Bk Settings
    GUICtrlSetBkColor($Benutzername, 0xF2F6FA)
    GUICtrlSetColor($Benutzername, 0x000000)
    GUICtrlSetBkColor($Passwort, 0xF2F6FA)
    GUICtrlSetColor($Passwort, 0x000000)
    GUICtrlSetBkColor($Text, 0xF2F6FA)
    GUICtrlSetColor($Text, 0x000000)
    GUICtrlSetBkColor($WhisperList, 0xF2F6FA)
    GUICtrlSetColor($WhisperList, 0x000000)

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

    WinRunTrans($MainGUI, "Show")
    #EndRegion GUI

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

    #Region Settings
    $ClearDUMMY = GUICtrlCreateDummy()
    Local $Accels[4][2] = [["^{F5}", $Aktualisieren],["{F5}", $Aktualisieren],["{ENTER}", $Absenden],["{ESC}", $ClearDUMMY]]
    GUISetAccelerators($Accels)

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

    Global $rLastText = ""
    Global $hw_open = _WinHttpOpen("AutoIt ShoutBoxClient")
    Global $hw_connect = _WinHttpConnect($hw_open, "autoit.de")

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

    _IENavigate($oIE, "about:blank")
    _IEDocWriteHTML($oIE, '<html><head><script type="text/javascript">document.oncontextmenu = function(e){return false;};</script><base href="http://autoit.de/"><link rel="stylesheet" type="text/css" media="screen" href="wcf/style/style-3.css" /></head><body style="margin:0px; padding:0px;"><div class="shoutboxMessageFrame shoutboxFrameInner container-2" style="margin:0px; padding:0px; position:absolute; top:0px; left:0px; width:100%; height:100%;"><div id="shoutboxcontent" class="shoutboxMessageFrame shoutboxFrameInner container-2 smallFont" style="text-align:left; margin:0px; padding:0px;"></div></div></body></html>');
    Global $oShoutBox = _IEGetObjById($oIE, "shoutboxcontent")

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

    _TryLogInCookie()
    _GetNewestPost()
    $FirstStart = False
    #EndRegion Settings

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

    #Region Loop
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Einloggen
    $u = GUICtrlRead($Benutzername)
    $p = GUICtrlRead($Passwort)
    _Login($u, $p)
    Case $Ausloggen
    _LogOut()
    Case $Absenden
    If BitAND(GUICtrlGetState($Absenden), $GUI_DISABLE) = $GUI_DISABLE Then
    $u = GUICtrlRead($Benutzername)
    $p = GUICtrlRead($Passwort)
    _Login($u, $p)
    Else
    $rText = GUICtrlRead($Text)
    If $rText <> "" And $rText <> $rLastText Then
    $rLastText = StringRegExpReplace($rText, "\A(\/w)+", "")
    GUICtrlSetData($Text, "")
    GUICtrlSetData($WhisperList, "-------------")
    _Nachricht($rText)
    ControlFocus($MainGUI, "", $Text)
    EndIf
    EndIf
    Case $Aktualisieren
    _GetNewestPost()
    Case $ClearDUMMY
    GUICtrlSetData($WhisperList, "-------------")
    GUICtrlSetData($Text, "")
    Case $Speichern
    _SaveLog()
    Case $WhisperList
    $WTarget = GUICtrlRead($WhisperList)
    If $WTarget = "-------------" Or $WTarget = "" Then
    GUICtrlSetData($Text, StringRegExpReplace(GUICtrlRead($Text), '\A\/w ".*?"\h?', ""))
    ;~ GUICtrlSetData($Text, StringRegExpReplace(GUICtrlRead($Text),'\A".*?"\h?',""))
    Else
    GUICtrlSetData($Text, '/w "' & $WTarget & '" ' & StringRegExpReplace(GUICtrlRead($Text), '\A\/w ".*?"\h?', ""))
    ;~ GUICtrlSetData($Text, '"' & $WTarget&'" '&StringRegExpReplace(GUICtrlRead($Text),'\A".*?"\h?',""))
    EndIf
    Case $TopMost
    Local $Attrib = BitAND(GUICtrlRead($TopMost), $GUI_CHECKED) = $GUI_CHECKED
    IniWrite("ShoutBoxClient.ini", "Data", "OnTop", $Attrib)
    WinSetOnTop($MainGUI, "", $Attrib)
    Case $btnExpandHide
    Switch GUICtrlRead($btnExpandHide)
    Case "<"
    _ShowOnlineList(False)
    Case ">"
    _ShowOnlineList(True)
    EndSwitch
    EndSwitch
    WEnd
    #EndRegion Loop

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

    #Region Func's
    Func _SaveLog()
    $LogPath = @ScriptDir & "\ShoutBoxLog\" & @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & "-" & @MIN & "-" & @SEC & ".htm"
    FileWrite($LogPath, _IEDocReadHTML($oIE))
    EndFunc ;==>_SaveLog

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

    Func _ShowOnlineList($Show)
    Local $pos = WinGetPos($MainGUI)
    Switch $Show
    Case False
    GUICtrlSetData($btnExpandHide, ">")
    WinMove($MainGUI, "", $pos[0], $pos[1], $pos[2] - 131, $pos[3])
    GUICtrlSetState($WhisperList, @SW_HIDE)
    GUICtrlSetState($TopMost, @SW_HIDE)
    Case True
    GUICtrlSetData($btnExpandHide, "<")
    WinMove($MainGUI, "", $pos[0], $pos[1], $pos[2] + 131, $pos[3])
    GUICtrlSetState($WhisperList, @SW_SHOW)
    GUICtrlSetState($TopMost, @SW_SHOW)
    EndSwitch
    IniWrite("ShoutBoxClient.ini", "Data", "ShowOnline", $Show = True)
    EndFunc ;==>_ShowOnlineList

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

    Func _Reconnect()
    ; Prog@ndy
    _WinHTTPCloseHandle($hw_connect)
    Global $hw_connect = _WinHttpConnect($hw_open, "autoit.de")
    Global $_LOGIN_Cookie = IniRead("ShoutBoxClient.ini", "Data", "LogInData", "")
    EndFunc ;==>_Reconnect

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

    Func CloseAllHandles()
    _WinHTTPCloseHandle($hw_connect)
    _WinHTTPCloseHandle($hw_open)
    EndFunc ;==>CloseAllHandles

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

    Func _AddLogIn($hRequest)
    If $_LOGIN_Cookie Then _WinHTTPAddRequestHeaders($hRequest, $_LOGIN_Cookie, BitOR($WINHTTP_ADDREQ_FLAG_ADD, $WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON))
    EndFunc ;==>_AddLogIn

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

    Func _ShowLogOut()
    GUICtrlSetState($Einloggen, $GUI_HIDE)
    GUICtrlSetState($Ausloggen, $GUI_SHOW)
    GUICtrlSetState($Benutzername, $GUI_DISABLE)
    GUICtrlSetState($Passwort, $GUI_DISABLE)
    GUICtrlSetState($Absenden, $GUI_ENABLE)
    GUICtrlSetState($Text, $GUI_ENABLE)
    EndFunc ;==>_ShowLogOut
    Func _LogOut()
    $h_openRequest = _WinHttpOpenRequest($hw_connect, "GET", $LogOutLink, "HTTP/1.1")
    _AddLogIn($h_openRequest)
    _WinHttpSendRequest($h_openRequest)
    _WinHttpReceiveResponse($h_openRequest)
    _WinHTTPCloseHandle($h_openRequest)
    GUICtrlSetState($Einloggen, $GUI_SHOW)
    GUICtrlSetState($Ausloggen, $GUI_HIDE)
    GUICtrlSetState($Benutzername, $GUI_ENABLE)
    GUICtrlSetState($Passwort, $GUI_ENABLE)
    GUICtrlSetState($Absenden, $GUI_DISABLE)
    GUICtrlSetState($Text, $GUI_DISABLE)
    $_LOGIN_Cookie = ""
    IniWrite("ShoutBoxClient.ini", "Data", "LogInData", "")
    EndFunc ;==>_LogOut
    Func _TryLogInCookie()
    $h_openRequest = _WinHttpOpenRequest($hw_connect, "GET", "index.php", "HTTP/1.1")
    _AddLogIn($h_openRequest)

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

    _WinHttpSendRequest($h_openRequest)
    _WinHttpReceiveResponse($h_openRequest)
    Local $data
    Do
    $data &= _WinHTTPReadData($h_openRequest, 1)
    Until @extended = 0
    If $data = "" Then
    MsgBox(16, 'AutoIt ShoutBox Chat - Fehler', "Fehler bei der Verbindung zu http://www.autoit.de. Das Programm wird beendet")
    Exit
    EndIf
    _WinHTTPCloseHandle($h_openRequest)
    $LogOutLink = StringRegExp($data, "(action=UserLogout&(?:amp;)?t=[a-zA-Z0-9]+)", 3)
    If Not @error Then
    _ShowLogOut()
    $LogOutLink = "/index.php?" & $LogOutLink[0]
    Else
    $LogOutLink = ""
    EndIf
    EndFunc ;==>_TryLogInCookie

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

    Func _Login($user, $pw)
    Local $post = "loginUsername=" & _URIEncode($user) & "&loginPassword=" & _URIEncode($pw) & "&url=%2Findex.php%3Fform%3DUserLogin&&x=7&y=7&useCookies=1"
    Local $h_openRequest = _WinHttpOpenRequest($hw_connect, "POST", "/index.php?form=UserLogin", "HTTP/1.1", "http://www.autoit.de/")
    _WinHttpSendRequest($h_openRequest, "Content-Type: application/x-www-form-urlencoded" & @CRLF, $post)
    _WinHttpReceiveResponse($h_openRequest)
    Local $header = "", $Index = 0
    Do
    $header &= _WinHttpQueryHeadersEx($h_openRequest, $WINHTTP_QUERY_SET_COOKIE, $WINHTTP_HEADER_NAME_BY_INDEX, $Index)
    $Index = @extended
    Until $Index = 0
    $header = StringRegExp($header, "(wcf_.*?;)", 3)
    Local $CookieString = "Cookie:"
    For $i = 0 To UBound($header) - 1
    $CookieString &= " " & $header[$i]
    Next
    IniWrite("ShoutBoxClient.ini", "Data", "LogInData", $CookieString)
    IniWrite("ShoutBoxClient.ini", "Data", "User", $user)
    _WinHTTPCloseHandle($h_openRequest)
    _TryLogInCookie()
    EndFunc ;==>_Login

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

    Func _URIEncode($sData)
    ; Prog@ndy
    Local $aData = StringSplit(BinaryToString(StringToBinary($sData, 4), 1), "")
    Local $nChar
    $sData = ""
    For $i = 1 To $aData[0]
    ;~ ConsoleWrite($aData[$i] & @CRLF)
    $nChar = Asc($aData[$i])
    Switch $nChar
    Case 45, 46, 48 - 57, 65 To 90, 95, 97 To 122, 126
    $sData &= $aData[$i]
    Case 32
    $sData &= "+"
    Case Else
    $sData &= "%" & Hex($nChar, 2)
    EndSwitch
    Next
    Return $sData
    EndFunc ;==>_URIEncode

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

    Func _URIDecode($sData)
    ; Prog@ndy
    Local $aData = StringSplit(StringReplace($sData, "+", " ", 0, 1), "%")
    $sData = ""
    For $i = 2 To $aData[0]
    $aData[1] &= Chr(Dec(StringLeft($aData[$i], 2))) & StringTrimLeft($aData[$i], 2)
    Next
    Return BinaryToString(StringToBinary($aData[1], 1), 4)
    EndFunc ;==>_URIDecode

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

    Func _GetNewestPostAd()
    _GetNewestPost()
    EndFunc ;==>_GetNewestPostAd

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

    Func _GetNewestPost($hRequest = -1)
    If $hRequest = -1 Then
    $hRequest = _WinHttpOpenRequest($hw_connect, "GET", "/index.php?page=ShoutboxContent&output=xml&since=" & $__LASTMESSAGE, "HTTP/1.1", "http://www.autoit.de/")
    _AddLogIn($hRequest)
    _WinHttpSendRequest($hRequest)
    EndIf
    _WinHttpReceiveResponse($hRequest)
    Local $data
    Do
    $data &= _WinHTTPReadData($hRequest, 1)
    Until @extended = 0
    _WinHTTPCloseHandle($hRequest)
    Local $LASTMESSAGE = StringRegExp($data, "<last>(.*?)</last>", 1)
    If IsArray($LASTMESSAGE) And $LASTMESSAGE[0] <> $__LASTMESSAGE Then
    $__LASTMESSAGE = $LASTMESSAGE[0]
    Local $messages = StringRegExp($data, "(?s)<line><!\[CDATA\[(.*?)\]\]></line>", 3)
    Local $insert = ""
    For $i = 0 To UBound($messages) - 1
    $insert &= $messages[$i] & "<br />" & @CRLF
    Next
    If StringLen($insert) Then
    _IEDocInsertHTML($oShoutBox, $insert)
    $oIE.Document.parentwindow.Scroll(0, 99999)
    $state = WinGetState("AutoIt Shoutbox Chat -- © by Greek und Prog@ndy")
    If BitAND($state, 16) Then
    $result = StringRegExp($insert, "javascript\:parent\.sbWhisperTo\('(.*?)'\);", 1)
    If IsArray($result) Then
    TrayTip("Shoutbox Client", "Neue Nachricht von: " & $result[0], 2, 1)
    Sleep(2000)
    EndIf
    EndIf
    EndIf
    _ReadOnlineList($data)
    EndIf
    EndFunc ;==>_GetNewestPost

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

    Func _ReadOnlineList(ByRef $data)
    Local $temp = GUICtrlRead($WhisperList)
    $data = StringRegExp($data, "(?s)<onlineList>.*?<a(.*)</onlineList>", 1)
    $data = StringRegExp($data[0], '">(?:<[^>]*>)*(.+?)(?:</[^>]*>)*?</a>', 3)
    GUICtrlSetData($WhisperList, "|-------------|" & _ArrayToString($data), $temp)
    EndFunc ;==>_ReadOnlineList

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

    Func _Nachricht($Text)
    $Text = _URIEncode($Text)
    ;$iDateCalc = _DateDiff( 's',"1970/01/01 00:00:00",_NowCalc())
    $h_openRequest2 = _WinHttpOpenRequest($hw_connect, "POST", "/index.php?page=ShoutboxContent&output=xml", "HTTP/1.1", "http://www.autoit.de/")
    _AddLogIn($h_openRequest2)
    _WinHttpSendRequest($h_openRequest2, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "since=" & $__LASTMESSAGE & "&message=" & $Text)
    _GetNewestPost($h_openRequest2)
    EndFunc ;==>_Nachricht

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

    Func _WinHttpQueryHeadersEx($hRequest, $iInfoLevel = $WINHTTP_QUERY_RAW_HEADERS_CRLF, $sName = $WINHTTP_HEADER_NAME_BY_INDEX, $Index = $WINHTTP_NO_HEADER_INDEX)
    Local $tpName = "wstr"
    If $sName = $WINHTTP_HEADER_NAME_BY_INDEX Then $tpName = "ptr"
    Local $struct = DllStructCreate("dword")

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

    Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpQueryHeaders", _
    "hwnd", $hRequest, _
    "dword", $iInfoLevel, _
    $tpName, $sName, _
    "ptr", 0, _
    "ptr", DllStructGetPtr($struct), _
    "dword*", $Index)

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

    If @error Or $a_iCall[0] Then
    Return SetError(1, 0, 0)
    EndIf

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

    Local $i_size = DllStructGetData($struct, 1)

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

    If Not $i_size Then
    Return SetError(0, 0, "")
    EndIf

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

    Local $lpBuffer = DllStructCreate("wchar[" & $i_size & "]")

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

    $a_iCall = DllCall("winhttp.dll", "int", "WinHttpQueryHeaders", _
    "hwnd", $hRequest, _
    "dword", $iInfoLevel, _
    $tpName, $sName, _
    "ptr", DllStructGetPtr($lpBuffer), _
    "ptr", DllStructGetPtr($struct), _
    "dword*", $Index)

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

    If @error Or Not $a_iCall[0] Then
    Return SetError(2, 0, 0)
    EndIf

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

    Return SetError(0, $a_iCall[6], DllStructGetData($lpBuffer, 1))
    EndFunc ;==>_WinHttpQueryHeadersEx

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

    Func WinRunTrans($Window, $Mod)
    If $Mod = "Show" Then
    WinSetTrans($Window, "", 0)
    GUISetState(@SW_SHOW, $Window)
    For $i = 0 To 255 Step 5
    WinSetTrans($Window, "", $i)
    Sleep(10)
    Next
    ElseIf $Mod = "Hide" Then
    For $i = 255 To 0 Step -5
    WinSetTrans($Window, "", $i)
    Sleep(10)
    Next
    GUISetState(@SW_HIDE, $Window)
    EndIf
    EndFunc ;==>WinRunTrans
    #EndRegion Func's

    [/autoit]