1

C# で記述されたシステム トレイ アプリケーションから有効にしたいツールバーを作成しました。実際のツールバーの有効化は、[DLLImport] を使用して C++ 部分から行われます。

私が使用している現在:

SHLoadInProc(__uuidof(MyBandLoader))

しかし、これは Vista (SHLoadInProc は実装されていません) および IE6 を使用する Windows XP SP2 (再起動後にクイック起動ツールバーが消える) では失敗します。

Vista では、CocreateInstance() と BandSite->AddBand() を試しましたが、ツールバー dll の GUID を使用すると、セグメンテーション違反またはアドレス バーのいずれかが表示されました。

XP および Vista で別のプログラムからツールバーを有効にする別の方法はありますか?

4

3 に答える 3

1

Vista には、ITrayDeskBand と呼ばれる、あまり文書化されていない新しいインターフェイスがあります。

CoCreateInstance を介して this のインスタンスを作成し、返されたポインターで ShowDeskBand([ツールバーの CLSID]) を呼び出します (C++ の場合 - C# で PInvoke に関連するすべてのビットを作成する方法がわかりません - 書きやすいかもしれません)。この関数を公開する単純な C++ dll)

ただし、これは Vista でのみ機能します。XP では、上記の SHLoadInProc メソッドを続行する必要があるため、OS のバージョンをテストして適切な処理を行う必要があります。

そのコードプロジェクトの記事からコードを持ち上げる場合は注意してください - 微妙なバグがたくさんありますが、それらの多くはコメントで議論されています

于 2009-01-14T17:42:39.487 に答える
0

私はそれを使用しましたが、ツールバーを作成する必要があることだけを示しており、別のプログラムからツールバーを有効にする方法は示していません。

于 2008-12-05T11:52:31.530 に答える
0

Explorer プロセス内で COM オブジェクトを作成するために .Net を使用しないでください。エクスプローラー プロセスに既にロードされている別のフレームワーク バージョンを使用する別の .net コンポーネントがある場合、これは機能しません。各プロセスに 1 つの .net フレームワークのみ。MS は、任意の .net 言語でのデスクバンドの開発に関するサンプルを宣伝するべきではありませんでした。

Vista で唯一の方法は、ITrayDeskBand インターフェイスを使用してツールバーを表示することです。ただし、これによりユーザーに確認ボックスが表示され、ユーザーはツールバーの表示を拒否できます。

于 2010-11-22T13:31:06.913 に答える