AutoIt: 3.3.0.0 и 3.3.6.1
Версия: 3.0
Категория: Сеть/Интернет
Описание:
Автор: Guezt Gutsy
Добавлено:
сам заказал - сам сделал код конечно "код", но писал сам, получая консультации по некоторым моментам тут на форуме. Не выкладывал готовое решение по причине (лени) исправления в версиях AutoIt 3.3.1.0 и выше до 3.3.6.1 функций:
всё откоментированно, понятен каждый шаг. Как и все начинающие обратился в стол заказов по неопытности тут:
http://autoit-script.ru/index.php/?topic=507.0 ;D
Версия: 3.0
Категория: Сеть/Интернет
Описание:
- (!) Скрипт сохраняет всю активную переписку из QIP2005 независим от настроек истории самого QIP2005
- (!) может вести логи с 2х-3х ( больше не проверялось ) запущенных QIP одновременно.
- (!) Информирует в файле логе о том что историю в Qip очистили.
- (!) При запуске скрипта он автоматически добавляется в автозагрузку! (имя скрипта или скомпилированного .exe файла а так же путь до скрипта не имеет значения.
- (!) Назначает wordpad.exe редактором по умолчанию и присваивает расшерению файлов истории (*.hql) иконку скрипта.
- (-) Не сохраняет смайлы.
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\qip.ico
#AutoIt3Wrapper_outfile=qiplog.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Comment=QIP2005 Logger
#AutoIt3Wrapper_Res_Description=qip 2005 logger
#AutoIt3Wrapper_Res_Fileversion=3.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=Guezt Gutsy © 2009
#AutoIt3Wrapper_Res_Language=1049
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#NoTrayIcon
#include <file.au3>
Global $Icq, $uin , $buf, $path, $d
$hdel=@CRLF&"========================="&@CRLF&"Историю Очистили!!!"&@CRLF&"========================="
$path = @ScriptFullPath ; определяем путь к скрипту (полный)
; назначаем редактор для просмотра файлов истории скрипта по умолчанию:
RegWrite('HKEY_CLASSES_ROOT\.hql',"","REG_SZ",'histqlog')
RegWrite('HKEY_CLASSES_ROOT\histqlog\DefaultIcon',"","REG_SZ",$path)
RegWrite('HKEY_CLASSES_ROOT\histqlog\shell\open\command','',"REG_EXPAND_SZ",'"%ProgramFiles%\Windows NT\Accessories\WORDPAD.EXE" "%1"')
; добавляемся в атозагрузку!
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','qiplog',"REG_SZ",$path)
HotKeySet("+^!q", "_Quit") ; Ctrl+Alt+Shift+Q - выход
HotKeySet("+^!й", "_Quit")
HotKeySet("+^!u", "_UnReg") ; Ctrl+Alt+Shift+U - убрать с автозагрузки
HotKeySet("+^!г", "_UnReg")
HotKeySet("+^!r", "_Reg") ; Ctrl+Alt+Shift+R - добавить в автозагрузку
HotKeySet("+^!к", "_Reg")
HotKeySet("+^!d", "_Debag") ; Ctrl+Alt+Shift+D - включение отладки
HotKeySet("+^!в", "_Debag")
HotKeySet("+^!o", "_FOD") ; Ctrl+Alt+Shift+O - Открыть лог(и)
HotKeySet("+^!щ", "_FOD")
$uin = 0 ; Требуются
$text = 0 ; для
$dlina = 0 ; отладки со включенным ToolTip!
$d=0 ; Отладка 0/1 = выкл/вкл.
_DelTemp() ; Удаляем временные файлы при запуске!
While 1
WinWaitActive("[CLASS:TMsgForm]", "") ; Ожитаем окно квип
_GetUIN() ; получаем UIN и окно переписки с этим UINом
if FileExists(@ScriptDir &"\"&$Icq&"\"&$uin &".tmp") Then ; если есть временный файл то...
$file1 = FileOpen(@ScriptDir &"\"&$Icq&"\"&$uin &".tmp",0) ; Открываем временный файл
$txt1 = FileRead($file1) ; присваеваем $txt1 текст этого файла
$str1 = StringLen($txt1) ; вычисляем длину текста из файла файла
FileClose($file1) ; Закрываем файл.
$txt2 = $buf ; присваеваем $txt2 текст переписки с UIN
$str2 = StringLen($buf) ; вычисляем длину этого текста
$dlina = $str2 - $str1 ; Находим разницу между текстом из файла и текстом переписки
if $str1 = 0 And $str2 > 0 Then
_FileWriteHist(@ScriptDir &"\"&$Icq&"\"&$uin &".hql",$buf)
_WTF()
Else
if $dlina > 0 then ; Если разница больше (значит текст изменился) то...
$text = StringMid($txt2,$str1,$dlina) ; получаем текст из разницы двух текстов с учетом разницы
_FileWriteHist(@ScriptDir &"\"&$Icq&"\"&$uin &".hql",$text) ; И пишем в лог Истории UIN
_WTF() ; заменяем временный файл!
Elseif $dlina < 0 then ; Если разница меньше значит историю очистили!!!
_FileWriteHist(@ScriptDir &"\"&$Icq&"\"&$uin &".hql",$hdel) ; И пишем в лог Истории UIN что история была очищена!
_WTF() ; заменяем временный файл!
$dlina = 0 ; сбрасываем длину
Else ; это если именно равно первое и второе значение!!!
$text = "Ничего не изменилось"
EndIf
EndIf
Else ; если нет временного файла тогда создадим его (первая проверка временного файла!!!)
if FileExists(@ScriptDir &"\"&$Icq&"\"&$uin &".hql") Then
_WTF()
Else
_FileWriteHist(@ScriptDir &"\"&$Icq&"\"&$uin &".hql",$buf)
_WTF() ; создаем временнвй файл
EndIf
EndIf
_Deb($d) ; выкл-выкл визуального отображения работы программы.
WEnd
Func _FOD()
$message = "Выбор файла с историей"
$var = FileOpenDialog($message, @ScriptDir & "", "История (*.hql)", 1 + 4 )
If @error Then
MsgBox(64,"Информация!","Файл не выбран!",5)
Else
;Run($var)
ShellExecute($var)
EndIf
EndFunc
Func _Debag() ;Вкл выкл Отладка
$d = $d +1
if $d = 1 Then
MsgBox(64,"Информация!","Включена отладка!",5)
else
$d = 0
ToolTip("",0,0)
MsgBox(64,"Информация!","Отладка выключена!",5)
EndIf
EndFunc
Func _Deb($d) ;Информация отладки
if $d = 1 then
$d = ToolTip(@CRLF&"Ваш ICQ: "&$Icq&@CRLF&"ICQ Собеседника: "& $uin &@CRLF&"Длина текста: "& $dlina&@CRLF&"Текст ообщения: "&$text,0,0) ; требовалось для отладки :)
Return $d
Else
$d = ToolTip("",0,0)
Return $d
EndIf
EndFunc
Func _DelTemp() ;Функция удаления временных файлов
$allfolders = _FileListToArray(@ScriptDir, "*", 2)
if $allfolders <> 0 Then
For $i=1 to $allfolders[0]
FileDelete(@ScriptDir & "\" & $allfolders[$i] & "\" & "*.tmp")
Next
Else
FileDelete(@ScriptDir &"\"&"*.tmp")
EndIf
EndFunc
Func _WTF() ; функция записи временного файла
FileOpen(@ScriptDir &"\"&$icq& "\"& $uin &".tmp",10)
FileWrite(@ScriptDir &"\"&$icq& "\"& $uin &".tmp",$buf)
FileClose(@ScriptDir &"\"&$icq& "\"& $uin &".tmp")
EndFunc
Func _GetUIN() ; функция получения UIN и окна переписки с ним
$sIcq = WinGetTitle("[CLASS:TMsgForm]", "") ; получаем заголовок окна
$Icq = StringRegExpReplace($sIcq, "\D+","") ; выделяем из текста только цифры (ICQ)
$uin = ControlGetText("[CLASS:TMsgForm]", "", "TPanel4") ; парсим UIN собеседника
$buf = ControlGetText("[CLASS:TMsgForm]", "", "TRichView1") ; Захватываем в буфер текст с окна переписки
EndFunc
Func _Quit() ;выход
MsgBox(64,"Информация!","Программа закрыта :)",5)
Exit 0
EndFunc
Func _UnReg() ; Убрать с автозагрузки
RegDelete('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','qiplog')
MsgBox(64,"Иформация!","Удалено с Автозагрузки! :)",5)
EndFunc
Func _Reg() ; добавить в автозагрузку
$path = @ScriptFullPath
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','qiplog',"REG_SZ",$path)
MsgBox(64,"Информация!","Добавленна в Автозагрузку!",5)
EndFunc
Func _FileWriteHist($LogPath, $LogMsg) ; Запись истории в файл
Local $Msg, $WriteFile, $OpenFile
$Msg = @CRLF & $LogMsg
$Msg = $LogMsg
$OpenFile = FileOpen($LogPath,9)
$WriteFile = FileWriteLine($OpenFile, $Msg)
Return FileClose($OpenFile)
EndFunc
Автор: Guezt Gutsy
Добавлено:
Сообщение автоматически объединено:
сам заказал - сам сделал код конечно "код", но писал сам, получая консультации по некоторым моментам тут на форуме. Не выкладывал готовое решение по причине (лени) исправления в версиях AutoIt 3.3.1.0 и выше до 3.3.6.1 функций:
Код:
FileOpen()
FileRead()
всё откоментированно, понятен каждый шаг. Как и все начинающие обратился в стол заказов по неопытности тут:
http://autoit-script.ru/index.php/?topic=507.0 ;D