Hiho,
Shoutbox Chat Version 2.4 !
Von Progandy und Greek
Bild:
[Blockierte Grafik: http://img91.imageshack.us/img91/9057/bildshoutboxchat2.jpg]
Neues:
Version 2.0
- Ihr musst euch nur ein einziges mal einloggen! Beim nächsten Start einfach warten bis er fertig geladen hat und ihr seit eingelogt ( Also nicht ausloggen! ).
- Online Liste.
- Chat speichern.
- Mehrere Zeilen schreiben. ( Zeilenumbruch mit Shift + Enter )
Version 2.1
- Online Liste auf und zu klappen.
- Fehler behoben
Version 2.2
- Bug mit farbigen Namen behoben
Version 2.3
- Bug mit Freunden behoben
Version 2.4
- Wenn der Shoutbox Client minimiert ist, werdet ihr per TrayTip benachrichtigt wenn jemand geschrieben hat.
Die beiden includes braucht ihr:
WinHTTPConstants.au3
WinHTTP.au3
Spoiler anzeigen
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Version=beta
#AutoIt3Wrapper_Icon=ShoutBoxClient.ico
#AutoIt3Wrapper_Run_Tidy=y
#AutoIt3Wrapper_Run_Obfuscator=y
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
; ShoutboxChat Version 2.4
;#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>
Global $__LASTMESSAGE = 0, $hw_connect, $hw_open, $LogOutLink = ""
Global $_LOGIN_Cookie = IniRead("ShoutBoxClient.ini", "Data", "LogInData", "")
DirCreate(@ScriptDir & "\ShoutBoxLog\")
#region ### START Koda GUI section ### Form=
Opt("GUIResizeMode", 802)
$MainGUI = GUICreate("AutoIt Shoutbox Chat -- © by Greek und Prog@ndy", 709, 374, @DesktopWidth / 2 - 300, @DesktopHeight / 2 - 250, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPCHILDREN))
$oIE = _IECreateEmbedded()
$ChatAnzeige = GUICtrlCreateObj($oIE, 16, 16, 522, 261)
$Benutzername = GUICtrlCreateInput(IniRead("ShoutBoxClient.ini", "Data", "User", ""), 416, 286, 121, 21)
$Passwort = GUICtrlCreateInput("", 416, 310, 121, 21, $ES_PASSWORD)
$Einloggen = GUICtrlCreateButton("Einloggen", 440, 335, 81, 25)
$Ausloggen = GUICtrlCreateButton("Ausloggen", 440, 335, 81, 25)
GUICtrlSetState($Ausloggen, $GUI_HIDE)
$Absenden = GUICtrlCreateButton("&Absenden", 16, 338, 75, 25)
GUICtrlSetState($Absenden, $GUI_DISABLE)
$Aktualisieren = GUICtrlCreateButton("Aktualisieren (F5)", 116, 338, 100, 25)
$Speichern = GUICtrlCreateButton("Speichern", 226, 338, 100, 25)
$Text = GUICtrlCreateEdit("", 16, 286, 385, 45, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
$btnExpandHide = GUICtrlCreateButton("<", 538, 16, 15, 343)
GUICtrlCreateLabel("Flüstern an:", 553, 16, 80, 20)
$WhisperList = GUICtrlCreateList("", 553, 36, 150, 330)
$TopMost = GUICtrlCreateCheckbox("TopMost", 640, 16, 60, 15)
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
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
$ClearDUMMY = GUICtrlCreateDummy()
Local $Accels[4][2] = [["^{F5}", $Aktualisieren],["{F5}", $Aktualisieren],["{ENTER}", $Absenden],["{ESC}", $ClearDUMMY]]
GUISetAccelerators($Accels)
Global $hw_open = _WinHttpOpen("AutoIt ShoutBoxClient")
Global $hw_connect = _WinHttpConnect($hw_open, "autoit.de")
OnAutoItExitRegister("CloseAllHandles")
_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")
_TryLogInCookie()
_GetNewestPost()
$FirstStart = False
AdlibRegister("_GetNewestPostAd", 5000)
[/autoit] [autoit][/autoit] [autoit]Func _SaveLog()
$LogPath = @ScriptDir & "\ShoutBoxLog\" & @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & "-" & @MIN & "-" & @SEC & ".htm"
FileWrite($LogPath, _IEDocReadHTML($oIE))
EndFunc ;==>_SaveLog
Global $rLastText = ""
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
Func _ShowOnlineList($Show)
Local $pos = WinGetPos($MainGUI)
Switch $Show
Case False
GUICtrlSetData($btnExpandHide, ">")
WinMove($MainGUI, "", $pos[0], $pos[1], $pos[2] - 156, $pos[3])
GUICtrlSetState($WhisperList, @SW_HIDE)
GUICtrlSetState($TopMost, @SW_HIDE)
Case True
GUICtrlSetData($btnExpandHide, "<")
WinMove($MainGUI, "", $pos[0], $pos[1], $pos[2] + 156, $pos[3])
GUICtrlSetState($WhisperList, @SW_SHOW)
GUICtrlSetState($TopMost, @SW_SHOW)
EndSwitch
IniWrite("ShoutBoxClient.ini", "Data", "ShowOnline", $Show = True)
EndFunc ;==>_ShowOnlineList
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
Func CloseAllHandles()
_WinHTTPCloseHandle($hw_connect)
_WinHTTPCloseHandle($hw_open)
EndFunc ;==>CloseAllHandles
Func _AddLogIn($hRequest)
If $_LOGIN_Cookie Then _WinHTTPAddRequestHeaders($hRequest, $_LOGIN_Cookie, BitOR($WINHTTP_ADDREQ_FLAG_ADD, $WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON))
EndFunc ;==>_AddLogIn
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)
_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
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
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
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
Func _GetNewestPostAd()
_GetNewestPost()
EndFunc ;==>_GetNewestPostAd
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
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
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
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")
Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpQueryHeaders", _
"hwnd", $hRequest, _
"dword", $iInfoLevel, _
$tpName, $sName, _
"ptr", 0, _
"ptr", DllStructGetPtr($struct), _
"dword*", $Index)
If @error Or $a_iCall[0] Then
Return SetError(1, 0, 0)
EndIf
Local $i_size = DllStructGetData($struct, 1)
[/autoit] [autoit][/autoit] [autoit]If Not $i_size Then
Return SetError(0, 0, "")
EndIf
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)
If @error Or Not $a_iCall[0] Then
Return SetError(2, 0, 0)
EndIf
Return SetError(0, $a_iCall[6], DllStructGetData($lpBuffer, 1))
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_WinHttpQueryHeadersEx
[/autoit]Update: 17.1.10
Greek & Prog@ndy