Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF/C中的工艺信息错误。同样的解决方案也适用于Win Forms/C#_C#_Wpf_Process_Window_Size - Fatal编程技术网

WPF/C中的工艺信息错误。同样的解决方案也适用于Win Forms/C#

WPF/C中的工艺信息错误。同样的解决方案也适用于Win Forms/C#,c#,wpf,process,window,size,C#,Wpf,Process,Window,Size,好的,我想用c#附加进程。我使用了“系统诊断”类。所以我实际上在做什么: //DEFINITIONS Process[] nameOfProcess; IntPtr ptrToProcessWindow; Process getProcess; //DEFINITIONS //INVOKE `[DllImport("user32.dll")]` `public static extern bool GetWindowRect(IntPtr hwnd, ref Rect rectangle)

好的,我想用c#附加进程。我使用了“系统诊断”类。所以我实际上在做什么:

//DEFINITIONS
Process[] nameOfProcess;
IntPtr ptrToProcessWindow;
Process getProcess;
//DEFINITIONS

//INVOKE
`[DllImport("user32.dll")]`

 `public static extern bool GetWindowRect(IntPtr hwnd, ref Rect rectangle);`
 //INVOKE

//USING CODE

getProcess = nameOfProcess[0];
ptrToProcessWindow = getProcess.MainWindowHandle;
GetWindowRect(ptrToProcessWindow, ref windowRect);
//USING CODE
所以windowRect是:

Rect windowRect = new Rect();
windowRect包含有关应用程序的信息,如:

但是,调试的结果是:

显然,我从过程中得到了错误的值。我已经检查了进程是否被找到,我还检查了“ptrtown”是否正确(并且正确)


我只是将
ptrToProcessWindow
windowRect
传递给函数
GetWindowRect(,)
调试器屏幕截图显示浮点值。这是不正确的,本机窗口仅使用整数成员。因此,对这个问题的一个明显猜测是,您在pinvoke声明中使用了WPF Rect类型。它与RECT严重不匹配,预计会出现垃圾

您必须申报您自己的:

private struct RECT {
    public int Left, Top, Right, Bottom;
}
并将[DllImport]声明改为使用RECT


Fwiw,System.Drawing.Rectangle结构也不匹配,它使用宽度和高度,而不是右侧和底部。它在调试器中看起来更好,垃圾更少。

哦,如果有人想知道进程的名称[]-->Process[]进程名称[]进程名称=进程。GetProcessesByName(进程名称);你已经看过这个答案了吗?这是正确的。固定的。我会投赞成票,但我只是加入了。“改为使用RECT”是什么意思?您必须修复GetWindowRect的声明。把“Rect”改成“Rect”。哦,我明白了。我想是的。谢谢你,先生:)。