WindowFromPoint 在 64 位 .NET Framework 上无法正常工作

问题描述 投票:0回答:2

我用C#和.NET 4.0编写了简单的测试程序。

[DllImport("user32.dll")]
static extern IntPtr WindowFromPoint(int xPoint, int yPoint);

Point pt = MousePosition;
IntPtr w = WindowFromPoint(pt.X, pt.Y);

如果构建为 32 位,则可以工作。但如果它构建为 64 位,则会返回不相关的窗口句柄。有解决办法或替代方案吗?

c# .net winforms 64-bit
2个回答
11
投票

对啊,那不行。 WindowFromPoint() 需要两个参数,它只需要一个。 POINT 类型的结构。 你在 32 位代码中完全是偶然地侥幸逃脱了惩罚,但在 64 位模式下运气就耗尽了,因为它以不同的方式传递参数。

使用 pinvoke.net 网站查找正确的 pinvoke 声明。


0
投票

这对我有用:

[DllImport("user32.dll")]
public static extern IntPtr WindowFromPoint(System.Drawing.Point pt);

并使用:

IntPtr hwnd = WindowFromPoint(new System.Drawing.Point((int)obj.X, (int)obj.Y));

主要文档还说我们永远不应该使用

System.Window.Point
我们应该使用
System.Drawing.Point.

http://pinvoke.net/default.aspx/user32.WindowFromPoint

© www.soinside.com 2019 - 2024. All rights reserved.