Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 4)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Открыть новую тему     Написать ответ в эту тему

gyra

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
Описание:

Цитата:
AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя эмуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши, управление окнами и их визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны.
Умеет он очень и очень многое! Бесплатный.

 
  • Справки
  • Инструменты
  • Ресурсы, посвящённые AutoIt
  • Полезные советы новичкам и не только
  • Готовые решения
  • Версии для устаревших Windows
  • Скрипт раскраски кода AutoIt для публикации в форумах
     


     
    За шапкой следит ViSiToR / AZJIO  

  • Всего записей: 7932 | Зарегистр. 18-02-2006 | Отправлено: 10:49 23-01-2020 | Исправлено: Egor2020, 14:02 22-03-2021
    Rex2701



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Добрый день!
     
    Необходимо автоматизировать создание бэкапа проекта в одной среде разработки.
    Возникли пара вопросов:
    1. При появлении стандартного диалога сохранения файла - как узнать его текущий каталог?
    Дело в том, что пользователь может сам запустить бэкап в любое нужное ему место, и файловый диалог сохраняет последний выбранный каталог, но автоматический бэкап должен класться в строго определённый каталог.
    2. При выборе пункта меню "забэкапить проект" среда показывает диалог выбора из всех когда-либо открывавшихся проектов, состоящий из SysTabControl32 (4 вкладки с разными типами проектов, нас интересует только последняя), внутри которой находится ListView с двумя колонками - "имя проекта" и "полный путь к файлам проекта". Соответственно, чтобы забэкапить нужный проект - его необходимо выбрать. Проблема в том, что ListView не видится AutoIt Window Info. Внутри SysTabControl32 тоже ничего интересного нет. Отсюда непонятно, какой функцией AutoIt можно считать текст выбранной строки для проверки имени проекта. Пока сваял костыль - клик мышки по относительным координатам внутри окна, который должен попадать на нужную строку. Но нет гарантии, что число и расположение строк не изменится.
    3. Как проще всего проверить доступность сетевой папки (типа \\server\users\fileshare)?

    Всего записей: 30 | Зарегистр. 11-06-2008 | Отправлено: 11:52 13-01-2022
    iglezz

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rex2701
    По второму пункту может помочь IUIAutomation

    Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 14:18 13-01-2022 | Исправлено: iglezz, 14:19 13-01-2022
    SharkyEXE

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте
    Прошу прощения, что я к Вам обращаюсь напрямую
    Я нашел скрипт
    Но при запуске выдает ошибку
    https://cloud.mail.ru/public/mS7S/ZvWJXebTf
    Пожалуйста, поправьте скрипт, чтобы он работал
    Хочется эту версию, она самая простая в коде для понимания

    Цитата:
     
    #include <A3LListView.au3>
    #include <GUIConstants.au3>
    #Include <GuiListView.au3>
    #include <File.au3>
     
    $guiwindow = GUICreate("Window Selection", 350, 150)
    $font = "Arial Bold"
     
    $LoadB = GUICtrlCreateButton(" Load ", 5, 123)
    $SaveB = GUICtrlCreateButton(" Save ", 45, 123)
    GUICtrlSetFont(-1, 8.5, 400, -1, $font)
    $refreshbutton = GUICtrlCreateButton("Refresh", 100, 123, 60, 25)
    GUICtrlSetFont(-1, 8.5, 400, -1, $font)
    $nListview = GUICtrlCreateListView(" Title|State ", 0, 0, 350, 120)
    GUICtrlSendMsg($nListview, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($nListview, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
     
    RefreshWidth()
    Func RefreshWidth()
        _GUICtrlListViewSetColumnWidth($nListview,1,$LVSCW_AUTOSIZE_USEHEADER)
        _GUICtrlListViewSetColumnWidth($nListview,1,_GUICtrlListViewGetColumnWidth ($nListview,1)-2)
    EndFunc
     
    ListWindows()
    LoadInis() ; only that one visible in ListView
     
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_Event_Close
                GUIDelete($guiwindow)
                Exit
            Case $msg = $LoadB
                Restore()
                ContinueLoop
            Case $msg = $SaveB
                Save()
                ListWindows()
                LoadInis()
                ContinueLoop
            Case $msg = $refreshbutton
                ListWindows()
                LoadInis()
        EndSelect
    WEnd
     
    Exit
     
     
     
    Func ListWindows()
        GUISetState(@SW_SHOW)
        _GUICtrlListViewDeleteAllItems($nListview)
        $aWindows = WinList("[CLASS:CabinetWClass]")         ; To remove visible windows take out 'IsVisible' function.
        For $i = 1 To $aWindows[0][0]
     
    ;~   MsgBox(0, 0, "You choose: " & ControlGetText ($aWindows[$i][0], "", "SysListView321"))
            If $aWindows[$i][0] <> "" And ControlGetText ($aWindows[$i][0], "", "SysListView321") = "FolderView" Then
                GUICtrlCreateListViewItem($aWindows[$i][0], $nListview)
            EndIf
        Next
        GUICtrlCreateListViewItem("Program Manager(Desktop)", $nListview)
        _GUICtrlListViewSetColumnWidth($nListview, 0, $LVSCW_AUTOSIZE)
       
    EndFunc   ;==>ListWindows
     
     
    Func LoadInis()
       
        $FileList =_FileListToArray(@ScriptDir & "\WindowsPos","*.ini")
        If @error <> 0 Then
            If @error = 1 Then DirCreate ( @ScriptDir & "\WindowsPos" )
            Return -1
        EndIf
     
        For $i = 0 To _GUICtrlListViewGetItemCount ($nListview)-1
            $name = _GUICtrlListViewGetItemText ( $nListview, $i ,0)
            If @error <> 0 Then Return False
            $Load = LoadIni($name,$i)
            If $Load Then
                _GUICtrlListViewSetItemText ( $nListview, $i, 1, $Load )
            EndIf
        Next
     
        RefreshWidth()
    EndFunc
     
     
     
    Func LoadIni($name,$listnr)
     
        Dim $PosList[1][3]
     
        If Not FileExists(@ScriptDir & "\WindowsPos\"&$name&".ini") Then Return False ; keine Ini gefunden
        $IniSec = IniReadSection (@ScriptDir & "\WindowsPos\"&$name&".ini","Positions by Name")
        If @error=1 Then
            Return "Error in ini" ; ini gefunden aber fehlerhaft
        EndIf
     
        Return "Positions found"
     
    EndFunc
     
    Func Restore()
        $winname = _GUICtrlListViewGetItemText ( $nListview, -1 ,0)    
        If $winname = "Program Manager(Desktop)" Then
            $handle = ControlGetHandle("Program Manager", "", "SysListView321")
        Else
            $handle = ControlGetHandle($winname, "", "SysListView321")
        EndIf
        _ListView_BeginUpdate ($handle)
     
        For $i = 0 To _ListView_GetItemCount ($handle)
            $name = _ListView_GetItemText ($handle, $i)
            $x = IniRead(@ScriptDir & "\WindowsPos\"&$winname&".ini", "Positions by Name", $name & "x", "Unknown")
            $y = IniRead(@ScriptDir & "\WindowsPos\"&$winname&".ini", "Positions by Name", $name & "y", "Unknown")
            
            If $x <> "Unknown" Then
                _ListView_SetItemPosition32 ($handle, $i, $x, $y)
                ConsoleWrite($name &@tab &$handle &@tab& $i &@tab&  $x &@tab&  $y& @crlf)
            EndIf
        Next
        _ListView_EndUpdate ($handle)
    EndFunc   ;==>Restore
     
     
    Func Save()
        $winname = _GUICtrlListViewGetItemText ( $nListview, -1 ,0)
     
        If $winname = "Program Manager(Desktop)" Then
            $handle = ControlGetHandle("Program Manager", "", "SysListView321")
        Else
            $handle = ControlGetHandle($winname, "", "SysListView321")
        EndIf
        
        If @error = 1 Then MsgBox(0,0," Error(ControlGetHandle) : cant get handle")
        $t= MsgBox(4,   "Confirm","Window Name: "&$winname&@CRLF& _
                    "Icon Count: "&_ListView_GetItemCount ($handle)&@CRLF& _
                    "Name of first Icon: "&_ListView_GetItemText($handle, 0)&@CRLF&@CRLF& _
                    "     Do you really want to save?")
        If $t <> 6 Then Return
        _GUICtrlListViewSetItemText ( $nListview, _GUICtrlListViewGetCurSel ($nListview), 1, "saving..." )
        FileDelete(@ScriptDir & "\WindowsPos\"&$winname&".ini")
        For $i = 0 To _ListView_GetItemCount ($handle)
            $pos = _ListView_GetItemPosition ($handle, $i)
            $name = _ListView_GetItemText ($handle, $i)
            If $pos[0] = True Then
                IniWrite(@ScriptDir & "\WindowsPos\"&$winname&".ini", "Positions by Name", $name & "x", $pos[0])
                IniWrite(@ScriptDir & "\WindowsPos\"&$winname&".ini", "Positions by Name", $name & "y", $pos[1])
            EndIf
        Next
        _GUICtrlListViewSetItemText ( $nListview, _GUICtrlListViewGetCurSel ($nListview), 1, "done" )
        RefreshWidth()
        Sleep(1500)
    EndFunc   ;==>Save
     

    Спасибо.

    Всего записей: 354 | Зарегистр. 25-01-2009 | Отправлено: 22:48 14-01-2022
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rex2701,
    Цитата:
    При появлении стандартного диалога сохранения файла - как узнать его текущий каталог?

    Как вариант: Найти в системе, где программа хранит последний путь и читать его скриптом от туда.
     
    SharkyEXE,
    Цитата:
    #include <A3LListView.au3>

    Этот скрипт использует устаревшую библиотеку, которой нет в актуальной версии AutoIt.
    Пишут, что надо использовать GuiListView.au3, попробуйте заменить.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 16:26 15-01-2022 | Исправлено: ynbIpb, 15:40 16-01-2022
    HORiSi

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    часть, отвечающую за проверяемый урл обновления

    Готовый вариант Yandex Portable + Updater
     
    Попытка полностью отвязаться от необходимости перекомпиляции в случае изменения переменных.
     
    UPD: 20.02.2022 версия 2 BROWSER.au3.
    1. Все важные параметры для BROWSER.EXE теперь в файле BROWSER.iNi (в секции [Envi])
    UPD: 25.02.2022
     
    UPD: 13.03.2022 версия 3 BROWSER.au3 – вычищен и оптимизирован
     
    UPD: 13.03.2022 версия 3 BROWSER.iNi – вычищен и оптимизирован
     
     
     
    2. Если файл BROWSER.iNi не существует, то будет создан в кодировке UTF-8 (по кодировке скрипта)
    3. Качалка (wget.exe) и распаковка (7za.exe) обновления  должны быть в папке Utils. Если ничего не произошло, вероятно Яндекс запаковал новой версией 7za. Скачать 7z2107-extra.7z.
    4. DLTeDiR.txt - список для удаления скриптом лишних папок. Должен лежать в Utils\
    5. DLTeFil.txt - список для удаления скриптом лишних файлов. Должен лежать в Utils\
    6. Если в оригинальном yandex.exe уберут или переименуют папку Browser-bin - сделать тоже с переменной в INI.
     
    P.S. раскрасить скриптом не удалось
    P.S. P.S. по неведомой причине Aut2Exe начал выдавать ошибку открытия Date.au3. Компилировал SciTE – поэтому двойные директивы
    P.S. P.S. P.S. UPD: 04.06.2022 неприятная особенность последних сборок – Яндекс каким-то образом зашил проверку, скачку и установку втихую. Т.е. теперь когда portable обновляется, то через некоторое количество запусков Яндекс.Браузер устанавливает полное приложение. Делает
    ТЕМП(Ы)
    в папке юзера
    где пока смог обнаружить остатки файлов. Уверен что какой-то ключ внутри ключевой dll генерирует запрос и загрузку. Теперь всё это надо вычистить скриптом. Гуру – поможете решить задачу?

    Всего записей: 162 | Зарегистр. 24-05-2006 | Отправлено: 17:53 20-02-2022 | Исправлено: HORiSi, 11:36 04-06-2022
    SharkyEXE

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем здравствуйте
     
    Пожалуйста, помогите
     
    Возможно или нет создать код для обнаружения
     
    Одиночное нажатие клавиши - На клавиатуре нажата кнопка один раз
     
    Двойное нажатие клавиши - На клавиатуре быстро дважды нажата кнопка
     
    Длительное нажатие клавиши - На клавиатуре я нажал и удерживаю кнопку

    Всего записей: 354 | Зарегистр. 25-01-2009 | Отправлено: 10:02 10-07-2022
    Fom64

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SharkyEXE
    Глянь _IsPressed (UDF, Misc.au3) ну и таймер какойнидь к циклу прикрути

    Всего записей: 262 | Зарегистр. 26-11-2010 | Отправлено: 17:28 10-07-2022
    SharkyEXE

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fom64
     
    Здравствуйте
     
    Со стороны все легко и просто, лично я не профессионал, если у Вас есть желание - помогите готовым 100%но рабочим кодом
     
    Получится у Вас  Вам спасибо, если у Вас не получится 100%но рабочего способа - я тем более самостоятельно не осилю
     
    Извините

    Всего записей: 354 | Зарегистр. 25-01-2009 | Отправлено: 18:59 10-07-2022
    Fom64

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SharkyEXE

    Цитата:
    лично я не профессионал, если у Вас есть желание - помогите готовым 100%но рабочим кодом

    Дык это тебе сюда

    Всего записей: 262 | Зарегистр. 26-11-2010 | Отправлено: 19:52 10-07-2022
    SharkyEXE

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fom64
     
    Спасибо

    Всего записей: 354 | Зарегистр. 25-01-2009 | Отправлено: 19:56 10-07-2022 | Исправлено: SharkyEXE, 20:10 10-07-2022
    Egor2020

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В 32-битных версиях AutoIt 3.3.8.1 и выше, установленных на 64-битную Windows 10 21H2, не срабатывает вот этот код для отключения перенаправления папки System32 в SysWOW64:

    Код:
    DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)
    Run(@SystemDir & "\SnippingTool.exe")

    Перенаправление якобы отключается, но значение макроса @SystemDir по-прежнему остается равным SysWOW64. В 32-битной версии AutoIt 3.2.12.1 на 64-битной Windows 10 21H2 данного бага нет и перенаправление отключается корректно.
    Можно ли как-нибудь исправить данный баг применительно к 32-битным версиям AutoIt 3.3.8.1 и выше на 64-битных версиях Windows? Ибо мне необходимо написать скрипт, который будет работать только на Windows NT 5.x (2000, XP, 2003) и который будет проверять версию файла ядра Windows NT ntoskrnl.exe (в 64-битных версиях Windows данный файл есть в папке System32, но его нет в папке SysWOW64). Чтобы скомпилированный скрипт не смог запуститься на Windows Vista/7/8/8.1/10/11 даже в режимах совместимости с Windows 2000/XP/2003.

    Всего записей: 1726 | Зарегистр. 01-03-2020 | Отправлено: 16:43 22-07-2022 | Исправлено: Egor2020, 16:56 22-07-2022
    Fom64

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Egor2020

    Цитата:
    ntoskrnl.exe (в 64-битных версиях Windows данный файл есть в папке System32, но его нет в папке SysWOW64

    Тогда зачем тебе @SystemDir, напиши просто путь @path=@WindowsDir & "\System32\ntoskrnl.exe"
    Ну можно поиграться с @OSArch и @OSVersion, но смысл усложнять)

    Всего записей: 262 | Зарегистр. 26-11-2010 | Отправлено: 17:01 22-07-2022 | Исправлено: Fom64, 17:03 22-07-2022
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Egor2020

    Код:
    #include <FileConstants.au3>
    $sNtoskrnl_exe = @SystemDir & "\ntoskrnl.exe" ; переменная для хранения пути к ntoskrnl.exe
    If @OSArch = "X64" Then
        $sNtoskrnl_exe = @WindowsDir & "\System32\ntoskrnl.exe" ; если x64, то путь такой.
    EndIf
    $sNtosVer = FileGetVersion ($sNtoskrnl_exe, $FV_FILEVERSION)
    MsgBox (0, "", "Архитектура: "&@OSArch&@CRLF&"ОС: "&@OSVersion&@CRLF&"Путь: "&$sNtoskrnl_exe&@CRLF&"Версия: "&$sNtosVer)

    Это конечно всё избыточно. Проще по умолчанию @WindowsDir использовать.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 10:07 26-07-2022 | Исправлено: ynbIpb, 16:20 26-07-2022
    Baltazar500



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток. Подскажите как мне такую конструкцию Подробнее... объединить с такой Подробнее... Нужно чтобы и клики по иконке в трее обрабатывались и чтобы при закрытии процесса скрипт схлопывался. Пока выходит либо первое, либо второе. Скрестить ежа с ужом пока не выходит.

    Всего записей: 2108 | Зарегистр. 19-09-2011 | Отправлено: 15:13 31-08-2022 | Исправлено: Baltazar500, 15:14 31-08-2022
    Andrey_A_A



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Baltazar500

    Код:
    While 1
      Sleep(100)
      If 0=ProcessExists($PID)Then Exit
    WEnd

    Всего записей: 1391 | Зарегистр. 15-08-2011 | Отправлено: 15:40 31-08-2022
    Baltazar500



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Andrey_A_A, и куда этот код воткнуть ? Если я втыкаю перед выполнением "Example()", то while с if работает, вот только отваливается обработка работы иконки в трее, равно как и сама иконка. Если воткнуть его в конец, то он ясен пень работать не будет (равно как если запихнуть выполнение "Example()" в while перед if). Собственно история всё та же, что и у меня. Работает либо то, либо то.

    Всего записей: 2108 | Зарегистр. 19-09-2011 | Отправлено: 11:11 04-09-2022
    Andrey_A_A



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Baltazar500

    Код:
    #NoTrayIcon
    #include <MsgBoxConstants.au3>
    #include <StringConstants.au3>
    #include <TrayConstants.au3>
     
    Opt('TrayMenuMode',3)
    Opt('TrayOnEventMode',1)
     
    Global $PID=Run(@ComSpec&'/c '&@ScriptDir&'\test.bat','',@SW_HIDE)
     
    Example()
     
    Func Example()
     TrayCreateItem("Exit")
     TrayItemSetOnEvent(-1, "ExitScript")
     TraySetOnEvent($TRAY_EVENT_SECONDARYUP, "TrayEvent")
     TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "TrayEvent")
     TraySetState($TRAY_ICONSTATE_SHOW)
     While 1
      Sleep(100)
      If 0=ProcessExists($PID)Then Exit
     WEnd
    EndFunc
     
    Func TrayEvent()
      Switch @TRAY_ID
        Case $TRAY_EVENT_PRIMARYDOWN
          ProcessClose($PID)
        Case $TRAY_EVENT_SECONDARYUP
          ProcessClose($PID)
      EndSwitch
    EndFunc
     
    Func ExitScript()
      Exit
    EndFunc

    Всего записей: 1391 | Зарегистр. 15-08-2011 | Отправлено: 11:45 04-09-2022 | Исправлено: Andrey_A_A, 15:51 09-09-2022
    Baltazar500



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Andrey_A_A, спасибо, работает. Правда с небольшой поправкой '/c' на ' /c ' (это на случай, если кто решит использовать данный код в дальнейшем)
     
    p.s. А $PID в Global - переменную обязательно было загонять ? Или просто по привычке ?)))

    Всего записей: 2108 | Зарегистр. 19-09-2011 | Отправлено: 15:24 09-09-2022
    Andrey_A_A



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Цитата:
    с небольшой поправкой

    Я поправил код

    Цитата:
    переменную обязательно было загонять

    Это не привычка - это правило, у меня, к примеру, скрипт TCIMG.au3 состоит из 20 файлов, 4000 функций, 70.000 строк - и без точного разграничения переменных на глобальные и локальные будет барак. Если переменная где-то объявлена и данные используются в других функциях - это глобальная переменная, если только внутри функции, то локальная. В данном примере это неважно, но лучше точное разграничение переменных...

    Всего записей: 1391 | Зарегистр. 15-08-2011 | Отправлено: 16:07 09-09-2022 | Исправлено: Andrey_A_A, 16:09 09-09-2022
    Egor2020

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    На Windows XP (как SP2, так и SP3) утилита Au3Info.exe из состава недавно вышедшей версии AutoIt 3.3.16.1 вылетает с этой ошибкой при попытке выбрать любое окно или элемент интерфейса:

    В утилите Au3Info.exe из состава предыдущей версии AutoIt 3.3.16.0 подобного вылета под Windows XP нет.

    Всего записей: 1726 | Зарегистр. 01-03-2020 | Отправлено: 11:07 18-10-2022 | Исправлено: Egor2020, 11:10 18-10-2022
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 4)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru