Finding Monitor/Screen on which mouse pointer is present

不问归期 提交于 2019-12-20 02:41:40

问题


I will start from beginning, I aw working on an application which will span over multiple monitors, each monitor will contain a single WPF window and these windows are controled using a single viewmodel class. now lets say i have a button on all the windows at 200,300 (x,y) and i want that this button should be responsible for a tool on same window, while all rest are responsible for the application. When i try to get current mouse position or last click position i get position relative to the current monitor , i.e. in this case 200,300, irrespective of in what screen i am on.

following sre the code i tried for getting mouse position

  1. [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    internal static extern bool GetCursorPos(ref Win32Point pt);
    
    [StructLayout(LayoutKind.Sequential)]
    internal struct Win32Point
    {
        public Int32 X;
        public Int32 Y;
    };
    
    public static Point GetMousePosition()
    {
        Win32Point w32Mouse = new Win32Point();
        GetCursorPos(ref w32Mouse);
        return new Point(w32Mouse.X, w32Mouse.Y);
    }
    
  2. Point point = Control.MousePosition;

  3. Mouse.GetPosition(null);

following is the code which should return me the screen no.

private int ConvertMousePointToScreenIndex(System.Windows.Point mousePoint)
    {
        //first get all the screens 
        System.Drawing.Rectangle ret;

        for (int i = 1; i <= System.Windows.Forms.Screen.AllScreens.Count(); i++)
        {
            ret = System.Windows.Forms.Screen.AllScreens[i - 1].Bounds;
            if (ret.Contains(new System.Drawing.Point((int)mousePoint.X, (int)mousePoint.Y)))
                return i - 1;
        }
        return 0;
    }

I always get screen as 0 :( Please help me in getting appropriate value


回答1:


Could you use the Screen static class?

For example, something like:

Screen s = Screen.FromPoint(Cursor.Position);

Or get the current screen from a particular form using:

Screen s = Screen.FromControl(this);

With this being your Form control.

http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.aspx




回答2:


Thanks KnottytOmo, it worked now, may be there was something else wrong at that moment. I changed my code to

 private int ConvertMousePointToScreenIndex(Point mousePoint)
    {
        //first get all the screens 
        System.Drawing.Rectangle ret;

        for (int i = 1; i <= Screen.AllScreens.Count(); i++)
        {
            ret = Screen.AllScreens[i - 1].Bounds;
            if (ret.Contains(mousePoint))
                return i - 1;
        }
        return 0;
    }

and called it as ConvertMousePointToScreenIndex(System.Windows.Forms.Cursor.Position);



来源:https://stackoverflow.com/questions/26402955/finding-monitor-screen-on-which-mouse-pointer-is-present

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!