11

ユーザー定義のコンテキスト メニュー エントリをレジストリに追加および削除する小さなアプリを作成したいと考えています。これを行うには、何らかの方法で任意の DLL の CLSID を取得する必要があります。これにより、以前のエントリが存在する場合は、新しいエントリを作成する前にバックアップできるようになります。

どういうわけかこの魔法の番号を作成することができましたregsrv32が、私はその番号を自分で取得する方法を見つけられませんでした.

これよりも良いものがあることを願っています:

  1. DLL 名のレジストリをスキャンしています
  2. 見つからない場合は、登録し、再度スキャンしてから、再度登録解除します

DLL の名前が変更されている場合、問題が発生する可能性があります。

4

2 に答える 2

4

REGKIND_NONEを指定して DLL でLoadTypeLibExを呼び出すことを検討してから、返されたITypeLibインターフェイスを介して利用可能なTypeLibInfo情報を取得することを検討できます。

この種のことに関する情報がMSDNにあります。これは古い VB6 に焦点を当てたリンクですが、この方法での COM コンポーネントの検査に関する有用な情報があります。

于 2010-02-17T12:09:57.873 に答える
2

RegOverridePredefKey()を使用して、regsvr32 がレジストリに対して行うことをインターセプトすることができます - RegOverridePredefKey() を呼び出してから、regsvr32 が行うことを再現します - LoadLibrary() COM サーバーを呼び出し、DllRegisterServer() を呼び出して、行われた変更を調べます。RegOverridePredefKey() を使用すると、変更を分離し、永続化させません。

于 2010-02-17T12:17:15.470 に答える