#include <IE.au3>
#include <Date.au3>
#include <File.au3>
#include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
Opt('TrayMenuMode', 1)
Global $iPause = 20000, _ ;проверка каждые 20 сек.
$sStringChat = @CRLF, $iStart, $sTitleScript = @ScriptName & '{[/@$@\]}', _
$sLogin = 'Login', $sPass = 'Pass'
If WinExists($sTitleScript) Then Exit
AutoItWinSetTitle($sTitleScript)
HotKeySet('+{Esc}', '_Exit');Shift+Esc - выход
_Avtor_Cwars($sLogin, $sPass, 1);0 - IE скрыт.
If @error Then
MsgBox(16, 'Error', '_Avtor_Cwars')
_Exit()
EndIf
Sleep(2000)
_Select_Menu()
If Not @error Then
Sleep(2000)
_Get_Chat($sStringChat)
If Not @error Then
_Show()
EndIf
Else
ConsoleWrite('Error _Select_Menu' & @LF)
EndIf
HotKeySet('+{1}', '_Show');Shift+1 - показать
TraySetToolTip('Shift + Esc - выход' & @LF & 'Shift + 1 - информация')
_Memory_Check()
$iStart = TimerInit()
While 1
If TimerDiff($iStart) > $iPause Then
ConsoleWrite('_Get_Chat' & @LF)
_Select_Menu()
If Not @error Then
Sleep(1000)
_Get_Chat($sStringChat)
If Not @error Then
If @extended Then
_Show()
EndIf
Else
ConsoleWrite('Error _Get_Chat' & @LF)
EndIf
Else
ConsoleWrite('Error _Select_Menu' & @LF)
EndIf
_Memory_Check()
$iStart = TimerInit()
EndIf
Sleep(100)
WEnd
Func _Show()
Local $s_String
If StringLen($sStringChat) > 2 Then
$s_String = StringTrimLeft(StringTrimRight($sStringChat, 2), 2)
MsgBox(64, 'Сообщения:', $s_String, 10)
Else
MsgBox(16, 'Error', 'Нет сообщений', 10)
EndIf
$iStart = TimerInit()
EndFunc ;==>_Show
Func _Exit()
Local $s_Title = '[Title:Clan; Class:IEFrame]'
If WinExists($s_Title) Then WinClose($s_Title)
_Save()
_DelOld()
Exit
EndFunc ;==>_Exit
Func _DelOld($i_Diff_Day = 30)
;удалит все файлы вида YYYY_MM_DD.txt, старше $i_Diff_Day дней
Local $s_Dir = @ScriptDir & '\ChatLog', $a_Files, $s_Date, $i_Diff
$a_Files = _FileListToArray($s_Dir, '*.txt', 1)
If @error Then Return
For $i = 1 To $a_Files[0]
$s_Date = StringReplace(StringRegExpReplace($a_Files[$i], '\..*$', ''), '_', '/')
$i_Diff = _DateDiff('D', $s_Date, _NowCalcDate())
If Not @error Then
If $i_Diff > $i_Diff_Day Then FileDelete($s_Dir & '\' & $a_Files[$i])
EndIf
Next
EndFunc ;==>_DelOld
Func _Save()
;запишет в файл с именем вида YYYY_MM_DD.txt (сегодня) текст сообщений.
Local $h_File, $s_TextOLd, $s_TextNew, $s_Path = @ScriptDir & '\ChatLog', _
$s_File = StringReplace(_NowCalcDate(), '/', '_') & '.txt', $a_TextNew
$s_TextNew = StringTrimLeft($sStringChat, 2)
If StringLen($sStringChat) <= 2 Then Return
If FileExists($s_Path & '\' & $s_File) Then
$h_File = FileOpen($s_Path & '\' & $s_File, 0)
If $h_File = -1 Then Return
$s_TextOLd = FileRead($h_File)
FileClose($h_File)
If ($s_TextOLd = $s_TextNew Or Not $s_TextOLd) Then Return
$a_TextNew = StringSplit(StringStripCR($s_TextNew), @LF)
For $i = 1 To $a_TextNew[0]
If Not StringInStr($s_TextOLd, $a_TextNew[$i] & @CRLF) Then
$s_TextOLd &= $a_TextNew[$i] & @CRLF
EndIf
Next
$h_File = FileOpen($s_Path & '\' & $s_File, 2)
If $h_File <> -1 Then
FileWrite($h_File, $s_TextOLd)
FileClose($h_File)
EndIf
Else
$h_File = FileOpen($s_Path & '\' & $s_File, 2)
If $h_File <> -1 Then
FileWrite($h_File, $s_TextNew)
FileClose($h_File)
EndIf
EndIf
EndFunc ;==>_Save
Func _Get_Chat(ByRef $s_String)
Local $s_Title = '[Title:Clan; Class:IEFrame]', $h_HWND, $o_Obj, $o_Frame, $o_Head, _
$s_HTML, $a_Temp, $i_Extended, $s_Temp
$h_HWND = WinGetHandle($s_Title)
If Not $h_HWND Then Return SetError(1)
$o_Obj = _IEAttach($h_HWND, 'HWND')
If @error Then Return SetError(1)
$o_Frame = _IEFrameGetObjByName($o_Obj, 'null')
If @error Then Return SetError(1)
$o_Head = _IETagNameGetCollection($o_Frame, 'head', 0)
If @error Then Return SetError(1)
$s_HTML = _IEPropertyGet($o_Head, 'innerhtml')
If @error Then Return SetError(1)
$a_Temp = StringRegExp($s_HTML, '(\d{1,2}:\d{1,2}:\d{1,2}.*?)(?:<span class="date|''\);)', 3)
If Not @error Then
For $i = 0 To UBound($a_Temp) - 1
$s_Temp = StringStripWS(StringRegExpReplace($a_Temp[$i], '<.*?>', ''), 7)
If Not $s_Temp Or StringRegExp($s_Temp, '\d{1,2}:\d{1,2}:\d{1,2}\hUTC|GMT') Then ContinueLoop
If Not StringInStr($s_String, @CRLF & $s_Temp & @CRLF) Then
$s_String &= $s_Temp & @CRLF
$i_Extended = 1
EndIf
Next
EndIf
Return SetExtended($i_Extended)
EndFunc ;==>_Get_Chat
Func _Select_Menu($s_String_Menu = 'Локация')
Local $s_Title = '[Title:Clan; Class:IEFrame]', $h_HWND, $o_Obj, _
$o_Frame, $o_Tags, $i_Error = 1
$h_HWND = WinGetHandle($s_Title)
If Not $h_HWND Then Return SetError(11)
$o_Obj = _IEAttach($h_HWND, 'HWND')
If @error Then Return SetError(12)
For $i = 1 To 1
$o_Frame = _IEFrameGetObjByName($o_Obj, 'menu')
If @error Then ExitLoop
$o_Tags = _IETagNameGetCollection($o_Frame, 'a')
If @error Then ExitLoop
For $o_Tag In $o_Tags
If $o_Tag.innertext == 'Локация' Then
_IEAction($o_Tag, 'click')
If @error Then ExitLoop
_IELoadWait($o_Obj)
If @error Then ExitLoop
$i_Error = 0
EndIf
Next
Next
Return SetError($i_Error)
EndFunc ;==>_Select_Menu
Func _Avtor_Cwars($s_Login, $s_Pass, $f_Visible = 0)
Local $o_Obj, $s_Url_Avtor = 'http://www.cwars.ru/', $o_Form, $o_Login, $o_Pass
$o_Obj = _IECreate('about:blank', 0, $f_Visible)
If @error Then Return SetError(1)
For $i = 1 To 1
_IENavigate($o_Obj, $s_Url_Avtor)
If @error Then ExitLoop
$o_Form = _IEGetObjByName($o_Obj, 'log')
If @error Then ExitLoop
$o_Login = _IEFormElementGetObjByName($o_Form, 'nick')
If @error Then ExitLoop
$o_Pass = _IEFormElementGetObjByName($o_Form, 'password')
If @error Then ExitLoop
_IEFormElementSetValue($o_Login, $s_Login)
If @error Then ExitLoop
_IEFormElementSetValue($o_Pass, $s_Pass)
If @error Then ExitLoop
_IEFormSubmit($o_Form, 0)
If @error Then ExitLoop
_IELoadWait($o_Obj)
If @error Then ExitLoop
Next
Return SetError(@error)
EndFunc ;==>_Avtor_Cwars
Func _Memory_Check()
Local $a_Memory, $i_MaxMemory = 3 * 1024 * 1024
$a_Memory = ProcessGetStats()
If Not @error And IsArray($a_Memory) Then
If $a_Memory[0] > $i_MaxMemory Then
_WinAPI_EmptyWorkingSet()
EndIf
EndIf
EndFunc ;==>_Memory_Check