iT邦幫忙

0

C# 取得應用程式相對座標

  • 分享至 

  • xImage

大家好~
我目前遇到的問題是
我想在應用程式上設定好"應用程式內"的座標
然後在任意拖曳視窗後
我也能模擬滑鼠點擊在相對的座標上

我目前的做法是先取得應用程式的Rect值
(X,Y,Left,Top)
再取得現在滑鼠的座標
並計算應用程式內的座標

Rect WindowRect = new Rect();
private void SetPoint()
{
    try
    {

        //取得滑鼠座標
        Point point = mouse.CurrentPosition();

        //取得應用程式Rect
        GetWindowRect(ProcessName);
        
        //計算應用程式內座標
        int X = point.X  - WindowRect.Left;
        int Y = point.Y - WindowRect.Top;
    }
    catch (Exception ex)
    {
        log.Error(ex);
    }
}

private void GetWindowRect(string _ProcessName)
{
    try
    {
        Process process = Process.GetProcessesByName(_ProcessName)[0];

        // 取得應用程式主視窗的 AutomationElement
        var mainWindow = AutomationElement.RootElement.FindFirst(
            TreeScope.Children,
            new PropertyCondition(AutomationElement.ProcessIdProperty, process.Id));

        // 獲取主視窗的大小和位置
        WindowRect = mainWindow.Current.BoundingRectangle;

        Console.WriteLine("Left: " + WindowRect.Left);
        Console.WriteLine("Top: " + WindowRect.Top);
        Console.WriteLine("Width: " + WindowRect.Width);
        Console.WriteLine("Height: " + WindowRect.Height);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
        log.Error(ex);
    }
}

然後在模擬滑鼠點擊時
再用先前取得的應用程式相對座標
計算實際的滑鼠位置

//_point為上面取得的應用程式內相對座標

Point point = new Point((int)(_point.X + WindowRect.Left), (int)(_point.Y + WindowRect.Top))

但是執行時卻發現點擊位置和我預期的位置總是有落差
偵錯模式逐行看也找不到問題所在
因此在此向各位大大請教一下

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
japhenchen
iT邦超人 1 級 ‧ 2023-06-12 15:44:36
最佳解答
            var Mpoint = this.PointToScreen(Cursor.Position) ;
            MessageBox.Show($"{Mpoint.X},{Mpoint.Y}");  // 相對螢幕座標
皓皓 iT邦新手 2 級 ‧ 2023-06-13 11:15:55 檢舉

非常感謝~

我要發表回答

立即登入回答