日期:2014-05-18  浏览次数:21310 次

通过窗口句柄,获取窗口左上角坐标!
朋友们帮我看下代码有什么问题。
C# code
  public partial class DemoForm : Form
    {
        [StructLayout(LayoutKind.Sequential)]
        struct NativeRECT
        {
            public int left;
            public int top;
            public int right;
            public int bottom;
        }

        [Flags]
        enum MouseEventFlag : uint
        {
            Move        = 0x0001,
            LeftDown    = 0x0002,
            LeftUp      = 0x0004,
            RightDown   = 0x0008,
            RightUp     = 0x0010,
            MiddleDown  = 0x0020,
            MiddleUp    = 0x0040,
            XDown       = 0x0080,
            XUp         = 0x0100,
            Wheel       = 0x0800,
            VirtualDesk = 0x4000,
            Absolute    = 0x8000
        }

        [DllImport("user32.dll")]
        static extern bool SetCursorPos(int X, int Y);  

        [DllImport("user32.dll")]
        static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);

        [DllImport("user32.dll")]
        static extern IntPtr FindWindow(string strClass, string strWindow);

        [DllImport("user32.dll")]
        static extern IntPtr FindWindowEx(IntPtr hwndParent, HandleRef hwndChildAfter, string strClass, string strWindow);

        [DllImport("user32.dll")]
        static extern bool GetWindowRect(IntPtr hwnd, ref NativeRECT rect);
........省略部分代码
  private void btnFind_Click(object sender, EventArgs e)
        {
            NativeRECT rect = new NativeRECT();
            IntPtr fdwd=FindWindow(null, "程序");
            txtFind.Text = fdwd.ToString();
            GetWindowRect(fdwd, ref rect);
            txt_X1.Text = rect.left.ToString();//获取左上角X的坐标
            txt_Y1.Text = rect.top.ToString();//获取左上角Y的坐标
            
        }



上面的程序可以获取窗口句柄,但是取到的X和Y坐标都是-32000是什么原因请高手指点?

------解决方案--------------------
那你可以用UISpy先看一下它捕获到的值是多少呢?而不是猜想这个值到底是不是对的。

通常负数是因为窗口被最大化了。你可以把它放小,再捕获一下,就会得到一个合理的坐标值。
------解决方案--------------------
代码没问题。
------解决方案--------------------
没看到问题
------解决方案--------------------
GetWindowPos ,GetWindowRect 和GetWindowPlacement 都可以