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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

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

DmitryFedorov

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Предыдущая часть темы: часть 1
 

 
Notepad++ — это бесплатный редактор текстовых файлов (замена стандартного Блокнота) с поддержкой синтаксиса большого количества языков программирования, ориентирован для работы в операционной системе MS Windows. Этот проект базируется на компоненте Scintilla (очень мощном компоненте для редактирования) написанном на C++ с использованием только Win32 API и STL (что гарантирует максимальную скорость выполнения при минимальном размере программы), распространяется под лицензией GPL.  
 

Переводы на русский
 
  • (полный перевод!) Npp_exe_7.9.5_Ru + Плагины_RU от Dm.Fedorov
  • Русификатор 7.8.9 без сКаКаНиЯ текста от wvxwxvw
  • Notepad++Portable 7.9.1 AkulaBig от 21.11.2020 г.  
  • Как в Notepad++ включить проверку орфографии
     

    ! Проблема с "макинтош"-распознаванием кириллицы в кодировке 1251 (и другим неверным авто-распознаванием, где часть символов отображается кракозябрами) решается снятием галки "Autodetect character encoding" в Preferences|Misc.
    - Если в NP++ до v7.32 ссылка не подчеркивается, нужно применить плагин ScrollPastEOF


    ! Все вопросы и обсуждения по поводу поиска/замены текста задавайте пожалуйста в теме Регулярные выражения
     
    Системные требования, совместимость с Win2K,WinXP
     
    Любое упоминание политических аспектов, не касающихся непосредственного функционирования ПО, в данной теме будет заканчиваться запретом на пост.


  • Всего записей: 1952 | Зарегистр. 19-03-2006 | Отправлено: 01:23 02-12-2015 | Исправлено: MAX63ru, 09:05 20-02-2024
    AZJIO



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

    Цитата:
    Дефолтные настройки не менял, все как было по заводу
    по заводу он поломанный. Надо отключать автоопределение кодировки в настройках, так как он открывает их как "макинтош". Если начнёшь печатать то ещё и смешаешь одно с другим, потом всё переделывать. Автору уже писали, у них там в большинстве всё ровно, а такие редкие случаи и так сойдут. Смотри эта проблема красными буквами описана в шапке.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 14:11 19-09-2019 | Исправлено: AZJIO, 14:12 19-09-2019
    redson



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    есть ли у notepad++ переменная которая указывает на текущий каталог программы, чтобы в конфиге указать не абсалютный путь, а путь относительно текущего каталога программы, например путь к каталогу с темой?
     
    вот пример:
     
     <GUIConfig name="stylerTheme" path=".\themes\Darcula.xml" />
     
    путь к каталогу указал так:
     
    .\themes\Darcula.xml
     
    но это не всегда срабатывает

    Всего записей: 1336 | Зарегистр. 23-04-2007 | Отправлено: 08:08 20-09-2019
    polromserg

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

    Здравствуйте, у меня проблемы с управлением Scintillой в n++ через сообщения. Использую delphi.
     
    Получаю handle скинтиллы через FindWindow и FindWindowEx.
    Пытаюсь передать строку для замены так:
    str:='qwerty'#0;
    sendmessage(hwndScintilla,2170,0, lparam(pchar(str)) );
     
    2170 - это SCI_REPLACESEL. Я не подключаю заголовочные файлы, поэтому использую просто числа вместо констант.
     
    Но вместо переданной строки встаёт вот это:
    https://yadi.sk/i/-Vp5G2gdTIngLA
    Причём при каждом перезапуске n++ и моей программы "это" всегда разное.
     
    А сообщения, возвращающие числа, работают нормально:
    sendmessage(hwndScintilla,2143,0,0 )
    2143 - это SCI_GETSELECTIONSTART.
     
    Как мне передать строку для замены в Scintilla?
     
    Документация отсюда: https://www.scintilla.org/ScintillaDoc.html#SCI_REPLACESEL
    Константы тут: http://freesourcecode.net/cprojects/106750/sourcecode/Scintilla.h

    Всего записей: 28 | Зарегистр. 31-12-2017 | Отправлено: 22:34 20-09-2019
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    polromserg
    Scintilla возвращает указатель на строку. Посмотри справку мой перевод гуглом (или тут), а также посмотри примеры плагов тут или тут. Там ещё нюансы: кодировка текста UTF-8 или ANSI, а также если включен двухоконный режим.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 01:56 21-09-2019
    polromserg

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO, спасибо, но у меня не плагин, а отдельная программа, из которой хочу вставить строку в Scintill-у. Однако проблема гораздо глубже: https://toster.ru/q/668482. Кратко: scintilla не может получить доступ в адресное пространство моей программы (где и лежит строка по переданному указателю).
     
    Решение тут: https://stackoverflow.com/questions/573814/retrieve-text-from-a-scintilla-control-using-sendmessage
    Кратко: внедриться в процесс Scintilla, выделить там память и поместить туда строку.
     
    Даже код скопирую, чтоб не потерялся:

    Код:
    procedure TForm1.Button1Click(Sender: TObject);
    const
      VMFLAGS = PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE;
    var
      Wnd: HWND;
      Len: integer;
      ProcessId, BytesRead: Cardinal;
      ProcessHandle: THandle;
      MemPtr: PChar;
      s: string;
    begin
      Wnd := $30488;
      Len := SendMessage(Wnd, 2183, 0, 0);
      if Len > 0 then begin
        GetWindowThreadProcessId(Wnd, @ProcessId);
        ProcessHandle := OpenProcess(VMFLAGS, FALSE, ProcessId);
        MemPtr := VirtualAllocEx(ProcessHandle, nil, Len + 1,
          MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
        if MemPtr <> nil then try
          SendMessage(Wnd, 2182, Len + 1, integer(MemPtr));
          SetLength(s, Len + 1);
          ReadProcessMemory(ProcessHandle, MemPtr, @s[1], Len + 1, BytesRead);
          SetLength(s, BytesRead);
          Memo1.Lines.Text := s;
        finally
          VirtualFreeEx(ProcessId, MemPtr, Len + 1, MEM_RELEASE);
        end;
      end;
    end;

    Всего записей: 28 | Зарегистр. 31-12-2017 | Отправлено: 19:38 21-09-2019
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    polromserg
    Вообще-то никто никуда не внедряется. Программно это выглядит так: высылаешь сообщение чтобы получить длину текста. Выделяешь память средствами своего языка на величину вставки текста и получаешь указатель на эту область памяти. высылаешь сообщение Scintilla согласно её формату, где указано что ты должен передать указатель, вот и передаешь ей свой указатель, она тебе помещает туда текст. С помощью функции чтения памяти получаешь текст в переменную. Освобождаешь выделенную память. Вот когда получил текст в переменную, вот тогда можешь сказать что текст находится в адресном пространстве твое проги, она сама работает со своими переменными автоматически. А та память по указателю, это способ работы между программами. Любая WinAPI -функция с текстом работает с указателями, потому что не знает ничего о твоей программе, ты ей сливаешь место куда тебе поместить данные, она туда помещает. Это как друг говорит куда тебе семечек насыпать, ты говоришь сыпь в кулёк или подставляешь руку, так и здесь надо дать место откуда ты сможешь забрать.

    Цитата:
    Кратко: scintilla не может получить доступ в адресное пространство моей программы (где и лежит строка по переданному указателю).
    указатель сам даёшь, чтобы знать откуда забрать, scintilla  просто поместит туда.

    Цитата:
    Кратко: внедриться в процесс Scintilla, выделить там память и поместить туда строку.  
    Ни кто никуда не внедряется, память доступна всем. Ты выделяешь память не у Scintilla, не у процесса Scintilla, а просто выделяешь память с компьютере, Windows выделяет память, диспетчер памяти выделяет память.
    Я не совсем понимаю твой код, но функции выделения памяти вот в AutoIt3 - _MemGlobalAlloc, в PureBasic - AllocateMemory, в скриптах js в AkelPad - AkelPad.MemAlloc. Смысл у всех одинаковый. Причём просматривая код js в AkelPad, там даже структуры в памяти читаются не как целиком структура, а как к отдельному месту в структуре. В твоём коде "MemPtr" это и есть указатель, Mem - Memory - память,  Ptr - Pointer - указатель. Тип MemPtr: PChar; видимо P(Pointer ) Char(Сharacter) указатель на символы.
    Для чисел потому указатель не нужен, потому что число имеет стандартизированную ширину, что само помещается в точку вызова, а текст не знаешь какой будет длины. Когда создаёшь внутри своей программы, то движок работы с переменными сам выделяет память и помещает туда текст, но она ничего не знает о том как другая программа работает, под капотом все те же операции с указателем только скрыты от пользователя.
    Кстати, n++ работает со Scintilla аналогично, согласно описанию функций, никакого иного магического доступа нет.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 23:16 21-09-2019 | Исправлено: AZJIO, 23:43 21-09-2019
    polromserg

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

    Цитата:
    Выделяешь память средствами своего языка на величину вставки текста и получаешь указатель на эту область памяти

    Но в VirtualAllocEx указан ProcessHandle нашей scintill-ы. Видимо, в её адресном пространстве выделяется память, потому что если просто выделить память по указателю в моей программе, то память будет в адресном пространстве моей программы, и scintilla туда доступ не получит, даже по переданному указателю. Иначе мой код

    Код:
    str:='qwerty'#0;
    sendmessage(hwndScintilla,2170,0, lparam(pchar(str)) );

    сработал бы.

    Всего записей: 28 | Зарегистр. 31-12-2017 | Отправлено: 06:02 22-09-2019
    AZJIO



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

    Цитата:
    если просто выделить память по указателю в моей программе, то память будет в адресном пространстве моей программы, и scintilla туда доступ не получит, даже по переданному указателю
    Нет. Я с Virtual не приходилось встречаться, но обычное выделение памяти оно ни в чьём адресном пространстве, именно поэтому есть утечки памяти, так как программа выделяет память допустим в цикле, но программист не удосужился её отдать обратно винде, дав сигнал диспетчеру памяти отметить её ненужной, законченой от использования. Программист может ошибиться или вызвать функцию не зная что после её работы нужно запустить функцию освобождения ресурсов и возвращения памяти винде, ведь Winapi функции тоже могут выделять для себя память получив дескриптор на объект, откуда системе знать что объект уже не будет использоваться.
    Самой scintilla без разницы чьё там адресное пространство. Указатель это универсальная вещь, scintilla возвращает в указатель, тут нет понятия может или не может, указатель это число ячейки памяти. Вот у тебя лоток на 10 яиц, ты положил 5 штук, у тебя осталось 5, ты ложишь в 8-ю и 9-ю ячейку 2 яйца, говоришь другу, возми 2 яйца с 8 ячейки или возьми от 4-й ячейки пока не встретишь пустую, он возьмёт 4-ое и 5-ое. Этот способ нуль-терминированная строка, когда данные заканчиваются пустой ячейкой. А если скажешь возьми с 4-й 5шт, то возьмёт с 4-го по 8-й, это способ с указанием длины, когда нуль-терминированная строка сама может оказаться данными (бинарными).
    Ещё раз: указатель не имеет разрешения или не разрешения, он может только отличатся шириной для x86 и x64 систем, но нет никаких свойств, ты даже можешь испортить данные любой проги просто дав указатель на прогу в памяти и scintilla запишет текст в то место где находится твоя прога и она (прога) тут же загнётся.
    Суть диспетчера памяти помечать занятую и свободную память. Когда ты заказал у диспетчера памяти 32кб памяти он возвращает тебе указатель на ту память которую он тебе выделил. Когда ты дашь сигнал освободить память, он пометит это пространство свободным именно 32 кб, и другие проги заказав себе память получат эту память в том числе эти 32кб , которые ранее были заняты. Диспетчер памяти не запрещает тебе писать в любое место, он только выделяет тебе память чтобы не испортить другие проги в памяти. То есть если ты выделил 32 кб, а пишешь в данные 33 кб, то последние 1 кб могут оказаться записанными поверх каких либо данных, то есть можно испортить что-то, если это будут данные торрента то он скинет в файл испорченные данные, если это прога, то начнёт сбоить или упадёт сразу.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 13:02 22-09-2019 | Исправлено: AZJIO, 13:12 22-09-2019
    AZJIO



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

    Цитата:
    Иначе мой код
    в PureBasic делается

    Код:
    Scintilla = GetFunction(0, "Scintilla_DirectFunction")
    то есть получение функции из dll от Scintilla, то есть используется не "sendmessage", а "Scintilla_DirectFunction".

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 17:39 22-09-2019
    polromserg

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO, вот здесь:
    https://stackoverflow.com/questions/573814/retrieve-text-from-a-scintilla-control-using-sendmessage

    Цитата:
    The problem is that you send a message to the Scintilla control that has the address of your StringBuilder buffer in the lParam, but the Scintilla control in Notepad++ lives in a different address space, so the address in the window message it receives can not be written to.
     

    и здесь: https://www.tek-tips.com/viewthread.cfm?qid=1181059

    Цитата:
    You cant pass a pointer directly between processes, they are working in different address spaces.  

    чётко написано, что если выделяешь указатель в программе, то он появляется в адр. пространстве именно этой проги, и другие туда даже по этому указателю залезть не смогут: система не пустит. На практике так и оказалось.
     
    Иначе данные

    Цитата:
    могут оказаться записанными поверх каких либо данных, то есть можно испортить что-то, если это будут данные торрента то он скинет в файл испорченные данные, если это прога, то начнёт сбоить или упадёт сразу.

     

    Цитата:
    то есть получение функции из dll от Scintilla

    Я не использую никаких dll, я ведь не собираюсь вставлять в свою прогу окно scintill-ы. Для передачи сообщения достаточно sendMessage.

    Всего записей: 28 | Зарегистр. 31-12-2017 | Отправлено: 20:19 22-09-2019
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    polromserg
    Первый ресурс тобой указанный, я когда на него захожу, то сразу знаю, что работать не будет. Там то неправильные вещи выкладывают, то примитивные и глупые, то рабочие но банальные до ужаса, которые ты найдёшь на каждом столбе. Я там ещё ни разу реально рабочий скрипт не находил. Там может писать хоть кто, откуда ты знаешь на сколько он разбирается, написал и убежал, как ответы на маил.ру, википедию скопировал и убежал.
    А то что я тебе говорю, я 5 плагов написал, а ты мне приводишь неизвестно чьи опусы.
    Ну не веришь давай я тебе напишу код на PureBasic он просто поверх твоей памяти всё затрёт и посмотрим через сколько сек у тебя комп в перезагрузку уйдёт. Ты в курсе про прогу которая в играх деньги добавляет? Ищет в памяти процесса число и заменяет на то которое укажешь. Каким образом если по твоей версии это блокируется?

    Цитата:
    Я не использую никаких dll, я ведь не собираюсь вставлять в свою прогу окно scintill-ы
    Ну ты пишешь прогу для работы с какой то прогой? Если прога известна, например n++, ты видишь процесс, получаешь путь процесса, из пути отрезаешь имя процесса получаешь рабочую папку проги, ищешь в ней dll-ку scintilla, а для n++ это SciLexer.dll, экспортируешь функцию себе и всё, ты работаешь с окном также как n++, он также является как бы надстройкой над scintilla, её оболочкой, командным пультом, посылает ей команды.  
     
    Из справки scintila:
    Цитата:
    В Windows схема передачи сообщений, используемая для связи между контейнером и Scintilla, опосредована операцией SendMessage и может привести к плохой производительности при интенсивном вызове. Чтобы избежать этих накладных расходов, Scintilla предоставляет сообщения, которые позволяют вам напрямую вызвать функцию сообщения Scintilla.

    Цитата:
    Из версии 1.47 в Windows Scintilla экспортирует функцию, называемую      Scintilla_DirectFunction , который можно использовать так же, как функция, возвращаемая     SCI_GETDIRECTFUNCTION. Это избавит вас от вызова     SCI_GETDIRECTFUNCTION и необходимость вызова Scintilla косвенно с помощью указателя функции.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 22:15 22-09-2019 | Исправлено: AZJIO, 22:41 22-09-2019
    polromserg

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

    Цитата:
    Ты в курсе про прогу которая в играх деньги добавляет? Ищет в памяти процесса число и заменяет на то которое укажешь. Каким образом если по твоей версии это запрещено?  
     

    В курсе. И из чужого процесса прочитать можно, но нужно использовать ReadProcessMemory, как и было описано на stackoverflow. И записать тоже можно с WriteProcessMemory. (Это функции WinApi).
    А я в самом начале спрашивал про функцию SendMessage, к-я не обладает такими возможностями. В этом всё дело.
     

    Цитата:
    я тебе напишу код на PureBasic он просто повер твоей памяти всё затрёт и посмотрим через сколько сек у тебя комп в перезагрузку уйдёт

    Можно посмотреть код?

    Всего записей: 28 | Зарегистр. 31-12-2017 | Отправлено: 22:52 22-09-2019
    AZJIO



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

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

    указатель 0 и пишешь до конца, 8 гиг на память 8 гиг. Система загнётся раньше и возможно повредит себя, у меня нет желания поиграться с прибитием своей системы, хочешь проверить пробуй на своей.
    Возьми любой учебник по программированию и почитай почему нельзя писать дальше выделенной памяти.
     
    На счёт выделения памяти, хотя выделять память можно сколько угодно и как угодно, но система вполне знает какой процесс вызвал выделение памяти, а значит под этим подразумевается пространство памяти принадлежащее процессу. Но как я говорил ранее, когда scintilla получает переданный указатель, ей ровно кому принадлежит эта память в чьём пространстве, она просто пишет в этот указатель, аналогично и прочитать с этого указателя может любая программа.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 23:45 22-09-2019 | Исправлено: AZJIO, 00:35 23-09-2019
    seva1

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Всем привет
     
    Посоветуйте плиз для Notepad++ 64bit плагин чтобы можно было вычесть из одного фаил другой?
    + рассортировать строчки в случайном порядке
     
    Благодарю!

    Всего записей: 1153 | Зарегистр. 10-12-2003 | Отправлено: 05:59 23-09-2019
    DmitryFedorov

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил перевод экзешки для версии 7.71. Npp_exe_RU_6.74..7.71
    Исправил кое-где размеры в диалогах, ну и подогнал Xml-перевод.
    файлы всех версий слил в один архив. Rghost который был в прежнем виде упал и собирать старые ссылки я не стал.

    Всего записей: 1952 | Зарегистр. 19-03-2006 | Отправлено: 14:34 24-09-2019 | Исправлено: DmitryFedorov, 14:24 25-09-2019
    ctepanes882

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

    Всего записей: 3 | Зарегистр. 24-09-2019 | Отправлено: 22:41 24-09-2019
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ctepanes882
    Ctrl+F, Ctrl+V, Enter

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 00:44 25-09-2019
    ctepanes882

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

    Всего записей: 3 | Зарегистр. 24-09-2019 | Отправлено: 09:38 25-09-2019
    AkulaBig

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

    Цитата:
    Rghost который был в прежнем виде упал и собирать старые ссылки я не стал.

    А можно-ли вас попросить хотя-бы на русифицированные плаги дать новую ссылку. Делаю свою сборочку и хотелось-бы иметь в ней как можно больше русифицированного.

    Всего записей: 4229 | Зарегистр. 11-03-2003 | Отправлено: 09:47 25-09-2019
    AZJIO



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

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 11:48 25-09-2019 | Исправлено: AZJIO, 11:49 25-09-2019
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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

    Компьютерный форум Ru.Board » Компьютеры » Программы » Закладки » Notepad++ (часть 2)


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru