请帮我为 API.I 函数 GetSystemMetrics 创建钩子。我希望当某些应用程序(例如 calc.exe)调用 GetSystemMetrics 时,它们会收到我的值(例如 500x500),而其他应用程序会获得正确的屏幕尺寸。如果有人能告诉我如何使用 C# 和 .net CF 2.0 做到这一点,我会非常高兴。
感谢并希望对您有所帮助。
请帮我为 API.I 函数 GetSystemMetrics 创建钩子。我希望当某些应用程序(例如 calc.exe)调用 GetSystemMetrics 时,它们会收到我的值(例如 500x500),而其他应用程序会获得正确的屏幕尺寸。如果有人能告诉我如何使用 C# 和 .net CF 2.0 做到这一点,我会非常高兴。
感谢并希望对您有所帮助。
即使在本机代码中,您也无法做到这一点(至少在没有丑陋、坏主意、vtable/内核内存黑客可能会或可能不会继续跨操作系统版本工作的情况下)。GetSystemMetrics 调用操作系统以获取有关平台的信息。除了重新编译操作系统并更改这些值之外,您无法“覆盖”这些值并让操作系统报告其他数字(当然,除非操作系统已经以这些数字来自的方式构建你的应用可以修改的地方——比如注册表)。
编辑
根据您的评论,您的实际问题是您正在尝试创建某种形式的“任务栏”类型的应用程序,并且您希望不受您控制的其他应用程序在最大化时不会覆盖您的任务栏。这正是现有资源管理器任务栏的工作方式,所以我的建议是查看默认的 shell 源代码,看看它是如何完成的。
最终结果很可能是您将克隆现有的 shell 代码并修改现有的任务栏以满足您的需要,或者您将创建一个具有您想要的行为的全新 shell 应用程序,但您几乎肯定会去必须更换外壳,而这只能用本机代码来完成。
我认为不编写任何本机代码就不可能在 C#/.NET 中进行。然而,好消息是有一个很棒的库,叫做 madCodeHook,它真的很容易使用。看看http://madshi.net/