4

グローバル ホット キーの処理を簡素化する C# クラスがあります。このクラスは、Win32-API 関数を使用RegisterHotKey()してホット キーを登録します。

MSDN によると、この関数は、アプリケーションから呼び出す場合は 0x0000 から 0xBFFF の範囲の ID 値を必要とし、共有 DLL から呼び出す場合は 0xC000 から 0xFFFF の範囲の ID 値を必要とします。GlobalAddAtom()DLL で実行する場合は、ID を取得するために使用できます。

この区別をクラスのユーザーから隠すには、クラス自体が、ホット キーを登録するときに使用する ID 範囲を決定する必要があります。これを行うには、コードがアプリケーション内で実行されているか、共有 DLL 内で実行されているかをクラスが検出できる必要があります。

しかし、これを行う方法は?これを行うための最良の C#/.NET の方法は何ですか?

4

3 に答える 3

3

これを試して:

bool isDll = this.GetType().Assembly.EntryPoint == null;

MSDN:

Assembly.EntryPoint プロパティ

"プロパティ値このアセンブリのエントリ ポイントを表す MethodInfo オブジェクト。エントリ ポイントが見つからない場合 (たとえば、アセンブリが DLL の場合)、null 参照 (Visual Basic では Nothing) が返されます。"

于 2009-10-27T20:45:23.613 に答える
1

Philipの回答を完成させる:

関数を呼び出しているアセンブリの参照を取得する必要があるため、コードは次のようになります。

Assembly assembly = Assembly.GetCallingAssembly();
Boolean isDll = assembly.EntryPoint == null;

お役に立てれば。

リカルド・ラセルダ・カステロ・ブランコ

于 2009-10-27T22:29:56.813 に答える