Pull to refresh

Открываем URL из под Wine

Website development
Tutorial
Представим ситуацию. Наш продукт умеет определять под управлением WineHQ он запущен или нет. И в самом нашем продукте есть множество мест, из которых мы должны открыть URL. Информация о продукте, проверка обновлений, онлайн-справка, страница тех.поддержки и прочее. В лоб пробуем ShellExecute, передавая параметром URL, и… недоуменно разводим руками. Ничего не происходит!

Всё дело в том, что Wine, честно эмулируюя всё и вся, захочет запустить браузер установленный не в системе, а установленный под Wine. На голом Wine такого не наблюдается. Поэтому ничего не происходит.

Можно конечно, установить браузер, но почему бы не открывать нужные документы в родных для системы приложениях. Тут возникает вопрос взаемодействия эмулятора и операционной системы.

Для этого в наборе Wine существует целый ряд команд. Не нравится мне термин «команда», но переведён дословно.

Есть среди них команда winebrowser, которая открывает URL в родном приложении из набора операционной системы. А учитывая, что URL может ссылаться и на файл, у нас в руках воистину серьезный механизм.

winebrowser httр://www.winehq.org

winebrowser ftp.winehq.org

winebrowser irc://irc.freenode.net/#winehq

winebrowser file://c:\\windows\\win.ini


Например, в KDE первых два URL, по идее, должны открыться в Konqueror'е, третий в Konversation, и последний в KWrite.

В итоге, применяя функцию GetWineAvail(), описанную ранее, наш код может выглядеть так:

//Delphi Code

procedure OpenUrl(url: string);
var
S: string;
begin
if GetWineAvail() then
S := 'winebrowser ' + url
else
S := url;
ShellExecute(0, 'open', PChar(S), nil, nil, SW_SHOW);
end;

...
OpenURL('mailto:support@microolap.com?Subject=PgMDD:%20Support Request');
OpenURL('httр://microolap.com/products/database/postgresql-designer/help/');
...

или так:

//C Code
void OpenUrl(char * url);
{
char s[255];
if (GetWineAvail())
{
strcpy(s, "winebrowser ");
strcat(s, url);
}
else
{
strcpy(s, url);
}

ShellExecute(NULL, "open", s, NULL, NULL, SW_SHOW);
}


OpenURL("mailto:support@microolap.com?Subject=PgMDD:%20Support Request");
OpenURL("httр://microolap.com/products/database/postgresql-designer/help/");
Tags:winetricks
Hubs: Website development
Total votes 33: ↑28 and ↓5+23
Views1.4K
Comments Comments 21

Popular right now

Top of the last 24 hours