Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
ВнизЗапуск Оперы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c