大家好~
我目前遇到的問題是
我想在應用程式上設定好"應用程式內"的座標
然後在任意拖曳視窗後
我也能模擬滑鼠點擊在相對的座標上
我目前的做法是先取得應用程式的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))
但是執行時卻發現點擊位置和我預期的位置總是有落差
偵錯模式逐行看也找不到問題所在
因此在此向各位大大請教一下
var Mpoint = this.PointToScreen(Cursor.Position) ;
MessageBox.Show($"{Mpoint.X},{Mpoint.Y}"); // 相對螢幕座標