特定のツールバーを開く(または閉じる)ようにWindowsタスクバーにプログラムで指示するにはどうすればよいですか?
質問
タスクバーで実行されるツールバーを作成しました。残念ながら、インストール後、ユーザーは手動で有効にする必要があります。エクスプローラーに特定のツールバーを開く(または閉じる)ように指示する方法はありますか?
インストールが完了したら、インストーラーであるNSISがツールバーをオンにしたいのですが(プラグインが必要だと思います)。
また、たとえば複数のユーザーがPCを共有する企業環境で、すべてのユーザーに対してツールバーを自動的に有効にできるかどうかも知りたいです。
解決
- このCodeProjectコメントは、キー押下のシミュレーション
- Vista +にはこれを行うためのAPIがあり、 ShowDeskBand および HideDeskBand
-
編集:このコードは、デスクバンドオブジェクトを追加できるようになりました(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への同様の呼び出しでもこのトリックを行うことは理にかなっていますが、現時点では、そのコードを機能させることはできません。別の問題:追加したデスクバンドは、追加したアプリケーションが閉じると閉じます。
他のヒント
この記事をご覧ください。 Vistaでは
今は正確なURLが見つかりませんが、PDC2008については、基本的にこれが特に有効になっていないため、ランダムプログラムがユーザーの同意なしにタスクバーに入力できないように議論されていたことを思い出します。
これの副作用は、ごく少数のユーザーがデフォルトでWMPデスクバーを有効にすることです。
私が理解していることから、タスクバーの場所や値などはレジストリに保存されているので(正確な場所を忘れてしまいました)、特定のレジストリキーを見つけた場合、その場所を取得し、インストーラーにコンピューター上のレジストリキーを挿入させて、タスクバー有効になっています。
よくチェックすると、exeが背後で実行されている間(googleDesktop.exe)googleツールバンドが存在するため、googleまたは検索バーのインスタンス化の方法を主張する場合は、TrayBandSiteServiceを再度確認してサポートexeを作成する必要があります...