コード例 #1
0
ファイル: WindowsFunction.cs プロジェクト: vexe/linuxizer
        public void MoveWindow_AfterMouse()
        {
            // 1- get a handle to the foreground window.
              // 2- set the mouse pos to the window's center.
              // 3- let the window move with the mouse in a loop, such that:
              // 	win(x) = mouse(x) - win(width)/2
              //  win(y) = mouse(y) - win(height)/2
              // This is because the origin (point of rendering) of the window, is at its top-left corner and NOT its center!
              // Loop ends when the user clicks the left mouse button.

              // 1-
              IntPtr hWnd = WinAPIs.GetForegroundWindow();
              //IntPtr hWnd = WinAPIs.FindWindow(null, "Form1");

              // 2- Then:
              // first we need to get the x, y to the center of the window.
              // to do this, we have to know the width/height of the window.
              // to do this, we could use GetWindowRect which will give us the coords of the bottom right and upper left corners of the window,
              // with some math, we could deduce the width/height of the window.
              // after we do that, we simply set the x, y coords of the mouse to that center.
              RECT wndRect = new RECT();
              WinAPIs.GetWindowRect(hWnd, out wndRect);
              int wndWidth = wndRect.right - wndRect.left;
              int wndHeight = wndRect.bottom - wndRect.top; // cuz the more you go down, the more y value increases.
              Point wndCenter = new Point(wndWidth / 2, wndHeight / 2); // this is the center of the window relative to itself.
              WinAPIs.ClientToScreen(hWnd, out wndCenter); // this will make its center relative to the screen coords.
              WinAPIs.SetCursorPos(wndCenter.X, wndCenter.Y);

              // 3- Moving :)))
              while (true)
              {
            Point cursorPos = new Point();
            WinAPIs.GetCursorPos(out cursorPos);
            int xOffset = cursorPos.X - wndWidth / 2;
            int yOffset = cursorPos.Y - wndHeight / 2;
            WinAPIs.MoveWindow(hWnd, xOffset, yOffset, wndWidth, wndHeight, true);
            Thread.Sleep(25);
              }
        }
コード例 #2
0
ファイル: WinAPIs.cs プロジェクト: vexe/linuxizer
 public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);