Открыть длинный URL из программы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Vadimus
новенький
Сообщения: 19
Зарегистрирован: 11.02.2011 15:56:16

Открыть длинный URL из программы

Сообщение Vadimus »

Задача:
Открыть длинный URL из программы (win32)
Проблема:
Длинные URL обрезаются в браузере (Опера, Хром и т.д.) примерно по границе 255 байтов. Короткие открываются без проблем.
Пробовал:

Код: Выделить всё

ShellExecute(0, PChar('open'), PChar('explorer'), PChar(s), nil, 0);


Код: Выделить всё

    HProc:=TProcess.Create(nil);
    HProc.Executable:='explorer';
    HProc.Parameters.Text:=s;
    HProc.Execute;
    HProc.Free;


Предполагаю, что в Windows есть ограничение на длину параметра для запуска приложения. Я в ступоре. Что делать?
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

варианты:
- программно найти окошко ввода урла и вставить текст туда + имитировать нажатие ентера.
-программно создать ярлык и передать его в качестве параметра браузеру..
в общем извращаться надо..
Аватара пользователя
Vapaamies
постоялец
Сообщения: 292
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vapaamies »

Vadimus писал(а):Длинные URL обрезаются в браузере (Опера, Хром и т.д.) примерно по границе 255 байтов. Короткие открываются без проблем.

Мне кажется, что проблема на вашей стороне. В частности, могут использоваться ShortString -- string с явно заданным размером, либо если отключен {$H+}. В Windows проблемы могут наступать при ~1024 символах, но не ранее.
Vadimus
новенький
Сообщения: 19
Зарегистрирован: 11.02.2011 15:56:16

Сообщение Vadimus »

B4rr4cuda писал(а):- программно найти окошко ввода урла и вставить текст туда + имитировать нажатие ентера.-программно создать ярлык и передать его в качестве параметра браузеру..в общем извращаться надо..


Геморрой... :(

Vapaamies писал(а):Мне кажется, что проблема на вашей стороне. В частности, могут использоваться ShortString -- string с явно заданным размером, либо если отключен {$H+}. В Windows проблемы могут наступать при ~1024 символах, но не ранее.


Из программы в ShellExecute и TProcess передаются нормальные строки - проверено (например писал в файл, любой длины строки пишутся ОК).
PapaNT
постоялец
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва

Сообщение PapaNT »

У винды ограничения на длину параметра командной строки... Разрешено лишь 255 символов. В лоб задачу не решить.
Vadimus
новенький
Сообщения: 19
Зарегистрирован: 11.02.2011 15:56:16

Сообщение Vadimus »

PapaNT писал(а):У винды ограничения на длину параметра командной строки... Разрешено лишь 255 символов. В лоб задачу не решить.


Видимо...

В общем, пока сделал через .url файлы, всё работает:

Код: Выделить всё

WriteURLFile(URL, 'tmp.url');
ShellExecute(0, 'open', 'explorer', 'tmp.url', nil, SW_SHOWNORMAL);


Код: Выделить всё

  procedure WriteURLFile(URL, FN :string);
  var
    f :TextFile;
    i :integer;
  begin
    AssignFile(f, FN);
    Rewrite(f);
    writeln(f, '[InternetShortcut]');
    writeln(f,  'URL='+URL);
    CloseFile(f);
  end;
Ответить