powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / shellexecute русские символы в названии файла
16 сообщений из 16, страница 1 из 1
shellexecute русские символы в названии файла
    #40033466
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго вечера,

Проект в lazarus 2.0.10 в юникоде, Win.10.
при вызове программы через
Код: pascal
1.
2.
3.
sTmpExec: string;
.........
iShellErr := ShellExecute(0, 'open', PChar(sTmpExec), '', '', SW_NORMAL);  


если в имени файла есть кириллица то получаю ответ что iShellErr = 2 - The specified file was not found.
В сети народ рекомендует PChar поменять на PWideChar но компилятор ругается, желает PChar
прошел кликом до определения ShellExecute в ascdef.inc
Код: pascal
1.
function ShellExecute(_para1:HWND; _para2:pchar; _para3:pchar;_para4:pchar; _para5:pchar;_para6:longint):HINST; external 'shell32' name 'ShellExecuteA';  


да, PChar.
Что посоветуете?

Спасибо.
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033467
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Завернуть имя файла в двойные кавычки.
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033468
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
northener
Завернуть имя файла в двойные кавычки.


уже пробовал, не помогло
Код: pascal
1.
2.
            iShellErr := ShellExecute(0, 'open', PChar('"' + sTmpExec + '"'), '', '',
              SW_NORMAL);  


если кириллицы нет то всё открывается
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033470
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
Проект в lazarus 2.0.10 в юникоде,

ShellExecuteW(...)?
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033477
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, в лазаре есть LCLIntf.OpenDocument() и SysUtils.ExecuteProcess().
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033482
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey,

какая то фигня
если в uses только
uses Windows
то shellexecute тащит из ascdef.inc
Код: pascal
1.
function ShellExecute(_para1:HWND; _para2:pchar; _para3:pchar;_para4:pchar; _para5:pchar;_para6:longint):HINST; external 'shell32' name 'ShellExecuteA';  



iShellErr := ShellExecute(0, 'open', PChar(sTmpExec), '', '', SW_NORMAL);
С названиями латиницей всё работает, с кирилицей не находит файлы.

если использую ShellExecuteW то тащит из unifun.inc
Код: pascal
1.
function ShellExecuteW(_para1:HWND; _para2:LPCWSTR; _para3:LPCWSTR; _para4:LPCWSTR; _para5:LPCWSTR;_para6:longint):HINST; external 'shell32' name 'ShellExecuteW';



iShellErr := ShellExecuteW(0, 'open', PWideChar(sTmpExec), '', '',
SW_NORMAL);
уже не находит ни с латиницей ни с кириллицей

добавляю в uses windows, ShellApi;

теперь тащит из ShellApi
Код: pascal
1.
Function ShellExecuteW(hwnd: HWND;lpOperation : LPCWSTR ; lpFile : LPCWSTR ; lpParameters : LPCWSTR; lpDirectory:  LPCWSTR; nShowCmd:LONGINT):HInst; external shell32 name 'ShellExecuteW';


iShellErr := ShellApi.ShellExecuteW(0, 'open', PWideChar(sTmpExec), '', '', SW_NORMAL);

опять не находит ни с латиницей ни с кириллицей ....
непонятно что не так
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033492
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey
А вообще, в лазаре есть LCLIntf.OpenDocument() и SysUtils.ExecuteProcess().


спасибо за наводку, OpenDocument выглядит интересно, одиночнае файлы открывает. Непонятно как открыть им к примеру cmd файл с параметром.
ExecuteProcess отрабатывает без проблем.

Спасибо!

кстати, может существует нечто подобное что будет и на других платформах работать?
у OpenDocument вижу только WinCE в директивах и он через ShellExecute тоже работает а ExecuteProcess написан на основе CreateProcessW из kernel32
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033505
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
кстати, может существует нечто подобное что будет и на других платформах работать?

Эти функции кроссплатформенные. Исходники ты видишь только под разрабатываемую платформу.
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033506
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в принципе решение в OpenDocument можно подсмотреть

Код: pascal
1.
2.
3.
4.
  ws: WideString;     
..............
ws := UTF8Decode(AURL);
    Result := ShellExecuteW(0, nil, PWideChar(ws), nil, nil, SW_SHOWNORMAL) > 32;  
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033508
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то функции "W" или "A" никто не должен вызывать напрямую. Они дожны автоматически ресолвиться в зависимости от типа проекта - unicode, asci. Кривизна какая-то.
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033509
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter,

Так и будет, когда FPC на юникод переедет.
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033536
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun,

рекомендую еще вики фпц по теме почитать:
https://wiki.lazarus.freepascal.org/Executing_External_Programs#TProcess
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033575
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon
hlopotun,

рекомендую еще вики фпц по теме почитать:
https://wiki.lazarus.freepascal.org/Executing_External_Programs#TProcess

Если быть более точным, то лучше TProcessUTF8.
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033642
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док
makhaon
hlopotun,

рекомендую еще вики фпц по теме почитать:
https://wiki.lazarus.freepascal.org/Executing_External_Programs#TProcess

Если быть более точным, то лучше TProcessUTF8.

А есть ли в delphi аналог Tprocess и TprocessUtf8 ?
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40033662
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
Док
пропущено...

Если быть более точным, то лучше TProcessUTF8.

А есть ли в delphi аналог Tprocess и TprocessUtf8 ?

А он там нужен? Эта обёртка пишется за 15 минут.
...
Рейтинг: 0 / 0
shellexecute русские символы в названии файла
    #40034821
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если нужно не открывать файлы с данными в ассоциированных программах, а запускать процесс, то всякие Shell обертки надо выкинуть и юзать честный CreateProcess (или кросс-платформенный TUTF8Process)
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / shellexecute русские символы в названии файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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