2 回答

TA貢獻1993條經驗 獲得超6個贊
[DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
上邊是一個外部方法;
使用mouse_event時屏幕絕對坐標如何計算
[DllImport("user32", EntryPoint="mouse_event")]
public static extern void mouse_event (
int dwFlags,
int dx,
int dy,
int cButtons,
int dwExtraInfo
);
MOOSE_EVENTF_ABSOLOTE:表明參數dX,dy含有規范化的絕對坐標。如果不設置此位,參數含有相對數據:相對于上次位置的改動位置。此標志可被設置,也可不設置,不管鼠標的類型或與系統相連的類似于鼠標的設備的類型如何。要得到關于相對鼠標動作的信息,參見下面備注部分。
MOOSEEVENTFMOVE:表明發生移動。
M00SEEVENTF_LEFTDOWN:表明接按下鼠標左鍵。
M00SEEVENTF_LEFTUP:表明松開鼠標左鍵。
MOOSEEVENTF_RIGHTDOWN:表明按下鼠標右鍵。
MOOSEEVENTF_RIGHTUP:表明松開鼠標右鍵。
MOOSEEVENTF_MIDDLEDOWN:表明按下鼠標中鍵。
MOOSEEVENTF_MIDDLEUP:表明松開鼠標中鍵。
MOOSEEVENTF_WHEEL:在Windows NT中如果鼠標有一個輪,表明鼠標輪被移動。移動的數量由dwData給出。
dx:指定鼠標沿x軸的絕對位置或者從上次鼠標事件產生以來移動的數量,依賴于MOOSEEVENTF_ABSOLOTE的設置。給出的絕對數據作為鼠標的實際X坐標;給出的相對數據作為移動的mickeys數。一個mickey表示鼠標移動的數量,表明鼠標已經移動。
dy:指定鼠標沿y軸的絕對位置或者從上次鼠標事件產生以來移動的數量,依賴于MOOSEEVENTF_ABSOLVTE的設置。給出的絕對數據作為鼠標的實際y坐標,給出的相對數據作為移動的mickeys數。
dwData:如果dwFlags為MOOSEEVENTF_WHEEL,則dwData指定鼠標輪移動的數量。正值表明鼠標輪向前轉動,即遠離用戶的方向;負值表明鼠標輪向后轉動,即朝向用戶。一個輪擊定義為WHEEL_DELTA,即120。
如果dwFlagsS不是MOOSEEVENTF_WHEEL,則dWData應為零。
dwExtralnfo:指定與鼠標事件相關的附加32位值。應用程序調用函數GetMessgeExtrajnfo來獲得此附加信息。
看完幫助還是不知道怎么計算dx和dy,下面給出C++的代碼以供參考:
cursor.X = static_cast<unsigned short>( position.point.x * 65535 / pimpl->desktopSize.width );
cursor.Y = static_cast<unsigned short>( position.point.y * 65535 / pimpl->desktopSize.height );

TA貢獻1813條經驗 獲得超2個贊
告訴你可以使用API:PostMessage 達到目的
PostMessage(句柄,事件,參數1,參數2)
實例:
PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(288, 455));
PostMessage(hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(288, 455));
這里是坐標是控件內的相對坐標,控件左上角為0,0
- 2 回答
- 0 關注
- 156 瀏覽
添加回答
舉報