Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
464 views
in Technique[技术] by (71.8m points)

c# - Finding Monitor/Screen on which mouse pointer is present

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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...