2011-01-26 140 views
0

您好我一直在使用類似的代碼在一塊自動化的我一直在努力C#鼠標移動和點擊相對於活動窗口

public static void LeftClick(int x, int y) 
{ 
    Cursor.Position = new System.Drawing.Point(x, y); //<= fails without this 
    mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0); 
    mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0); 
} 

然而,除非我是啞巴這個移動鼠標到x,y從屏幕的左上角,如果活動窗口不是我期望它的位置,會導致問題,任何人都可以提出一種實現相同功能的方法,將鼠標移動到相對於活動窗口的點。

謝謝

回答

1

您需要安裝GetWindowRect()來找出窗口的位置。所以你可以通過窗口位置調整xy。訪問pinvoke.net進行聲明。

+0

嗨,那裏感謝,因爲它似乎GetWindowRect是我需要我訪問了pinvoke.net我只是困惑如何獲得窗口句柄可能有人給我一個指針。 – rs82uk 2011-01-31 22:27:12

0

只需要減去您的目標窗口的位置(相對於屏幕)。

0

你所看到的確實是預期的行爲。 Cursor.Position property描述了光標在屏幕上的位置的座標,而不是相對於您的窗體。

然而,每一個控制暴露了兩個方便的方法,您可以利用屏幕座標和控制座標之間進行轉換:

  • Control.PointToClient method計算指定屏幕點到客戶端的位置座標。使用它將屏幕座標轉換爲客戶端座標(即與您的控件相關的那些座標,例如表單)。

  • Control.PointToScreen method計算指定客戶端到scren座標的位置。使用它將客戶端座標轉換爲屏幕座標。

0

嘗試PointToClient,你正在努力尋找相對點控制的PointToScreen