Wineの下からURLを開きます

状況を想像してください。 当社の製品は、 WineHQを実行しているかどうかを判断できます。 また、製品自体には、URLを開かなければならない場所がたくさんあります。 製品情報、アップデートの確認、オンラインヘルプ、テクニカルサポートページなど。 ShellExecuteを真正面から試し、URLパラメーターを渡します。 何も起きていません!

問題は、Wineがすべてを正直にエミュレートして、システムではなく、Wineの下にインストールされたブラウザーを起動したいということです。 ベアワインでは、これは観察されません。 したがって、何も起こりません。

もちろん、ブラウザをインストールすることもできますが、システムのネイティブアプリケーションで必要なドキュメントを開かないでください。 これにより、エミュレータとオペレーティングシステムの相互作用の問題が発生します。

これを行うために、Wineコレクションにはいくつかのコマンドがあります 。 「チーム」という用語は好きではありませんが、文字通り翻訳されています。

その中にはwinebrowserコマンドがあります。これは、オペレーティングシステムセットからネイティブアプリケーションでURLを開きます。 また、URLがファイルを参照できる場合、非常に深刻なメカニズムを手に入れることができます。

winebrowser http://www.winehq.org

winebrowser ftp.winehq.org

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

winebrowser ファイル:// c:\\ windows \\ win.ini


たとえば、KDEでは、理論上、最初の2つのURLはKonquerorで、3番目はKonversationで、最後はKWriteで開く必要があります。

その結果、前述のGetWineAvail()関数を使用すると、コードは次のようになります。

// Delphiコード

プロシージャ OpenUrl (url string;
var
S 文字列 ;
始める
GetWineAvail()の場合
S := 'winebrowser' + url
他に
S := url ;
ShellExecute( 0、 'open' PChar (S) nil nil SW_SHOW;
終わり ;

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

または:

// Cコード
void OpenUrl( char * url);
{
char s [ 255 ];
if (GetWineAvail())
{
strcpy(s、 "winebrowser" );
strcat(s、url);
}
他に
{
strcpy(s、url);
}

ShellExecute( NULL"open" 、s、 NULLNULL 、SW_SHOW);
}

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

Source: https://habr.com/ru/post/J88907/


All Articles