powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / HELP: плагин sLister для Total Commander
20 сообщений из 20, страница 1 из 1
HELP: плагин sLister для Total Commander
    #39141621
AlexSyr2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Данный плагин не открывает длинные пути файлов (больше 259).
Как я понял это происходит из-за вот этой строчки:
Код: plaintext
1.
if(CreateProcessW(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))


т.е., судя по описанию, если первый параметр NULL, то cmd ограничивается 259 символами.
Я попробовал загнать исходники ( есть на сайте автора плагина ) в VS2013 и откомпилить, но так как я не спец (от слова СОВСЕМ) в сишных проектах, то результат ожидаем - пшик.
Спецы помогите решить проблему: откомпилировать исходники, чтобы потом плагин мог установиться, или может кто имеет доступ на форум Total Commander - задать там этот вопрос. Может кто знает Email автора (Egor Vlaznev) - я ему напишу. Прошу любой помощи.
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39141651
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего из-за этого
Код: plaintext
1.
#define MAX_PATH 260


Если не путаю, это ограничение зашитое в WinAPI.

Как бороться - ХЗ. Укороти пути. Как вариант сначала перейти в папку, затем указать только имя файла.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx lpCommandLine [in, out, optional]

The command line to be executed. The maximum length of this string is 32,768 characters, including the Unicode terminating null character. If lpApplicationName is NULL, the module name portion of lpCommandLine is limited to MAX_PATH characters.
Если правильно понял, то возможно так заработает
Код: plaintext
1.
if(CreateProcessW("", cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39141674
AlexSyr2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
Проблема в том, что я полный NULL в Си.
Я даже не знаю как из исходников (ничего не изменяя) получить рабочий плагин. То, что у меня получается, не воспринимается Total Commander'ом как плагин. Видимо где-то надо настраивать проект.
Поэтому и просил помощи у специалистов - может кто-то уже делал плагины, и ему не составит труда скомпилить исходники и выдать на выходе готовый плагин без ограничений 259 символов.
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39141985
AlexSyr2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привожу результаты своих изысканий в VS2013.
1) Первоначально проект компилировался из исходников, но коммандер не хотел кушать этот плагин.
Причина: функции из DLL экспортировались в виде _ListLoadW@12.
Решил: Подключил .def файл. Оказывается недостаточно просто добавить его в проект :), необходимо явно прописать его в свойствах проекта: Configuration Properties => Linker => Input => Module Difinition File
2) При пошаговой отладке (подключение к процессу Total Commander: DEBUG => Attach to Process... => TOTALCMD.EXE) получились следующие результаты:

а) Плагин РАБОТАЕТ. Файл открывается и отображается корректно (начальное состояние исходника)
Код: plaintext
1.
CreateProcessW(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 1 и ошибку: "error 5: Отказано в доступе."
значение cmd: C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe -plugin 2557590 "D:\я111.pdf"

б) Плагин запускается. В окне листера: Ошибка загрузки D:\<...ПОЛНЫЙ путь 266 символов...>.pdf
Код: plaintext
1.
CreateProcessW(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 1 и ошибку: "error 5: Отказано в доступе."
значение cmd: C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe -plugin 2950180 "D:\<...ПОЛНЫЙ путь 266 символов...>.pdf"

в) Ошибка компиляции
Код: plaintext
1.
CreateProcessW("", cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"

г) Плагин НЕ работает, даже не запускается
Код: plaintext
1.
CreateProcessW(L"", cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 0 и ошибку: "error 3: Системе не удается найти указанный путь."
значение cmd: C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe -plugin 460782 "D:\я111.pdf"

д) Плагин запускается. В окне листера: Ошибка загрузки D:\Files
Код: plaintext
1.
CreateProcessW(rpath, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 1 и ошибку: "error 0: Операция успешно завершена."
значение rpath: C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe
значение cmd: C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe -plugin 2361128 "D:\я111.pdf"

Т.е., судя по 2.а, б и д, проблема, видимо, не в CreateProcessW, и код работает правильно???
Прошу специалистов прокомментировать.
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142353
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандартный обход проблемы 260 символов — снабжать путь к файлу префиксом \\?\
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142544
AlexSyr2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RWolf ,
Все тоже самое. Немного изменился п.2д
Плагин запускается. В окне листера: Ошибка загрузки D:\<...здесь только директория...>\Files - итого полный путь без имени файла 202 символов + \Files
Код: plaintext
1.
CreateProcessW(rpath, cmd1, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 1 и ошибку: "error 0: Операция успешно завершена."
значение rpath: C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe
значение cmd1: \\?\C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe -plugin 2294978 "D:\<...ПОЛНЫЙ путь 266 символов...>.pdf"
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142559
AlexSyr2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так как я чайник, то пробовал различные варианты запуска CreateProcessW, поэтому дополню пунктом 3:
а) Плагин НЕ запускается.
Код: plaintext
1.
CreateProcessW(cmd, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 0 и ошибку: "error 123: Синтаксическая ошибка в имени файла, имени папки или метке тома."
значение cmd: C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe -plugin 1836380 "D:\я111.pdf"

б) Плагин НЕ запускается.
Код: plaintext
1.
CreateProcessW(cmd2, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 0 и ошибку: "error 123: Синтаксическая ошибка в имени файла, имени папки или метке тома."
значение cmd2: "C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe" -plugin 2622870 "D:\я111.pdf"

в) Плагин НЕ запускается.
Код: plaintext
1.
CreateProcessW(cmd1, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 0 и ошибку: "error 123: Синтаксическая ошибка в имени файла, имени папки или метке тома."
значение cmd1: \\?\C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe -plugin 1049864 "D:\я111.pdf"

г) Плагин НЕ запускается.
Код: plaintext
1.
CreateProcessW(cmd1, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 0 и ошибку: "error 3: Системе не удается найти указанный путь."
значение cmd1: \\?\"C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe" -plugin 787724 "D:\я111.pdf"

д) Плагин НЕ запускается.
Код: plaintext
1.
CreateProcessW(cmd2, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 0 и ошибку: "error 123: Синтаксическая ошибка в имени файла, имени папки или метке тома."
значение cmd2: "\\?\C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe" -plugin 2491792 "D:\я111.pdf"

е) Плагин НЕ запускается.
Код: plaintext
1.
CreateProcessW(cmd1, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 0 и ошибку: "error 122: Область данных, переданная по системному вызову, слишком мала."
значение cmd1: \\?\C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe -plugin 918962 "D:\<...ПОЛНЫЙ путь 266 символов...>.pdf"
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142610
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexSyr2009,
а нафига тебе вообще эта хрень, totall commander?
Far же есть, он лучше на порядок....
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142616
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В lpApplicationName не должно быть ничего, кроме имени исполняемого файла; параметры командной строки перечисляются в lpCommandLine.
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142698
AlexSyr2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RWolf ,

4а) Плагин НЕ запускается.
Код: plaintext
1.
CreateProcessW(L"SumatraPDF.exe", cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 0 и ошибку: "error 2: Не удается найти указанный файл."
значение cmd: C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe -plugin 525790 "D:\я111.pdf"
. . . . . . . . . или \\?\C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe -plugin 853380 "D:\я111.pdf"
. . . . . . . . . или "\\?\C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe" -plugin 1050018 "D:\я111.pdf"

4б) Открывается не плагин, а сама Суматра с двумя вкладками: 1836408 и я111.pdf. Сам Total Commander зависает
Код: plaintext
1.
CreateProcessW(rpath, cmd2, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 1 и ошибку: "error 0: Операция успешно завершена."
значение rpath: C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe
значение cmd2: -plugin 1836408 "D:\я111.pdf"

4в) Плагин запускается. В окне листера: Ошибка загрузки D:\Files
Код: plaintext
1.
CreateProcessW(rpath, cmd2, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 1 и ошибку: "error 0: Операция успешно завершена."
значение rpath: C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe
значение cmd2: \\?\C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe -plugin 2688400 "D:\я111.pdf"

4г) Плагин запускается и КОРРЕКТНО отображает файл
Код: plaintext
1.
CreateProcessW(rpath, cmd2, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 1 и ошибку: "error 0: Операция успешно завершена."
значение rpath: C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe
значение cmd2: "\\?\C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe" -plugin 722164 "D:\я111.pdf"
. . . . . . . . . или "C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe" -plugin 394846 "D:\я111.pdf"

4д) Плагин запускается. В окне листера: Ошибка загрузки D:\<...ПОЛНЫЙ путь 266 символов...>.pdf
Код: plaintext
1.
CreateProcessW(rpath, cmd2, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)


возвращает 1 и ошибку: "error 0: Операция успешно завершена."
значение rpath: C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe
значение cmd2: "\\?\C:\Program Files (x86)\SumatraPDF\SumatraPDF.exe" -plugin 853236 "D:\<...ПОЛНЫЙ путь 266 символов...>.pdf"

Какие выводы?
1. В lpApplicationName (rpath) должен быть либо NULL (п. 2а), либо ПОЛНЫЙ путь к запускаемой программе (п. 4г)
2. В lpCommandLine (cmd) должен быть ПОЛНЫЙ путь к программе с параметрами командной строки заключенный в КАВЫЧКИ (пп. 4в, 4г)
3. Префикс \\?\ не имеет значения при заполненном параметре lpApplicationName (rpath) (п. 4г)
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142704
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexSyr2009Какие выводы?
Выводы такие, что MSDN надо читать очень внимательно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142708
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexSyr20091. В lpApplicationName (rpath) должен быть либо NULL (п. 2а), либо ПОЛНЫЙ путь к запускаемой программе (п. 4г)
Да.
AlexSyr20092. В lpCommandLine (cmd) должен быть ПОЛНЫЙ путь к программе с параметрами командной строки заключенный в КАВЫЧКИ (пп. 4в, 4г)
Кавычки нужны только для разбора строки; если в имениах файлов нет пробелов, кавычки можно не ставить.
AlexSyr20093. Префикс \\?\ не имеет значения при заполненном параметре lpApplicationName (rpath) (п. 4г)
Префикс ставится к длинному имени файла. В любом случае, разбор командной строки всё равно на совести запускаемого приложения, так что префикс может и не пригодиться.
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142724
AlexSyr2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovВыводы такие, что MSDN надо читать очень внимательно.

Наконец-то специалист появился. Как же я Вас долго ждал!
авторThe lpCommandLine parameter can be NULL. In that case, the function uses the string pointed to by lpApplicationName as the command line.
Прокомментируйте, опираясь на результаты пп. 3 б, г и д. и CreateProcess function .
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142733
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexSyr2009Прокомментируйте, опираясь на результаты пп. 3 б, г и д

По всем третьим пунктам: в параметре имени исполняемого приложения - только имя
исполняемого приложения, а ты туда ещё и аргументы напихал. Они воспринимаются как часть
имени файла и, естественно, файл с таким диким именем не находится.
lpApplicationName [in, optional]

The name of the module to be executed.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142739
AlexSyr2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Dimitry Sibiryakov]
Еще раз:
The lpCommandLine parameter can be NULL . In that case , the function uses the string pointed to by lpApplicationName as the command line .
Разве командная строка не подразумевает аргументов???
Вполне допускаю, что где-то кавычки не там стоят, но где про это в MSDN написано, да и вроде как я попробовал их по разному ставить.

автор... а ты туда ещё и аргументы напихал ...
А куда тогда их пихать, если lpCommandLine is NULL???
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142747
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexSyr2009Разве командная строка не подразумевает аргументов???
В данном случае - нет.

AlexSyr2009А куда тогда их пихать, если lpCommandLine is NULL???
Аргументы передаются исключительно в lpCommandLine. Выбора нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142748
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexSyr2009Еще раз:
The lpCommandLine parameter can be NULL . In that case , the function uses the string pointed to by lpApplicationName as the command line .


Это надо понимать так: можно не указывать, что передать запускаемому приложению в качестве командной строки, тогда эта строка будет по умолчанию заполнена значением lpApplicationName.
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142776
AlexSyr2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По п. 3 вопрос закрыт: INFO: Understanding CreateProcess and Command-line Arguments
авторIf the ApplicationName parameter is passed and the CommandLine parameter is NULL, then the ApplicationName parameter is also used as the CommandLine. This does not mean that you can pass additional command-line parameters in ApplicationName string . For example, the following call will fail with a "File Not Found" error:
Код: plaintext
1.
   CreateProcess( "c:\\MyApp.exe Param1 Param2", NULL, ... )


MS'у влом было написать это в описании функции???

Остается открытым вопрос с длиной командной строки, ограниченной 259 символами - собственно с чего все и началось.
Т.е. имеем 4г (короткий путь) - работает, 4д (длинный) - не работает.
Что скажите? Можно ли в данном плагине что-то сделать для исправления этой ситуации, или это баг самой Суматры?
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142780
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexSyr2009Можно ли в данном плагине что-то сделать для исправления этой ситуации,
или это баг самой Суматры?
Баг Суматры, однозначно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
HELP: плагин sLister для Total Commander
    #39142800
AlexSyr2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov ,
Спасибо большое.
Смирился, успокоился
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / HELP: плагин sLister для Total Commander
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]