Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.04;
Скачать: CL | DM;

Вниз

Запуск Оперы   Найти похожие ветки 

 
Seldon   (2003-07-20 21:33) [0]

Здрасьте!
Мне надо запускать оперу. Я делаю так:
ShellExecute(0,"open",PAnsiChar(OperaPath),PAnsiChar(""file://"+HTMLFileName+"""),nil,sw_Show);
Это работает, но если в HTMLFileName есть русские символы, Opera говорит, мол файл не найден, а в строке адреса примерно такое:
file://localhost/c:/Documents and Settings/Seldon/Iie aieoiaiou/$Preview1.html
Насколько я понимаю, Opera принимает имя файла в Unicode, а я даю ей в ANSI. Как перекодировать ANSI в Unicode я знаю, но ShellExecute не хочет брать ни PWChar, ни WideString. Как мне быть?


 
Spawn ©   (2003-07-20 21:42) [1]

Не знаю поможет ли, но может использовать Unicode-версию ShellExecute?

function ShellExecuteW; external shell32 name "ShellExecuteW";


 
Marser ©   (2003-07-20 22:16) [2]

winexec


 
Seldon   (2003-07-21 01:15) [3]

>ShellExecuteW
Делаю так: ShellExecuteW(0,"open",Str2Wide(OperaPath),Str2Wide(""file://"+HTMLFileName+"""),nil,sw_Show);
Где Str2Wide:
function Str2Wide(Str:String):PWideChar;
var
R:WideString;
begin
SetLength(R,Length(Str));
MultiByteToWideChar(0,0,PAnsiChar(@Str[1]),-1,PWideChar(@R[1]),Length(Str));
Result:=PWideChar(R);
end;
Не работает! Та же байда.
Ещё заметил, что если в момент вызова опера уже запущена, то всё пучком. Можно, конечно, запускать оперу, ждать немного и запускать файл. Но это криво как-то.


 
VMcL ©   (2003-07-21 09:40) [4]

ShellExecuteW(0, "open", PWideChar(WideString(OperaPath)), PWideChar(WideString(""file://" + HTMLFileName + """)), nil, sw_Show);


 
VMcL ©   (2003-07-21 09:51) [5]

Не прогнал. Так не пойдёт. Нужно русские буквы передавать в том виде (не помню, как называется), как все браузеры передают:
%xx%yy

Причем, в UTF-8. Например, буква "Г" -> %D0%93


 
VMcL ©   (2003-07-21 09:58) [6]

Вот функция перекодирования:

function ForOpera(S: AnsiString): AnsiString;
var
U: UTF8String;
I: Integer;
begin
U := AnsiToUtf8(S);

Result := "";
for I := 1 to Length(U) do
begin
Result := Result + "%" + Format("%.2X", [Byte(U[I])])
end;
end;


 
Ivolg ©   (2003-07-21 11:30) [7]

вот тебе код который открывает любой файл нужно просто указать постле точки какой это файл например Test.mp3,test.txt,opera.exe и т.д.Код: ShellExecute(0,
"open",
"C:\Opera.exe",
nil,
nil,
SW_SHOWNORMAL);

end;

uses:ShellApi,


Обязателбно в столбик как показано. Удачи!


 
VMcL ©   (2003-07-21 13:27) [8]

>Ivolg © (21.07.03 11:30)

Посты читал?


 
Ivolg ©   (2003-07-21 13:49) [9]

У меня всё это работает! VMcL может у тебя не работает?



Страницы: 1 вся ветка

Текущий архив: 2003.08.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
14-10400
Rulja
2003-07-17 13:19
2003.08.04
Спрятать сервер


6-10332
vgkuser
2003-05-29 13:14
2003.08.04
как работать с IdFTP


1-10177
Chlavik
2003-07-23 01:39
2003.08.04
Вызов метода класса программы из dll библтотеки. Можна ли так ?


4-10525
ych_boriss
2003-06-03 12:37
2003.08.04
мессаги WM_MOUSELEAVE, WM_MOUSEHOVER.


14-10444
BnT
2003-07-17 21:27
2003.08.04
---|Ветка была без названия|---