ערכתי לאחרונה בתאריך 23.06.10 בשעה 15:05 בברכה, ronen333
קודם כל אני רוצה שסמן העכבר יעבור לקונטרול ששמתי על חלון אחר ויש לי מצביע אילו.
את זה עשיתי באמצעות יצירת מלבן על מיקום אמצע המלבן.
ככה:
IntPtr controlPtr = GetControlByNumber(number); #region if there is such control than: if (controlPtr != IntPtr.Zero) { //create rect of the control RECT rect; GetWindowRect(controlPtr, out rect); int xRect = (rect.Right - rect.Left) / 2+ rect.Left; int yRect = (rect.Bottom - rect.Top) / 2 + rect.Top; POINT mouseCurrPoint; GetCursorPos(out mouseCurrPoint); int mouseX, mouseY; mouseX = mouseCurrPoint.x; mouseY = mouseCurrPoint.y; while (mouseX != xRect && mouseY != yRect) { if (mouseX < xRect) mouseX += 1; else if (mouseX > xRect) mouseX -= 1; if (mouseY < yRect) mouseY += 1; else if (mouseY > yRect) mouseY -= 1; SendMoveMouse(mouseX, mouseY); ////to simulate the mouse moving //System.Threading.Thread.Sleep(100); } SendMouseLeftClick(); } #endregion
|
controlPtr הוא מצביע לקונטרול שהדבקתי על החלון האחר.SendMoveMouse שולח SENDINPUT להזזת העכבר, ככה:
public static void SendMoveMouse(int x,int y) { mouse.mi.dx=x; mouse.mi.dy=y; mouse.mi.dwFlags = MOUSEEVENTF.MOVE | MOUSEEVENTF.ABSOLUTE; SendInput(1,ref mouse, Marshal.SizeOf(mouse)); }
|
mouse הוא המבנה שעלי לשלוח לSendInput.
עומדות בפני 2 בעיות:
1.תמיד הסמן מגיעה לפינה השמאלית העליונה, וזו למרות שהפוסישן X,Y של המלבן לא נמצא בבפינה השמאלית. דוג' הערך xRect הוא: 1795, והערך yRect הוא:57.
2.לעשות הדמייה של הזזה כי זה קורה מהר מידי ואז פשוט הסמן קופץ ל"יעד" (כרגע הוא די מזייף ביעד לכן שמתי במרכאות), חשבתי לעשות עם SLEEP לטרד'
אבל זה עדיין לא מראה אותו בתזוזה.. מוזר. למישהו יש רעיון?