Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Autorun
Goto page Previous  1, 2, 3 ... 166, 167, 168, 169, 170, 171  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Orion9



Joined: 01 Jan 2024
Posts: 618

Post (Separately) Posted: Fri Jan 17, 2025 00:21    Post subject: Reply with quote

AkulaBig wrote:
Не переключаюсь. просто к основной панели добавляю ПП

Шутите? )

У вас обычная панель, которая переключается с главной. Единственное отличие - она похожа на главную (основную) панель, поскольку и была создана на её основе.

Кстати, для создания такой панели необязательно было использовать TCIMG, можно было просто скопировать основную панель и переименовать ее в User.bar (например в vbs-скрипте или bat-файле), а затем вызывать её пользовательской командой и накидывать кнопок. На Autorun можно сделать такое через ShellExec:
Code:
Func CopyFile(Source, Target, Delete = true)
   If Delete Then
      ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% "/c del /f /q ""%Target%"""   
      If FileExist(Target) Then   
         ShowDarkHint("Ошибка удаления " & Target, 0)
         Return false
      Endif
   EndIf   
   ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% '/c copy /y /v "%Source%" "%Target%"' 
   If Not FileExist(Target) Then   
      ShowDarkHint("Ошибка копирования " & Target, 0)
      Return false
   Endif
   Return true
EndFunc

Основная функция может выглядеть так:
Code:
# Shift + F12
SetHotkeyAction /K:S /H:F12 CopyMainBar

Func CopyMainBar()
   Local main = %COMMANDER_PATH% & "\Bars\Main.bar"
   Local user = "D:\Temp\User.bar"
   If CopyFile(main, user) Then
      CommandExec("em_open_bar_path", user)
      ShowDarkHint("Панель пользователя загружена")     
   EndIf   
EndFunc

Разумеется, функциональная клавиша здесь только для примера, а пути к файлам необходимо указывать или передавать согласно поставленной задаче.

Кроме этого, сейчас чтобы вернуться на главную панель (т.е. осуществить обратное переключение), вам приходится выходить из ТС, что, на мой взгляд, является еще одним лишним шагом (помимо того, что панель User.bar приходится выбирать вручную в каталоге).

В самом простом варианте можно просто создать две пользовательские команды и повесить их на горячие клавиши: одна для вызова главной панели, другая для вызова User.bar. Но оставим это простым пользователям. Мы с вами в теме "Autorun", где каждый может стать Творцом и Корректором косяков Гислера Mr. Green Потому и делать мы будем красиво ))
Code:
# F12
SetHotkeyAction /H:F12 MainUserBar

Global BarNum = 1

Func MainUserBar()
   Local bar, pinned = false
   BarNum += 1
   If BarNum > 2 Then BarNum = 1
   If BarNum = 1 Then
      CommandExec("em_open_bar", "Main.bar")
      Return     
   Else
      bar = "D:\Temp\User.bar"
      If Not FileExist(bar) Then
         ShowHint("Не найден: " & bar)
          BarNum -= 1
         Return   
      EndIf       
   EndIf
   CommandExec("em_open_bar_path", bar)
   If BarNum = 1 Then Return
   Sleep(750)
   If IsPressed(0x11) Then
      pinned = true
      ShowDarkHint("Панель пользователя закреплена", 750)
      Return
   EndIf
   Sleep(3000)
   If BarNum = 2 Then RunThread MainUserBar
EndFunc

Цикличное переключение панелей по F12. Пользовательская панель открывается только на 3 секунды, потом сворачивается и дает вернуться главной (удобно, если нужно запустить что-то из личных кнопок всего один раз; интервал можно изменить). Если сразу после открытия пользовательской панели нажать Ctrl, панель закрепится на экране до конца сессии. Если нужно вернуться на главную панель, перезапускать ТС необязательно: достаточно просто еще нажать раз F12 - и всё пойдет по кругу ))

P.S. Это был лишь пример, но вы можете серьезно развить его и адаптировать в своих целях. Можете, например, более продвинутый поиск User.bar сделать по списку, или учесть то, что функция будет запускаться на "чужом" компьютере, где пользователю нужна будет другая панель, или вообще не будет нужна никакая. Вариантов много.

Добавлено спустя 5 минут:

Code:
[em_open_bar]
cmd=OPENBAR
param=%|COMMANDER_PATH|\Bars\%A0

[em_open_bar_path]
cmd=OPENBAR
param=%A0
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 169

Post (Separately) Posted: Sat Jan 18, 2025 22:14    Post subject: Reply with quote

Orion9 wrote:

С колонками пользователя так и не удалось запустить в ТС х64?
Бомбическая задумка. Очень хочется увидеть ее в своей сборке.
А может другим каким-нибудь путем пойти? Через скрипты можно что-то замутить?
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 618

Post (Separately) Posted: Sun Jan 19, 2025 14:00    Post subject: Reply with quote

AkulaBig wrote:
С колонками пользователя так и не удалось запустить в ТС х64?

К сожалению, пока не удалось. Loopback, посмотрел в чём может быть причина: оказалось, это галюны самого TC x64 - он тупо "гасит" подсказку клавишами-модификаторами и не даёт ей появиться.
AkulaBig wrote:
А может другим каким-нибудь путем пойти? Через скрипты можно что-то замутить?

Пока остается только "лочить" её через переменную, что-то другое придумать мне не удалось. Недавно я собирал все скрипты, которые накопились за почти год использования Autorun, среди них есть и тот, что завязан на клоноки:

 Hidden text

Сборкой TC это, конечно, не назовешь, но для тестов - самый раз. Да и не по силам мне целая сборка. Одно дело "ковыряться" в скриптах в свое удовольствие, находить какие-то интересные решения и делиться ими на форуме, и совсем другое дело - браться за официальную и публичную сборку, которая должна уметь работать в рамках любого сценария использования (разные системы, настройки, пути, права, разрешения экрана, dpi, масштабирование и прочее, прочее, прочее...). Именно поэтому я очень ценю и уважаю труд сборщиков. Какая бы сборка ни была - в ней можно всегда найти что-то интересное.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 169

Post (Separately) Posted: Sun Jan 19, 2025 15:48    Post subject: Reply with quote

Orion9 wrote:
Недавно я собирал все скрипты

Я конечно-же скачал вашу сборку сразу-же. Но в ней тоже ТС х64 не работает. Ладно, будем думать. Мне не обязательно, чтобы через Ctrl инфа MediaInfo открывалась. Но вы-же ранее писали, что даже в функцию Hint входа нет.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 618

Post (Separately) Posted: Sun Jan 19, 2025 19:49    Post subject: Reply with quote

AkulaBig wrote:
Но вы-же ранее писали, что даже в функцию Hint входа нет.

Как выяснилось - есть. Проверить это можно экранной клавиатурой, где все комбинации работают. Autorun тут ни при делах, это очередной глюк TC x64.
AkulaBig wrote:
Мне не обязательно, чтобы через Ctrl инфа MediaInfo открывалась.

Ну, там сейчас не только MediaInfo и прочие консольные утилиты. Главная фишка сейчас - возможность прикрепить к подсказке любые wdx-плагины и их сочетания, что может быть удобным, например, при работе или тестировании скриптов в WinScriptAdv. К тому же, CapsLock всё-таки работает в ТС х64 как-никак, а он бывает гораздо удобнее одиночного вызова с удержанием клавиш-модификаторов. И универсальность MediaInfo тоже сейчас оказалась как никогда кстати, зря я в свое время упрекал автора, что он увлёкся поддержкой слишком большого формата файлов, которые, на первый взгляд, не имеют никакого отношения к аудио и видео.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 169

Post (Separately) Posted: Sun Jan 19, 2025 23:04    Post subject: Reply with quote

Orion9 wrote:
Главная фишка сейчас - возможность прикрепить к подсказке любые wdx-плагины и их сочетания

Дак для этого Autorun не нужен.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 618

Post (Separately) Posted: Mon Jan 20, 2025 00:19    Post subject: Reply with quote

AkulaBig wrote:
Дак для этого Autorun не нужен.

Может, и не нужен, всё зависит от конкретных задач. Кто-то скажет, что ему и подсказка не нужна для для таких дел, и будет в чем-то прав - наборы колонок ведь никто не отменял )

Где-то в середине февраля у меня будет неплохое окно, надо будет собрать все последние скрипты, которые были в теме, и оформить в новый архив. Число строк кода на Autorun перевалило за 5000 Shocked Но там еще надо чистку провести, а тем временем от утилиты TCASwitcher.exe я уже отказался в пользу скриптов )
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 169

Post (Separately) Posted: Mon Jan 20, 2025 09:25    Post subject: Reply with quote

Orion9 wrote:
тем временем от утилиты TCASwitcher.exe я уже отказался в пользу скриптов )

А я ей никогда не пользовался Very Happy
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 618

Post (Separately) Posted: Mon Jan 20, 2025 14:04    Post subject: Reply with quote

AkulaBig wrote:
А я ей никогда не пользовался Very Happy

А зачем же она у вас в сборке тогда? Laughing

Шутки шутками, а внутренние ассоциации вполне могут пригодиться. Это классный функционал, но у него есть недостатки: не очень удобный интерфейс и необходимость "прокачки" секции [Associations] для комфортного использования. Мало кто станет делать индивидуальное сопоставление расширений, но только так можно извлечь хоть какую-то пользу.

Вот и у вас в сборке полноценно расставлена только SumatraPDF, а на IrfanView, как я понимаю, вы уже поленились ))

А ведь могли бы сделать что-то вроде:
Code:
Filter10=*.b3d
Filter10.icon=%COMMANDER_PATH%\Icons\IrfanView.dll,036
Filter10_open=""%COMMANDER_PATH%\Plugins\wlx\TCIrfanView\IrfanView\i_view32.exe" "%1""
Filter11=*.bmp
Filter11.icon=%COMMANDER_PATH%\Icons\IrfanView.dll,000
Filter11_open=""%COMMANDER_PATH%\Plugins\wlx\TCIrfanView\IrfanView\i_view32.exe" "%1""
Filter12=*.cam
Filter12.icon=%COMMANDER_PATH%\Icons\IrfanView.dll,001
Filter12_open=""%COMMANDER_PATH%\Plugins\wlx\TCIrfanView\IrfanView\i_view32.exe" "%1""
Filter13=*.clp
Filter13.icon=%COMMANDER_PATH%\Icons\IrfanView.dll,002
Filter13_open=""%COMMANDER_PATH%\Plugins\wlx\TCIrfanView\IrfanView\i_view32.exe" "%1""

Или перспектива "возиться " руками с десятками расширений вас напугала? ) А как вы хотели? По-другому ведь красиво не бывает - иногда нужно и руками поработать.) Главное не забывать про мудрый совет Николая Степановича "Глаза больших дел боятся, но руки-то делают" Mr. Green Выпил кружку кофе и вперёд - что там сотни расширений Mr. Green

Но попробуем пойти другим путём. В IrfanView есть библиотека Icons.dll в папке плагинов, я попробовал сделать на неё "map-файл" для дальнейшего удобства:
 Hidden text

Тут пока без "фокусов": просто руками сопоставил выгруженные .ico, что заняло буквально несколько минут. Но теперь подключаем Autorun:
Code:
# Alt + "["
SetHotkeyAction /K:A /V:219 IconMapTest 0

Func IconMapTest(lParam)
   Local map = %COMMANDER_PATH% & "\Icons\IrfanView.map", _
         lib = '%COMMANDER_PATH%\Icons\IrfanView.dll', _
         cmd = '""%COMMANDER_PATH%\Plugins\wlx\TCIrfanView\IrfanView\i_view32.exe" "%1""', _
         idx = 10
   AssocIconsMap(map, idx, lib, cmd)
EndFunc

Func AssocIconsMap(MapFile, StartIdx, IconLib, CmdOpen)
   Local out, ext, idx
   If Not FileExist(MapFile) Then   
      ShowHint("Не найден " & MapFile)
      Return
   Endif
   ProcessExecGetOutput out %COMSPEC% '/c type "%MapFile%"' 
   Local aMap = List(), j
   aMap.Text = out
   out = ""
   For j = 0 To aMap.Count - 1
       ext = StrPart(aMap[j], "=", 1)
       idx = StrPart(aMap[j], "=", 2)
       out &= auCRLF & "Filter" & StartIdx + j & "=*." & ext
       out &= auCRLF & "Filter" & StartIdx + j & ".icon=" & IconLib & ","& idx
       out &= auCRLF & "Filter" & StartIdx + j & "_open=" & CmdOpen             
   Next
   ClipPut(out)
   ShowHint("Скопировано в буфер.")
EndFunc

Запускаем скрипт, и получаем в буфере:
 Hidden text

Вот это другое дело. Индекс фильтра можно менять, как и команду открытия и путь к библиотеке.

 P.S.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 169

Post (Separately) Posted: Mon Jan 20, 2025 15:11    Post subject: Reply with quote

Orion9 wrote:

А зачем же она у вас в сборке тогда? Laughing

Вы меня с кем-то путаете.
Orion9 wrote:

Вот и у вас в сборке полноценно расставлена только SumatraPDF, а на IrfanView, как я понимаю, вы уже поленились ))

Опять вы меня с кем-то путаете. У меня Ирфан и другие полноценно прописаны. Просто для Ирфан не требуется прописка каждого расширения отдельно. Он поддерживает обработку иконок и достаточно расширения прописать гуртом, чтобы Ирфан показывал для каждого свою иконку.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 618

Post (Separately) Posted: Tue Jan 21, 2025 00:19    Post subject: Reply with quote

AkulaBig wrote:
Вы меня с кем-то путаете.

И то правда.) Почему-то был уверен, что вы пользуетесь этой утилитой, да еще и настолько, что проверить не удосужился Confused Что ж, признаю свой зашквар - бывает )) Вероятно то, что файл Associations.ini у вас вынесен ридеректом в отдельный каталог совместно с другими ini-файлами, и ввело меня в заблуждение, но это слабое оправдание в данном случае.
AkulaBig wrote:
У меня Ирфан и другие полноценно прописаны.

А зачем вам Ирфан во внутренних ассоциациях, в таком случае? Не то, чтобы я отрицал подобное использование, но мне кажется, вы некоторую путаницу создаете. Допустим, пользователь поставит ACDSee, и все значки у него в ТС будут от ACDSee, а запускаться будет ваш IrfanView. При этом, если пользователь никогда не слышал о внутренних ассоциациях, ему еще изрядно "попарится" придется, прежде чем он настроит всё под себя. Такие утилиты, как TCASwitcher, как раз позволяют в один клик отключить все внутренние ассоциации, а при необходимости - включить их обратно. При этом "внутренние", ИМХО, должны быть именно "внутренними", т.е. со всеми своими значками. Если пользователь, например, установил в систему ACDSee, то при включении внутренних ассоциаций он должен видить значки IrfanView, а при выключении - значки ACDSee. Я себе это так представлял.

Засёк время: ровно 15 минут у меня ушло, чтобы сделать разметку PotPlayer.dll:

 Hidden text

Добавим к нему IrfanView:

 Hidden text

Полученный файл можно сохранить в Associations.ini и опробовать на чистом Тотале (пути к библиотекам, конечно, должны быть правильными). На чистом ТС всё влёт подхватилось и корректно отображается. Теперь можно просто запустить TCASwitcher прямо из каталога и посмотреть, как отключаются и включаются иконки, а вместе с ними и ассоциации.

P.S. Кстати, мне понравилась ваша идея с панелью пользователя и добавлением в "хвост" основной панели дополнительных кнопок. Хочу найти ей применение в своем ТС, поэтому изменил чуть-чуть предыдущий пример, но все-равно он пока еще в режиме тестов:
 Hidden text
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 169

Post (Separately) Posted: Tue Jan 21, 2025 06:32    Post subject: Reply with quote

Orion9 wrote:

Допустим, пользователь поставит ACDSee, и все значки у него в ТС будут от ACDSee, а запускаться будет ваш IrfanView.

Просто я об этом не думал. Я-то внешние ассоциации делаю на Ирфан и другие прожки внутри сборки. На которых основаны мои плагины. И казалось-бы зачем пользователю моей сборки устанавливать ACDSee. Но может быть вы и правы. Кто-то ведь пользуется сборками с 10-ю браузерами. Подумаю.
Orion9 wrote:

Добавим к нему IrfanView:

Я все-же не пойму, зачем вы Ирфан разбираете по значкам, когда он прекрасно работает с одной строкой.
Orion9 wrote:

Засёк время: ровно 15 минут у меня ушло, чтобы сделать разметку PotPlayer.dll:

Для меня внутренние - это которые находятся внутри моей сборки. А в моей сборке PotPlayer никогда не будет. Над MPC еще как-то можно подумать. Кстати, я еще немного разобрался с ним. Оказывается в него кодеки вшиты, даже если еще и наружные LAV-фильтры используются. Вот найти-бы проигрыватель, который полностью-бы можно было натравить на внешние кодеки, причем в портабельном режиме. А то делать масло масляное совершенно не хочется, а иметь портабельную сборку хочется. А плеер ТС только LAV подключает.
Orion9 wrote:

P.S. Кстати, мне понравилась ваша идея с панелью пользователя и добавлением в "хвост" основной панели дополнительных кнопок.

Вообще идея отключения ее без перезагрузки не лишена смысла. Но именно для ПП, лежащей снаружи сборки. То-есть не стандартная подмена одной панели другой. Но с этим есть проблемы. Так что надо думать, как это сделать.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 618

Post (Separately) Posted: Tue Jan 21, 2025 14:05    Post subject: Reply with quote

AkulaBig wrote:
Я все-же не пойму, зачем вы Ирфан разбираете по значкам, когда он прекрасно работает с одной строкой.

Плюсы такого разбора очевидны: каждый значок можно индивидуально назначить. Мне, например, не нравятся некоторые "салатовые" значки IrfanView, поэтому значительная часть значков у меня берется из других библиотек, например из FSView.dll или той же ACDSee.dll. Конечно, такое сопоставление придется делать вручную, но зато на панелях ТС будут только те значки, которые вам нравятся. Более того, при простом копировании папки ТС, именно благодаря тому, что все значки и ассоциации выстроены "внутренне", всё будет работать и отображаться так, как вы привыкли, даже на чистой Windows, где нет никаких просмотрщиков и другого установленного софта.

Map-файл на FSView.dll:
 Hidden text

Доработал код и оформил в виде кнопки:
 Hidden text

 Hidden text

Теперь параметрами операции можно управлять через \Ini\IconsMap.ini. Файл должен существовать:
 Hidden text

AkulaBig wrote:
А в моей сборке PotPlayer никогда не будет...а иметь портабельную сборку хочется.

Именно потому, что раньше в ТС не было своего плеера, я прикручивал к нему PotPlayer. Но и сейчас отказываться от этого не буду - уже привык, что он на борту и со всеми внутренними связями и значками. Кстати, у PotPlayer три библиотеки значков. Связав ассоциации, как на примере выше, можно добиться очень интересного эффекта: простым переименованием или заменой PotPlayer.dll - меняются все значки сразу. Помимо этого, интересного эффекта можно добится, если не указывать прямого пути к плееру, а сделать ассоциацию с переменной окружения, например %COMMANDER_VIDEO%. Теперь достаточно в Autorun менять содержимое этой переменной на лету (или только при запуске), чтобы указывать, кто должен открывать эти типы файлов.

Еще один шикарный эффект. Из справочника по ключам:
Russian.cedf wrote:
Команда ***имя_внутренней_команды позволяет выполнить для файла указанного типа заданную встроенную или пользовательскую команду TC, в т.ч. с параметрами (в последнем случае указывается не только имя команды, но и соответствующий параметр или их набор, причём параметры, содержащие запятую, должны быть взяты в двойные кавычки). Внутренние команды, не начинающиеся с префикса cm_ или em, не требуют при назначении начальных звёздочек (примеры: OPENTABS %1% для TAB-файла, OPENBARMENU %1% для BAR-файла), также для них поддерживаются во внутренних ассоциациях шаблоны-параметры наподобие %P%N.

Раньше у меня была такая ассоциация:
Code:
Filter14=*.dll;*.ocx;*.ax
Filter14_open=""%COMMANDER_EXE%" /S=L:Piclview "%1""
Filter14.icon=*

Но оказывается можно запросто вызывать функцию Autorun по коду:
Code:
Filter14_open=***61005

Это открывает некоторые возможности. Например, можно вызывать действие с клавишей-модификатором:
Code:
RegisterCommand 61005 "AssocDllOpenCmd"

Func AssocDllOpenCmd(lParam)
    If IsPressed(0x5B) Then
       ShowHint("Win")
       Return
    EndIf
    If IsPressed(0x10) Then
       IconsPanel()
    Else
       #SendCommand cm_List
       p = RequestCopyDataInfo("SP")
       n = RequestCopyDataInfo("SN")
       f = p & n
       ShellExec %COMMANDER_EXE% '/S=L:Piclview "%f%""'       
    EndIf
EndFunc

Здесь с зажатым Shift вызывается функция IconsPanel, которая загружает иконки на главную панель, а простой вызов запускает Листер, предподчительно с просмотром иконок, если он есть. Функция IconsPanel:
 Hidden text

AkulaBig wrote:
Но именно для ПП, лежащей снаружи сборки.

Ну, мне-то проще: не нужно заботится о том, чтобы панель никуда не "уплыла" Smile
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 169

Post (Separately) Posted: Wed Jan 22, 2025 12:45    Post subject: Reply with quote

Orion9 wrote:

ТС подкинул очередной сюрприз. CustomFields не обновляются по отработанной схеме. Только через перезагрузку. Пробовал обновить панели командой cm_RereadSource. Не помогает. Нет-ли у вас каких-нибудь соображений по этому поводу?
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 618

Post (Separately) Posted: Wed Jan 22, 2025 17:58    Post subject: Reply with quote

AkulaBig wrote:
ТС подкинул очередной сюрприз.

Это он умеет ))

А если попробовать команды:
Code:
cm_LeftNextCustomView
cm_LeftPrevCustomView

cm_RightNextCustomView
cm_RightPrevCustomView

Есть шанс, что простимулируют коммандера Very Happy

P.S.

Автономный код кнопки для загрузки иконок на главную панель (предыдущий был завязан на другие модули):
 autorun.cfg

 usercmd.ini

 Кнопка

Загрузил себе на панель все 1259 иконок из библиотеки VIM вашей коллекции - Тотал чуть не загнулся. Т.ч. не только он может подкидывать нам сюрпризы, но и мы ему Mr. Green
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 166, 167, 168, 169, 170, 171  Next
Page 167 of 171

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group