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

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

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

gyra (23-01-2020 10:51): AutoIT (Часть 4)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

Widok



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

 
Описание:

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

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


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

  • Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 13:07 01-06-2010 | Исправлено: Maz, 12:29 10-01-2020
    yozhic



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    У меня всё решилось простым копированием папки и назначением ассоциаций из соответствующего диалога. Теперь скрипты запускаются и отрабатывают по двойному клику. Ещё нужно обратить внимание на наличие папки Include с дополнительными функциями в папке AutoIt.

    Всего записей: 2773 | Зарегистр. 20-03-2008 | Отправлено: 13:48 25-09-2013
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yozhic
    Можно подробнее, какая папка куда и с чем ассоциировать? Папку AutoIt3, так понимаю, в \Program Files (x86), а ассоциировать с AutoIt3.exe или AutoIt3_x64.exe?
    Не понимаю, как правильно должны отрабатываться скрипты в х64 системе , имеет ли значение из какого приложения (файловый менеджер, например) запустить скрипт - х32 или х64?

    Всего записей: 6483 | Зарегистр. 28-01-2008 | Отправлено: 15:11 25-09-2013 | Исправлено: Skif_off, 15:12 25-09-2013
    AZJIO



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

    Цитата:
    Замнем для ясности?-))  
    Основная специализация PHP: работа со строками... Разница понятна?-)  
    Хорошо, тогда и я озвучу свою теорию для ясности. Аналоги функций Autoit в Си. Примем за аксиому, что Си предел скорости (хотя может в конкретных случаях конструкция асемблера). То есть передав интерпретируемую конструкцию движку Си можно не сомневаться что он выполнит её со скоростью, превзойти которую уже не возможно. Остаётся слабое место - скорость интерпретации и правильность построения алгоритма. Интерпретатор тоже написано на Си и достаточно быстр (PHP разве быстрее читает интерпретируемый текст), но чтобы исключить потери на интерпретации например можно вызвать рег. выр. в цикле, а можно вызвать рег. выр. так чтобы цикловая обработка заключалась внутри рег. выр.
    например  

    Код:
    For $i = 1 To 5
        $sText=StringRegExpReplace($sText, '^(.*)\\(.*)$', '\1')
    Next
     
    можно рассмотреть как  

    Код:
    $sText=StringRegExpReplace($sText, '^(.*)\\(.*)$', '\1')
    $sText=StringRegExpReplace($sText, '^(.*)\\(.*)$', '\1')
    $sText=StringRegExpReplace($sText, '^(.*)\\(.*)$', '\1')
    $sText=StringRegExpReplace($sText, '^(.*)\\(.*)$', '\1')
    $sText=StringRegExpReplace($sText, '^(.*)\\(.*)$', '\1')
     
    соответственно при цикле на 1000 шагов понятно почему автоит тормозит в цикле. Соответственно надо прередать в движок регексп обработку многострокового файла.
    То есть на интерпретации можно проиграть взависимости от сложности языка и разнообразия интерпретируемых конструкций. Естественно чем их больше, тем больше интерпретатор проверяет вариантов и рекурсивных вложний.
    Ну а самая потеря скорости идет от выбора наихудшего алгоритма, это когда делаются холостые ходы, особенно накладывается этот процент при обработке в цикле. Каждый такой нелепый холостой ход может увеличить скорость в разы. Даже если использовать язык Си можно также проиграть от неправильного алгоритма. Прямой пример рег.выр. при разных вариантах даёт сккорости в 2, 10, 100 разницы, хотя всё выполняется внутренним движком регекспа на Си, то есть интерпретацию можно полностью исключить.
    Ну и каким боком тут "Основная специализация PHP: работа со строками"?
     
    Добавлено:
    Skif_off
    Папка Include должна быть рядом с AutoIt3.exe, чтобы он их видел. А больше никаких файлов не требуется.
    Универсальный AutoIt3.exe (x86), который будет работать на любой ОС. А если хочешь использовать x64, то посмотри в справке "Запуск в 64-битных версиях Windows" чтобы положить соответствующую версию в правильный каталог.
     
    Добавлено:
    Вообщем ложи в System32 но файл соответствующий текущей оси

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 15:45 25-09-2013 | Исправлено: AZJIO, 15:58 25-09-2013
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Понял, спасибо что развеял сомнения Про DllCall/DllStruct помню, папку Include решил не использовать, можно пропустить через Obfuscator, задумка для мелких скриптов - не хочется компилировать, но и держать AutoIt3.exe рядом с каждым тоже нет желания.

    Всего записей: 6483 | Зарегистр. 28-01-2008 | Отправлено: 19:25 25-09-2013
    yozhic



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    В добавление к сказанному AZJIO, ветка файловых ассоциаций здесь HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\ . Проще дважды кликнуть по *.au3, система скажет, что файл неизвестен, выбрать Select a program from a list of installed programs -> OK -> выбрать AutoIt.exe -> галку на Always use the selected program to open this kind of file -> OK. После этого au3 скрипты будут запускаться по двойному клику отовсюду.
    А про месторасположение папки AutoIt, так я вначале второпях откопировал её в My Documents, потом забыл где она, настроил ассоциации и всё работало )) Потом переделал, конечно, теперь она в ProgramFiles.

    Всего записей: 2773 | Зарегистр. 20-03-2008 | Отправлено: 20:19 25-09-2013
    Skif_off

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

    Цитата:
    Проще дважды кликнуть по *.au3

    Мне проще держать один reg-файл и две иконки рядом с дистрибом Для небольших скриптов, с которыми легко можно обойтись без Include.
    По поводу ветки реестра: для файловых ассоциаций обычно упоминают (в тех манах, что видел я) HKLM\Software\Classes для всех и HKCU\Software\Classes для текущего пользователя, с HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts я, честно говоря, так и не разобрался что откуда и что первичнее (обычно ее упоминают в свете восстановления ассоциаций .exe/.lnk или изменения подменю Открыть с помощью). Кстати, инсталлер AutoIT, ЕМНИП, пишет как раз в HKLM\Software\Classes.
     
    По поводу х64 уточню, если вдруг кому придет в голову та же идея: AutoIt3.exe х86 нужно обязательно класть в SysWOW64, иначе из х86 приложений скрипт не запуститься и не будет видно иконку (в файловых менеджерах, например).

    Всего записей: 6483 | Зарегистр. 28-01-2008 | Отправлено: 23:29 26-09-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    Скачай ContMenuFiles и почитай справку в комплекте (запускать прогу от админа). Лучше HKCR использовать, он сам пропишет куда надо. HKCU перекрывает настройки HKLM. "FileExts" влияет, там настройки могут "перебить" настройки в классах при запуске в эксплорере (вроде так), то есть в другом файловом менеджере оно может не работать. Я обычно тот раздел использую для того чтобы прописать несколько приложений на открытие файла в меню "Открыть с помощью".

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 05:43 27-09-2013 | Исправлено: AZJIO, 05:44 27-09-2013
    Skif_off

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

    Цитата:
    Лучше HKCR использовать, он сам пропишет куда надо.

    В случае, если запись о типе файла в HKLM уже есть, изменения будут записаны в HKCU, т.е. только для текущего пользователя. Утрата контроля Хотя, думаю, для большинства пользователей это значение не имеет, программам проще, опять таки. Да и для меня в целом тоже: использовать нескольких пользователей не люблю, сразу в HKLM пишу только на случай фатального повреждения (с крайне низкой вероятностью) текущего профиля и создания нового.

    Всего записей: 6483 | Зарегистр. 28-01-2008 | Отправлено: 11:14 27-09-2013
    DoctorLans

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

    Цитата:
    Вирус точишь?

    Нет, софтварный включатель-выключатель микрофона по горячей клавише на клаве, ввиду отсутствия на микрофоне хардварной клавиши.
     

    Цитата:
    Можно создать прозрачное окно

    Это окно не будет перехватывать фокус и закрывать собой прочие окна? И, например, если в этот момент будет запущена игра в полноэкранном режиме, она не свернётся?

    Всего записей: 248 | Зарегистр. 07-10-2006 | Отправлено: 11:26 27-09-2013
    ndch

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как эмулировать нажатие мультимедийной кнопки
     
    На примере "MUTE".
    Send(0xAD)
    судя по всему не то.
     
    Интересует именно произвольной со своим сканкодом, а не конкретно
    Send("{VOLUME_MUTE}")

    Всего записей: 6517 | Зарегистр. 31-08-2008 | Отправлено: 12:41 27-09-2013 | Исправлено: ndch, 14:41 27-09-2013
    AZJIO



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

    Цитата:
    В случае, если запись о типе файла в HKLM уже есть, изменения будут записаны в HKCU, т.е. только для текущего пользователя.  
    Нет, если пишешь в HKLM, то только туда и пишуться, а не в HKCU. То что это работает для всех это не значит, что оно пишется в HKCU. Если речь о LiveCD, то там понятия HKCR как бы не существует, так как HKCR появляется на этапе загрузки как сумма двух разделов с приоритетом HKCU. Если ты не пишешь данных в HKCU то в реале используется HKLM, но если пользователь имеет свои настройки в HKCU, то чтобы ты не вводил в HKLM, системе будет ровно, потому что есть разделы в HKCU перекрывающие HKLM. Если речь идёт о дефолтных настройках, то конечно HKLM, так как они становлятся сразу умолчальными для всех аккаунтов, а если у аккаунта уже в наличии HKCU данные, то чтобы было не введено в HKLM, всё будет игнорироваться. Если использовать HKCR, то настройки будут вводится в HKLM, а если другие настройки в HKCU перекрывают настройки HKLM, то будет вводится в HKCU. Поэтому я сказал, что лучше в аккаунте вводить в HKCR, чтобы после изменений не задаваться вопросами типа "а что оно не работает".

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 03:48 28-09-2013 | Исправлено: AZJIO, 03:57 28-09-2013
    Skif_off

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

    Цитата:
    Если использовать HKCR, то настройки будут вводится в HKLM, а если другие настройки в HKCU перекрывают настройки HKLM, то будет вводится в HKCU.

    Именно это и имел в виду Прошу прощения, мне стоило выразить мысль четче. В случае с AutoIT (инсталлер пишет в HKLM\Software\Classes) это не проблема - нечему перехватить .au3, если только текстовый редактор какой по наглости, но такие не видел.

    Всего записей: 6483 | Зарегистр. 28-01-2008 | Отправлено: 10:51 28-09-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    Другая формулировка: при чтении HKCR сначала читается HKCU, и если в данных нет, то читается HKLM. При записи сначала проверяется существование параметра в HKCU и если есть, то пишет в HKCU, а если нет, то пишет в HKLM. Кажется это формулировка более точно определяет логику раздела HKCR.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 18:41 28-09-2013
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Нашел время пошариться интернетам, на MSDN заглянул, по чтению получается немного не так: HKCR генерируется при старте системы - берется копия HKLM\Software\Classes и "разбавляется" HKCU\Software\Classes и читается уже HKCR. Но, в общем, этот нюанс значения не имеет. А по записи, кажется, так.
     
    comrades, по поводу запуска в х64:
    нагуглил (случайно) такой скрипт для запуска msconfig от 2010го

    Код:
    $tValue = DllStructCreate('dword')
    If @OSArch = 'X64' Then
        DllCall('kernel32.dll', 'int', 'Wow64DisableWow64FsRedirection', 'ptr', DllStructGetPtr($tValue))
    EndIf
    ShellExecute(@SystemDir & '\msconfig.exe')
    If @OSArch = 'X64' Then
        DllCall('kernel32.dll', 'int', 'Wow64RevertWow64FsRedirection', 'ptr', DllStructGetPtr($tValue))
    EndIf

    и сразу же два вопроса:
    1. В мане

    Код:
    DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)

    в мане, так понимаю, наиболее актуальная инфа и можно не обращать внимание на старый вариант?
    2. В скрипте выше сначала разрешается перенаправление, а после запуска msconfig.exe запрещается, так надо делать и сейчас? Или новый вариант делает перенаправление разово?
    Ссылка на статью MSDN дохлая (и в англоязычной, и в русскоязычной документации).

    Всего записей: 6483 | Зарегистр. 28-01-2008 | Отправлено: 14:45 30-09-2013 | Исправлено: Skif_off, 14:46 30-09-2013
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Skif_off 14:45 30-09-2013
    Цитата:
    в мане, так понимаю, наиболее актуальная инфа и можно не обращать внимание на старый вариант?

    Это не старый вариант, вот описание на MSDN.
     
    Я бы использовал такую конструкцию для запуска приложений:

    Код:
    #AutoIt3Wrapper_UseX64=n
     
    $iRet = _RunEx('msconfig')
     
    Func _RunEx($sFile, $sWorkDir = '', $iState = 0, $iFlags = 0)
        Local $stValue, $iRet, $iError
     
        If @OSArch = 'X64' And @AutoItX64 = 0 Then
            $stValue = DllStructCreate('dword')
            DllCall('kernel32.dll', 'int', 'Wow64DisableWow64FsRedirection', 'ptr', DllStructGetPtr($stValue))
     
            $iRet = Run($sFile, $sWorkDir, $iState, $iFlags)
            $iError = @error
     
            DllCall('kernel32.dll', 'int', 'Wow64RevertWow64FsRedirection', 'ptr', DllStructGetPtr($stValue))
     
            Return SetError($iError, 0, $iRet)
        EndIf
     
        Return Run($sFile, $sWorkDir, $iState, $iFlags)
    EndFunc

     
    Вот как бы правильно отключить перенаправление и вернуть старое значение обратно (на случай если ранее в программе использовалась данная функция)...
     
     
    Добавлено:
    Или может вообще определять в начале скрипта, что запуск делается x86 версии на x64 системе, и сразу отключать перенаправление:
     

    Код:
    #AutoIt3Wrapper_UseX64=n
     
    If @OSArch = 'X64' And @AutoItX64 = 0 Then
        DllCall('kernel32.dll', 'int', 'Wow64DisableWow64FsRedirection', 'int', 1)
    EndIf


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:49 30-09-2013 | Исправлено: ViSiToR, 15:57 30-09-2013
    Skif_off

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

    Цитата:
    описание на MSDN.

    Вот оно:
    Every successful call to the Wow64DisableWow64FsRedirection function must have a matching call to the Wow64RevertWow64FsRedirection function.
    Значит, в конце нужно отключить.
    Функция удобная, спасибо, заберу в загашник.
     
    Не совсем понимаю разницу между

    Код:
    DllCall('kernel32.dll', 'int', 'Wow64DisableWow64FsRedirection', 'int', 1)
     

    и

    Код:
    $stValue = DllStructCreate('dword')
    DllCall('kernel32.dll', 'int', 'Wow64DisableWow64FsRedirection', 'ptr', DllStructGetPtr($stValue))


    Перечитал страницу DllStructCreate, кажется, дошла разница: int и ptr, второй тип будет работать независимо от разрядности скомпилированного скрипта, так?

    Цитата:
    If @OSArch = 'X64' And @AutoItX64 = 0 Then

    Не сообразил добавить проверку разрядности AutoIt на всякий случай, спасибо. Макрос @AutoItX64 будет работать независимо от того, что запущено - скрипт или скомпилированный скрипт х86/х64?
     

    Всего записей: 6483 | Зарегистр. 28-01-2008 | Отправлено: 16:58 30-09-2013 | Исправлено: Skif_off, 17:02 30-09-2013
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Skif_off 16:58 30-09-2013
    Цитата:
    Макрос @AutoItX64 будет работать независимо от того, что запущено - скрипт или скомпилированный скрипт х86/х64?

    В не скомпилированном скрипте проверяется битность AutoIt3.exe (AutoIt3_x64.exe если UseX64=y), а в скомпилированном проверяется собственно сам скрипт.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 17:18 30-09-2013
    AZJIO



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

    Цитата:
    разбавляется
    непонятное для программирования название. Я в справке использовал "зеркало". Копия раздела где? Обычно должен быть файл. Можно принять как линкованный раздел, но такие разделы вроде не сливаются вместе. То есть последняя формулировка достаточно точно определяет, потому что не важно создаётся ли раздел, линкуется ли, но его поведение в точности как я описал.
     
    Добавлено:
    ptr это указатель на структуру в памяти, позволяющий вызываемой функции читать или писать данные в структуру. Это способ обмена данными (параметрами) между скриптом и вызываемой функции из dll.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 19:04 30-09-2013
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Я не программист, к сожалению, всплыло в голове наиболее подходящее по смыслу слово, взял в кавычки

    Цитата:
    ptr это указатель на структуру в памяти, позволяющий вызываемой функции читать или писать данные в структуру. Это способ обмена данными (параметрами) между скриптом и вызываемой функции из dll

    Так понял,  
    DllCall("filename", "int", "namefunc", "ptr", DllStructGetPtr($stValue)) - вызов функции, а
    DllCall("filename", "int", "namefunc", "int", 1) - тоже самое, но применительно к перенаправлению при запуске х64 из х32?
    Прошу прощения, если вопросы откровенно ламерские, не знаю, что почитать, DllStructCreate и DllCall не хватило

    Всего записей: 6483 | Зарегистр. 28-01-2008 | Отправлено: 22:13 30-09-2013 | Исправлено: Skif_off, 22:14 30-09-2013
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, как проверить существание параметра запуска скрипта?
    Два возможных параметра:
    $sFile = $CmdLine[1]
    $sParam = $CmdLine[2]
    Предусмотрел некорректность $CmdLine[2] (возможные значения 1, 2, 3 иначе ошибка), но если он отсутствует вообще, то появляется окно с ошибкой

    Цитата:
    $sParam = $CmdLine[2]
    $sParam = ^ ERROR
    Error: Array variable has incorrect number of subscripts dimension range exceeded

    Не могу ничего подходящего нагуглить, от бессилия дошел до _ArrayPop и IsDeclared, но это, конечно, не то.

    Всего записей: 6483 | Зарегистр. 28-01-2008 | Отправлено: 12:03 03-10-2013
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)
    gyra (23-01-2020 10:51): AutoIT (Часть 4)


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru