タスクバーで実行されるツールバーを作成しました。残念ながら、インストール後、ユーザーは手動で有効にする必要があります。特定のツールバーを開く(または閉じる)ようにエクスプローラーに指示する方法はありますか?
インストールが完了したら、インストーラーであるNSISにツールバーをオンにしてもらいたいです(プラグインが必要になることはわかっています)。
また、複数のユーザーがPCを共有する企業環境など、すべてのユーザーに対してツールバーを自動的に有効にできるかどうかも知りたいです。
編集: このコードは、デスクバンド オブジェクトを追加できるようになりました (Pinvoke.net およびこれらの 2 つのMSDN フォーラムの質問から):
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("4CF504B0-DE96-11D0-8B3F-00A0C911E8E5")]
public interface IBandSite
{
[PreserveSig]
uint AddBand([In, MarshalAs(UnmanagedType.IUnknown)] Object pUnkSite);
[PreserveSig]
void RemoveBand(uint dwBandID);
}
private uint AddDeskbandToTray(Guid Deskband)
{
Guid IUnknown = new Guid("{00000000-0000-0000-C000-000000000046}");
Guid ITrayBand = new Guid("{F60AD0A0-E5E1-45cb-B51A-E15B9F8B2934}");
Type TrayBandSiteService = Type.GetTypeFromCLSID(ITrayBand, true);
IBandSite BandSite = Activator.CreateInstance(TrayBandSiteService) as IBandSite;
object DeskbandObject = CoCreateInstance(Deskband, null, CLSCTX.CLSCTX_INPROC_SERVER, IUnknown);
return BandSite.AddBand(DeskbandObject);
}
そして、使用例:
Guid address_toolbar_guid = new Guid("{01E04581-4EEE-11D0-BFE9-00AA005B4383}");
uint band_id = AddDeskbandToTray(address_toolbar_guid);
RemoveBand への同様の呼び出しでもうまくいくのは理にかなっていますが、今のところ、そのコードを機能させることはできません。別の問題: 追加したデスクバンドは、それを追加したアプリケーションを閉じると閉じます。
この記事をチェックしてみてください。これは、ITrayDeskBand インターフェースを使用して Vista でのみ (「公式に」とにかく) 実行できるようです。
現在、正確なURLを見つけることができませんが、PDC2008の周りでこれについての議論があったことを覚えています。基本的にこれは特に有効になっておらず、ユーザーの同意なしにランダムなプログラムがタスクバーに入力できませんでした。
これの副作用は、デフォルトでWMPデスクバーを有効にするユーザーがほとんどいないことです。
あなたの質問に対する答えではありませんが、お願いします: .NET でシェル エクステンションを記述しないでください(タスクバーはシェル エクステンションです)。
理由は次のとおりです。
基本的に、あなたは他のアプリを壊しています。
私が理解していることから、タスクバーの場所と値などはレジストリに保存されます(正確な場所を忘れた)ので、特定のレジストリキーを見つけた場合は、その場所を取得し、インストーラーにコンピューターにレジストリキーを挿入して、タスクバーが有効になるようにすることができます。
よく確認すると、exeが背後で実行されている間にgoogleツールバンドが存在するため(GoogleDesktop.exe)、googleまたは検索バーのインスタンス化の方法を主張する場合は、TrayBandSiteServiceを再度確認して、サポートexeを作成する必要があります...