状況を想像してください。 当社の製品は、 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、 NULL 、 NULL 、SW_SHOW);
}
...
OpenURL( "mailto:support@microolap.com?Subject = PgMDD:%20Support Request" );
OpenURL( "http://microolap.com/products/database/postgresql-designer/help/" );
...