Page 47 of 97

Posted: Tue Jan 04, 2011 10:13 pm
by FeyFre
Последовательность "AkelPadScript:" + hInstanceDLL + ":" + WScript.ScriptName не обязательно уникальна, ибо все составные не уникальны глобально.

Posted: Tue Jan 04, 2011 10:46 pm
by Infocatcher
И сколько же потребуется запустить AkelPad'ов, чтобы hInstanceDLL совпали? :) Вряд ли кто-то еще решит обозваться «AkelPadScript».
По крайней мере, ничего страшного при совпадении не произойдет.

Или нужно как-то там перебирать окна, созданные текущим процессом, наверное.

Posted: Wed Jan 05, 2011 2:57 pm
by Infocatcher
Infocatcher wrote:На первый взгляд, проще всего вот так:
Все равно это лучше предыдущего варианта. Обновлено:
goToLongestLine.js
AESCrypt.js *
converter.js
getHash.js
LinesFilter_mod2.js

* Вообще говоря, сейчас там всегда модальный диалог, но в коде предусмотрено открытие немодального диалога, так что пусть будет.


[Upd]
И, резюмируя предыдущее...
Будет ли что-нибудь из LinesFilter_mod.js/LinesFilter_mod2.js (см. viewtopic.php?p=10324#p10324 + немного далее) и RenameFile_mod.js (viewtopic.php?p=10561#p10561) включено в скрипты, поставляемые вместе с плагином?
«Безопасно» ли хранить скрипты в UTF-8/UTF-16 с BOM (см. viewtopic.php?p=10161#p10161 и далее)? Точнее, кто при запуске скрипта читает файл, и где это будет работать.

Posted: Wed Jan 05, 2011 3:26 pm
by Instructor
Добавлено: поддержка x64.
Добавлено: возможность использовать bCatchEsc=true и запускать скрипт несколько раз.

Added: support for x64.
Added: ability to use bCatchEsc = true and run the script several times.

ChmKeyword.js v1.3

Posted: Wed Jan 05, 2011 3:28 pm
by Instructor
Infocatcher wrote:«Безопасно» ли хранить скрипты в UTF-8/UTF-16 с BOM...
Да, с тех пор как AkelPad сам занимается обработкой скрипта (без WScript.exe).

Posted: Wed Jan 05, 2011 5:18 pm
by Infocatcher
Instructor
И на кой тогда там все еще повсюду \u041D и прочие радости? :)

Posted: Wed Jan 05, 2011 7:15 pm
by Infocatcher
Instructor wrote:ChmKeyword.js v1.3
Там в 108-й строке

Code: Select all

      AkelPad.MemCopy(lpStructure + (_X64?8:8), lpKeywordBuffer, 2 /*DT_QWORD*/);  //HH_AKLINK.pszKeywords
Так и задумано?

Posted: Wed Jan 05, 2011 7:20 pm
by FeyFre
Infocatcher, да. Просто писалось по шаблону.

Code: Select all

typedef struct tagHH_AKLINK
{
     int      cbStruct;
     BOOL     fReserved;
     LPCTSTR  pszKeywords;
     LPCTSTR  pszUrl;
     LPCTSTR  pszMsgText;
     LPCTSTR  pszMsgTitle;
     LPCTSTR  pszWindow;
     BOOL     fIndexOnFail;
} HH_AKLINK;

Posted: Thu Jan 06, 2011 5:51 am
by Instructor
FeyFre wrote:Последовательность "AkelPadScript:" + hInstanceDLL + ":" + WScript.ScriptName не обязательно уникальна, ибо все составные не уникальны глобально.
hInstanceDLL может совпасть с hInstanceDLL другого процесса?
Infocatcher wrote:И на кой тогда там все еще повсюду \u041D и прочие радости? :)
Встроенные уже написаны :), а скрипты, что на форуме, без проблем могут быть скопированы и сохранены в Ansi кодировке, например, человеком из КНР.
Infocatcher wrote:Будет ли что-нибудь из ... включено в скрипты, поставляемые вместе с плагином?
Включил наработки из RenameFile_mod.js.

Posted: Thu Jan 06, 2011 12:45 pm
by FeyFre
hInstanceDLL может совпасть с hInstanceDLL другого процесса?
Да.
HINSTANCE он же HMODULE он же указатель на место куда загружен образ:
1. Вспомните WIN16, int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow);
hPrevInstance - до сих пор описывается как дескриптор предыдущего загруженного экземпляра приложения(хоть и всегда ноль), а в те времена в MSDN прямо писалось что аргументы-HINSTANCE - адреса.
2. Так показывают различные вспомогательные утилиты, например VMMAP Руссиновича(посмотрите в отладке какой нибудь модуль, а потом в этом процессе с помощью VMMAP найдите что лежит по адресу - значению модуля).
3. Так пишет Рихтер, ну например в "Создание эффективных WIN32-приложений с учётом специфики 64-разрядной версии Windows" (ссылку я тут где-то писал).
4. Ну в крайнем случае загляните в в память самостоятельно (LPBYTE)hInstanceDLL - я там вижу старое доброе MZђ

Раз уж выяснили, что HINSTANCE - адрес в памяти, то что мешает загружать модуль в одно и то же место во всех процессах? Только занятость этого места, которая не гарантированна. Так что hInstanceDLL может и совпасть.
А вот если туда привлечь GetCurrentProccessId() то уникальность в разных экземплярах приложения гарантированна.

Posted: Thu Jan 06, 2011 1:10 pm
by Instructor
FeyFre
Раз уж выяснили, что HINSTANCE - адрес в памяти, то что мешает загружать модуль в одно и то же место во всех процессах?
Видимо не зря было придумано разделять память между процессами :)

Posted: Thu Jan 06, 2011 3:33 pm
by Infocatcher
FeyFre wrote:Так что hInstanceDLL может и совпасть.
А вот если туда привлечь GetCurrentProccessId() то уникальность в разных экземплярах приложения гарантированна.
Заменить-то не проблема. Или даже добавить. Только я пока не понял, надо ли. :D
Instructor wrote:
Infocatcher wrote:Будет ли что-нибудь из ... включено в скрипты, поставляемые вместе с плагином?
Включил наработки из RenameFile_mod.js.
О, правильное восстановление выделения. Будем знать. :)
А модифицированный LinesFilter.js долго изучать, или там что-то не понравилось?

[Upd]
И в SearchReplace.js надо сделать перевод фокуса на уже открытое окно при повторном вызове.

Posted: Fri Jan 07, 2011 2:33 am
by Infocatcher
Instructor wrote:Включил наработки из RenameFile_mod.js.

Code: Select all

        //Close editing file
        if (AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4324 /*IDM_WINDOW_FILECLOSE*/, 0))
        {
          ...
          //Open file
          AkelPad.OpenFile(pNewFileFullName, 0, AkelPad.GetEditCodePage(hWndEdit), AkelPad.GetEditBOM(hWndEdit));
Эксперимент подтверждает, что hWndEdit уже закроется, и будут использованы параметры только что открытого документа.

Posted: Fri Jan 07, 2011 6:00 am
by Instructor
Infocatcher wrote:И в SearchReplace.js надо сделать перевод фокуса на уже открытое окно при повторном вызове.
Сделано.
Эксперимент подтверждает...
Исправлено.

Posted: Fri Jan 07, 2011 6:37 am
by cnnnc
2KDJ
FileInfo.js is very good. But when I change the pString into Chinese, the result of stats isn't align like before.
Because of Chinese Character is DoubleByteChar, it seem a Chinese-Char's width equal two latin's.
I suggest one more line of code for support that, like this:

Code: Select all

function Pad(pString, nLen, pType, pChar)
{
  nLen = nLen - pString.replace(/[\u0000-\u00ff]/g,"").length;