Что нового

Ведение логов переписки с QIP2005

Guezt

Продвинутый
Сообщения
335
Репутация
82
AutoIt: 3.3.0.0 и 3.3.6.1

Версия: 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


Добавлено:
Сообщение автоматически объединено:


сам заказал - сам сделал :smile: код конечно "код", но писал сам, получая консультации по некоторым моментам тут на форуме. Не выкладывал готовое решение по причине (лени) исправления в версиях AutoIt 3.3.1.0 и выше до 3.3.6.1 функций:
Код:
FileOpen()
FileRead()

всё откоментированно, понятен каждый шаг. Как и все начинающие обратился в стол заказов по неопытности тут:
http://autoit-script.ru/index.php/?topic=507.0 ;D
 

MorgaN

Знающий
Сообщения
4
Репутация
8
Скажите это я дурак или действительно не хватает слэшей?
Код:
RegWrite('HKEY_CLASSES_ROOT.hql',"","REG_SZ",'histqlog')
RegWrite('HKEY_CLASSES_ROOThistqlogDefaultIcon',"","REG_SZ",$path)
RegWrite('HKEY_CLASSES_ROOThistqlogshellopencommand','',"REG_EXPAND_SZ",'"%ProgramFiles%Windows NTAccessoriesWORDPAD.EXE" "%1"')
; добавляемся в атозагрузку!
RegWrite('HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun','qiplog',"REG_SZ",$path)
 
Автор
G

Guezt

Продвинутый
Сообщения
335
Репутация
82
MorgaN
Исправил, и давно заметил что при редактировании сообщения с кодом слеши куда-то пропадают, для этого и прикрепил файл. :smile:
эта часть должна выглядить вот так:
Код:
; назначаем редактор для просмотра файлов истории скрипта по умолчанию:
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)
 
Верх