c# - 如何以编程方式检测代码是否在共享 DLL 或 exe 中运行?

标签 c# .net winapi dll registerhotkey

A 有一个 C# 类,它简化了全局热键的处理。 此类使用 Win32-API 函数 RegisterHotKey() 来注册热键。

根据 MSDN,此函数需要一个 0x0000 到 0xBFFF 范围内的 ID 值 从应用程序调用和 0xC000 到 0xFFFF 范围内的 ID 值时 从共享 DLL 调用。 GlobalAddAtom() 可用于在运行时获取ID 在 DLL 中。

为了向类的用户隐藏这种区别,类本身应该决定哪个 注册热键时将使用 ID 范围。好吧,要做到这一点,类(class)必须 能够检测其代码是在应用程序内运行还是在 一个共享的 DLL。

但是如何做到这一点呢?执行此操作的最佳 C#/.NET 方法是什么?

最佳答案

试试这个:

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

MSDN:

Assembly.EntryPoint Property

"Property Value A MethodInfo object that represents the entry point of this assembly. If no entry point is found (for example, the assembly is a DLL), a null reference (Nothing in Visual Basic) is returned. "

关于c# - 如何以编程方式检测代码是否在共享 DLL 或 exe 中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1633490/

相关文章:

c# - 发送电子邮件后清除 MVC 中文本字段中的数据

.net - 基于不同平台的编译问题

c# - 我如何将 Path.Invalid Path Characters 视为字符?

.net - .NET 中 Win32 的 ________ 等价物

c++ - 使用 C++ 获取目录根目录

c# - 隔离功能应用程序不响应 HTTP 调用

c# - 程序在哪里保存他们的 secret 许可证?

c# - 用于将 DataTable 替换为集合的最佳 C# 泛型类?

.net - 对于 .NET ToolStripButton,我可以有多行 "Text"属性吗?

multithreading - 安全优质的设计是否可以响应多个线程?