GetWindowRect返回NullReferenceException

时间:2017-07-05 16:43:14

标签: c# function pinvoke native

我试图获取附加到javaw.exe进程的某个窗口的大小和位置。

可悲的是,GetWindowRect会抛出一个错误:" NullReferenceException" - 我已经检查过,其中没有一个参数== null。

这是一段代码

调用样本:

NB.Attach( Process.GetProcessesByName("javaw")[0] );

运行静态函数来附加进程:

public static void Attach( Process process ) { FocusProcess = process; FocusWindow = FindWindow(null, process.MainWindowTitle); } public static int[] GetWindowPosition() { WindowRect rect = new WindowRect(); Console.WriteLine(FocusProcess == null); Console.WriteLine(FocusProcess.MainWindowHandle == null); Console.WriteLine(rect==null); GetWindowRect(FocusProcess.MainWindowHandle, out rect); if ( rect.Top != 0 ) { return new int[] { rect.Left, rect.Top }; } return new int[] { 0, 0 }; }

使用示例:

upload_to

在此先感谢,如果涉及到本机功能的使用,我完全缺乏经验。

1 个答案:

答案 0 :(得分:2)

您将结构声明为C#类。那已经是一种参考类型了。因此,当你将它作为一个out param传递时,你现在有了一个双指针。任

  • 从类更改为struct,
  • 或按值传递类。