ABA


"הזזת העכבר ע''י סקריפטים?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15960 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15960
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   15:13   21.06.10   
אל הפורום  
  הזזת העכבר ע''י סקריפטים?  
 
   הבנתי שניתן להזיז את העכבר ע"י סקריפטים , ולגרום לעכבר ללחוץ על קונטרולים בחלון אחר...
ממש ליצור mouse macro.
הייתי רוצה לדעת איך עושים את זה, ואשמח לקבל לינקים למדריכים ומאמרים בנושא.

תודה


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אממ זה נקרא mouse hooking (ובהתאמה keyboard hooking). Deuce  22.06.10 05:05 1
     תודה רבה אייל אתחיל לבדוק על זה :) ronen333  22.06.10 10:31 2
     תיקון קטן Mouse Hooking זה לתפוס הודעות של עכבר Net_Boy  22.06.10 20:01 3
         תודה לך עומר, בדיוק שמתי לב לזה שזה לא מתאים לי :) ronen333  22.06.10 22:26 4
             SetCursorPos רק מזיז את המיקום של ה Cursor זה לא עוזר Net_Boy  22.06.10 23:09 5
                 כע רציתי רק להזיז.. ronen333  23.06.10 00:01 6
                 לא משנה פתרתי ronen333  23.06.10 13:58 7
                     או שלא.. אשמח לעזרה ronen333  23.06.10 14:59 8
                         שינתי את המימוש של SendMoveMouse ronen333  23.06.10 15:59 9
                         ד''א אני יודע שצריך לתקן את התנאי בWHILE ל'LOGIC OR' ronen333  23.06.10 18:03 10
  זה עובד נפלא עכשיו! :) אשמח אבל עדיין לקבל מענה בקשר ronen333  23.06.10 20:11 11

       
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   05:05   22.06.10   
אל הפורום  
  1. אממ זה נקרא mouse hooking (ובהתאמה keyboard hooking).  
בתגובה להודעה מספר 0
 
לדוגמא:
http://blogs.msdn.com/b/toub/archive/2006/05/03/589468.aspx






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   10:31   22.06.10   
אל הפורום  
  2. תודה רבה אייל אתחיל לבדוק על זה :)  
בתגובה להודעה מספר 1
 
  

נ.ב- מזל טוב על הצל"ש


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   20:01   22.06.10   
אל הפורום  
  3. תיקון קטן Mouse Hooking זה לתפוס הודעות של עכבר  
בתגובה להודעה מספר 1
 
   מהתהליך שלך או תהליכים אחרים.

כדי לסמלץ הודעות של עכבר יש פונקציה אחת שתעשה בשבילך הכל
SendInput
מסמלצת גם עכבר וגם מקלדת
הסימלוץ מתבצע ברמת החומרה ולכן עובד בצורה מעולה

בהצלחה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   22:26   22.06.10   
אל הפורום  
  4. תודה לך עומר, בדיוק שמתי לב לזה שזה לא מתאים לי :)  
בתגובה להודעה מספר 3
 
   עשיתי WINDOW HOOKING כדי להדביק קונטרולים על חלונות אחרים, עכשיו אני רוצה שהעכבר ילך למכונטרול ששמרתי מצביע אילו.
האם כדאי לי לעשות את הדמיית ההזזה עם SetCursorPos או עם ה SendInput?

תודה רבה לשניכם על העזרה!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   23:09   22.06.10   
אל הפורום  
  5. SetCursorPos רק מזיז את המיקום של ה Cursor זה לא עוזר  
בתגובה להודעה מספר 4
 
   לך הרבה
תשתמש ב SendInput


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   00:01   23.06.10   
אל הפורום  
  6. כע רציתי רק להזיז..  
בתגובה להודעה מספר 5
 
   עשיתי פונקציה שמזיזה את העכבר עד שהיא משווה עם היעד, ועשיתי THREAD.SLEEP כדי שיספיקו לראות אותו זז.
עשיתי בכ"מ עם SENDINPUT בסוף =].
תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   13:58   23.06.10   
אל הפורום  
  7. לא משנה פתרתי  
בתגובה להודעה מספר 5
 
   ערכתי לאחרונה בתאריך 23.06.10 בשעה 14:06 בברכה, ronen333
 
לא משנה XD


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   14:59   23.06.10   
אל הפורום  
  8. או שלא.. אשמח לעזרה  
בתגובה להודעה מספר 7
 
   ערכתי לאחרונה בתאריך 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 לטרד'
אבל זה עדיין לא מראה אותו בתזוזה.. מוזר. למישהו יש רעיון?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   15:59   23.06.10   
אל הפורום  
  9. שינתי את המימוש של SendMoveMouse  
בתגובה להודעה מספר 8
 
   לזה:
SetCursorPos(x, y);

ועכשיו זה כן מעביר את העכבר למקום הנכון.
מה לא בסדר באיך שעשיתי את זה עם SendInput?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   18:03   23.06.10   
אל הפורום  
  10. ד''א אני יודע שצריך לתקן את התנאי בWHILE ל'LOGIC OR'  
בתגובה להודעה מספר 8
 
   ערכתי לאחרונה בתאריך 23.06.10 בשעה 18:11 בברכה, ronen333
 
אין לי מושג למה שמתי את && פה בפורום.

ובסוף הSLEEP כן עובד סבבה... אבל עדיין אשמח להצעות שיפור.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   20:11   23.06.10   
אל הפורום  
  11. זה עובד נפלא עכשיו! :) אשמח אבל עדיין לקבל מענה בקשר  
בתגובה להודעה מספר 0
 
   לSendMoveMouse שכתבתי עם הSENDINPUT.
הפתרון שעשיתי עכשיו הוא עם SetCursorPos...

אה, ולמישהו יש מושג איך אני ניגש ללינק בדפדפן?
אני רוצה שגם לשם העכבר יוכל להגיע.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net