Hook for API函数GetSystemMetrics

时间:2012-09-18 12:42:12

标签: c# windows api compact-framework windows-ce

请帮我创建AP.I函数GetSystemMetrics的钩子。 我希望当某个应用程序(例如calc.exe)调用GetSystemMetrics时,它们会收到我的值(例如500x500),其他应用程序会获得正确的屏幕大小。 如果有人能告诉我怎样才能使用C#和.net CF 2.0我会非常高兴。

谢谢,希望对您有所帮助。

2 个答案:

答案 0 :(得分:0)

你不能这样做,即使是在本机代码中(至少不是没有丑陋,糟糕的想法,vtable /内核内存黑客可能会或可能不会继续在各个版本的OS上运行)。 GetSystemMetrics调用操作系统以获取有关该平台的信息。除了重新编译操作系统和更改这些值之外,没有办法可以“覆盖”这些值并让操作系统报告其他数字(当然,除非操作系统已经以这样的方式构建,即这些数字来自你的应用可以修改的地方 - 比如注册表。)

修改

根据您的评论,您的实际问题是您尝试创建某种形式的“任务栏”类型的应用程序,并且您希望控件之外的其他应用程序在最大化时不会覆盖任务栏。这正是现有的Explorer任务栏的工作方式,所以我的建议是查看默认的shell源代码,看看它是如何在那里完成的。

最终结果可能是您将克隆现有的shell代码并修改现有的任务栏以满足您的需求,或者您将创建一个具有您想要的行为的全新shell应用程序,但您几乎肯定会替换shell,而这只能用本机代码完成。

答案 1 :(得分:0)

我不认为在没有编写任何本机代码的情况下可以在C#/ .NET中完成。然而,好消息是有一个名为madCodeHook的精彩库,它非常易于使用。看看http://madshi.net/