我需要一些帮助来尝试获取记事本窗口的位置。我很确定我需要使用GetWindowRect
功能如下,但我不知道如何使用它。我已将以下内容放入 win 表单项目中,但是myRect.X
, myRect.Y
等里面没有任何东西。我认为他们至少应该有我正在使用的 winform 的 x、y、宽度、高度。但它总是显示 0。老实说,我只是不明白如何使用它。我已经环顾四周大约 5 个小时了。但什么也没学到。
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(HandleRef hWnd, out RECT lpRect);
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left; // x position of upper-left corner
public int Top; // y position of upper-left corner
public int Right; // x position of lower-right corner
public int Bottom; // y position of lower-right corner
}
Rectangle myRect = new Rectangle();
private void button1_Click(object sender, System.EventArgs e)
{
RECT rct;
if(!GetWindowRect(new HandleRef(this, this.Handle), out rct ))
{
MessageBox.Show("ERROR");
return;
}
MessageBox.Show( rct.ToString() );
myRect.X = rct.Left;
myRect.Y = rct.Top;
myRect.Width = rct.Right - rct.Left + 1;
myRect.Height = rct.Bottom - rct.Top + 1;
}
我也尝试过下面的代码,但我从中得到的最多的仍然是DrawingBasicShapes.Form1+Rect
位于NotepadRect
.
然后有真实的GetWindowRect(ptr, ref NotepadRect)
。我用了MessageBox.Show(Convert.ToString(NotepadRect));
得到里面的东西..另一个也一样,我认为这是错误的。但我不知道如何显示其中的内容。
我原以为这里会有数字或其他东西,但我猜不是。如果这是一个新手问题,或者答案对您来说很清楚,我很抱歉。但我通常不使用 dll 导入。所以我正在慢慢学习如何使用它......
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr FindWindow(string strClassName, string strWindowName);
[DllImport("user32.dll")]
public static extern bool GetWindowRect(IntPtr hwnd, ref Rect rectangle);
public struct Rect
{
public int Left { get; set; }
public int Top { get; set; }
public int Right { get; set; }
public int Bottom { get; set; }
}
Process[] processes = Process.GetProcessesByName("notepad");
Process lol = processes[0];
IntPtr ptr = lol.MainWindowHandle;
Rect NotepadRect = new Rect();
GetWindowRect(ptr, ref NotepadRect);