הכרות קצרה ל autoit – חלק 2
בכתבה קודמת בנושא הסברנו קצת מה זה בכלל autoit, איך להתקין אותה ואיך להקליט איתה פקודות מאקרו בצורה אוטומטית. כיוון שקיבלתי תגובה נלהבת בעניין (אחת), וכיוון שהבטחתי שיהיה המשך, אז בואו נמשיך !
היום נכנס קצת לקוד עצמו של התוכנה, ולפני שרבים מכם בורחים מהמחשב בצרחות, תנו לי להבטיח לכם שזה הרבה יותר פשוט ממה שזה נשמע. בקוד של autoit, אין כל כך ירידה לפרטים כמו בשאר שפות התוכנה (עד רמה מסוימת כמובן), לדוגמא: התוכנה לא תתפוצץ לכם בפנים אם תשכחו את הסימן ; בסוף פקודה. מבחינת autoit, ירדתם שורה, נגמרה הפקודה. הגיוני, לא ?
אני מראש מבהיר שכל מה שנלמד פה היום מופיע בצורה ברורה ומצוינת בקובץ העזרה המגיע עם autoit. בכלל, אם תנסו לעקוב אחרי סדרת הכתבות האלה שאני רושם, ולקפוץ ראש לתוך עולם ה autoit, אני מבטיח לכם שעות מרובות של נבירה ומציאת פקודות מגניבות בקובץ העזרה הכל כך מפורט הזה. כל מה שאני יודע למדתי משם (גם מדריכים מצוינים יש שם, אבל פה אני כותב בעברית, אז תישארו !)
הרצת סקריפט
קודם כל נבהיר נקודה קטנה, בכתבה הקודמת בנושא דיברנו בעיקר על המקליט פעולות שבא עם autoit, והנקודה שאני רוצה להבהיר היא: המקליט כותב את הפעולות שאתם מבצעים בשפה של autoit, כך שכל פקודה קטנה שתלמדו כאן, ניתן לשלב באחת ההקלטות שלכם (כפתור ימני על הסקריפט שהקלטתם ובחרו edit script וכך תוכלו לערוך את הקוד של ההקלטה), כך שזה שמה שאני הולך לכתוב עליו עכשיו דיי קשור לכתבה הקודמת.
ועכשיו שהבהרתי את זה ואני מרגיש טוב עם עצמי, בואו נריץ סקריפט מסוים קטן ופשוט. לחצו על:
התחל/start –> תוכניות/programs –> לאחר מכן על AutoIt v3 –> ואז על SciTE Script Editor.
ייפתח חלון גדול וריק, כמו פנקס רשימות, שניתן לרשום בו דברים. כמיטב המסורת, בואו ניצור את הפלט המפורסם "Hello world", הקלידו בחלון הריק:
; This is my first script
MsgBox(0, "My First Script!", "Hello World!")
שמרו את הסקריפט במקום נוח, ולאחר מכן תריצו אותו ע"י לחיצה על F5 (או לחיצה כפולה על הקובץ ששמרתם). הפתעה ! נוצרת הודעה על המסך עם הכיתוב hello world.
בואו נרד קצת לפרטים:
התו ; בתחילת משפט – אומר שכל המשפט הוא הערה ולא יפעל עם הסקריפט.
הפקודה MsgBox – יוצרת הודעה, מקבלת 3 פרמטרים שהם חובה: 0 מייצג את סוג ההודעה, נסו לשנות את זה ל 1, 2, 3 וכו' ותריצו כל פעם – פעם תקפוץ הודעה עם yes/no פעם הודעה שגיאה עם Ok ו cancel וכך הלאה. לכו לקובץ העזרה, לטאב של אינדקס והקלידו Msgbox, בצד ימין יופיע ההסבר על הפונקציה ורשימה של כל מספר ומה הוא מייצג.
הפרמטר השני שהיא מקבלת יהיה הכותרת של החלון:
והשלישי הוא הטקסט עצמו.
לא מסובך מדי, נכון?
משחקים עם חלונות
אוקי, עד כאן לא היה כ"כ מרגש, אבל עכשיו מתחיל האקשן:
קודם כל נכיר עוד כלי שאי אפשר בלעדיו שבא עם ה autoit ונקרא AutoIt Window Info וניתן להפעיל אותו מתפריט ההתחלה בתיקיית autoit. כל תפקידו של הכלי הזה עלי אדמות הוא לתת לכם מידע על כל חלון שפתוח במחשב. ולמה זה חשוב? אחד הדברים המרכזים ב autoit הוא אוטומטיזציה של פעולות, בין היתר ע"י מניפולציה של חלונות שונים.
אם נניח, אני רוצה לפתוח ה notepad ולרשום בו כמה משפטים, ולאחר מכן לשמור ולסגור והכל באמצעות ה autoit, איך מבין כל החלונות הפתוחים במערכת autoit יצליח לזהות באיזה חלון צריך לעבוד? בעזרת AutoIt Window Info. איך משתמשים בו? פותחים אותו, ברגע שהוא פתוח, העבירו את העכבר על חלונות שונות והוא יתחיל להציג את המידע עליהם, ברגע שיש לכם את המידע הנכון, לחצו Ctrl+alt+f והחלון יקפא, לאפשר לכם להעתיק ממנו את הנתונים בקלות.
אז בואו נכתוב משהו מעניין, משהו מעניין ויצירתי כמו פתיחת Notepad כתיבת מספר מילים וסגירת התוכנה.
1. צעד ראשון, נריץ notepad :
קובץ ההפעלה והנתיב של Notepad הוא c:/windows/system32/notepad.exe אבל אפשר להריץ אותו אך ורק ע"י הקשת הפקודה Notepad בשורת הפקודה והוא ירוץ. לכן גם autoit במקרה זה יכול להריץ אותו ללא הכתובת המלאה. פתחו סקריפט חדש וריק ושמרו אותו במקום שתזכרו, הקלידו בשורה הראשונה את הפקודה:
Run("notepad.exe")
שמרו את הסקריפט, לחצו F5 על מנת להריץ אותו. נפתח Notepad חדש? מצוין ! אם לא, עברו על התחביר וודאו שביצעתם שמירה לפני הרצת הסקריפט.
2. השגת כותרת החלון של Notepad:
autoit הוא case sensitive וזה אומר שכשרושמים קוד חייבים לשים לב לאותיות קטנות וגדולות: לדוגמא M לא שווה m ב autoit. אם נסתכל לבד על הכותרת של Notepad נשים לב שכותרת החלון היא
Untitled – Notepad ואפשר פשוט להשתמש בזה. אבל אם אתם רוצים להיות בטוחים שאתם רושמים את הכותרת נכון, עדיף פשוט להעתיק את זה מה- info tool. פתחו את ה- info tool, העבירו את העכבר על פני חלון ה notepad והמידע יופיע ב info. לחצו Ctrl+alt+f והמידע ייכנס למצב "freeze" כך שתוכלו לגשת ל info tool ל title ולהעתיק במדויק את שם החלון.
3. המתן עד שהחלון יהיה פעיל:
כדי ש autoit לא סתם יזרוק הקשות מקלדת עוד לפני שהתוכנה עלתה נעשה שלב מקדים. לאחר שיש לנו את שם החלון ב Clipboard שלנו מוכן לשליפה, בואו נגיד ל autoit "תמתין עד שחלון X יהיה זמין", כך:
WinWaitActive("Untitled - Notepad")
הפקודה דיי מסבירה את עצמה, לא? פקודת "חכה עד שהחלון יהיה פעיל" צריכה פרמטר אחד חובה: כותרת החלון, ובמקרה שלנו Untitled – Notepad . בעצם לאחר פקודה זו הסקריפט ייעצר לגמרי עד שלא יופיע במערכת חלון כלשהו עם הכותרת Untitled – Notepad, הסקריפט ימשיך לרוץ ברגע שחלון כזה יופיע. הדבר בעצם עוזר לנו לתזמן פעולות כדי שהפקודות שלנו ייפלו על החלונות הנכונים. אם תרצו לתזמן עצירת סקריפט לפי זמן מסוים תוכלו להשתמש בפקודה:
Sleep(5000)
כאשר המספר בסוגריים מציין מילישניות, ובדוגמא שנתתי, הסקריפט ייעצר ל 5 שניות וימשיך.
4. לאחר שוידאנו שהחלון פעיל, בואו נקליד כמה מילים:
פקודה פשוטה בשם Send מדמה הקשות מקלדת, וזה נראה כך:
Send("I love bitim.co.il")
שימו לב, הטקסט בדוגמא זה הטקסט היחידי שניתן להכניס, סתם. אפשר להקליד מה שתרצו, גם אותיות בעברית יעברו בשלום.
5. נסגור את החלון:
אותו דבר כמו סעיף 3, רק פקודה שונה:
WinClose("Untitled - Notepad")
6. פוקוס על החלון החדש:
כאשר סוגרים חלון של Notepad לאחר שמכניסים טקסט, קופץ חלון ששואל האם אנחנו רוצים לשמור את הקובץ. בואו נכיר דרך קטנה ויעילה לעזור ל autoit להתפקס על החלון הנכון. כרגיל, אנחנו צריכים לספר ל autoit על איזה חלון אנחנו עובדים. אבל שימו לב שהכותרת של החלון שקופץ היא Notepad. כדי לא ליצור בלבול ולייחד את החלון מהחלון הראשי של Notepad, אנחנו נכניס עוד פרמטר לפקודה WinWaitActive, ככה:
WinWaitActive("Notepad", "Cancel")
אז מה עשינו כאן? הלכנו ל info tool והשתמשנו בנתון נוסף ממנו שנקרא visible text. אז עכשיו הכנסנו לפקודה את הפרמטר חובה שזה כותרת החלון, וייחדנו את החלון עוד טיפה בכך שנתנו פקודה שאומרת "אך ורק אם בחלון הזה יש את הטקסט הגלוי הבא: "Cancel"". למה בחרתי דווקא את המילה הזאת? כיוון שבטאב visible text בחלון של ה info אני רואה שהוא בשורה לבד, בלי סימנים מיוחדים שעלולים ליצור לי בעיות ולשבור לי את הקוד, אז למה לא? שימו לב לרשום C גדולה, אחרת זה לא יעבוד.
7. נלחץ על אחד הכפתורים:
על מנת לקצר קצת את הכתבה הזאת, נבחר "לא לשמור". פשוט מאד, על רובם הגדול של הכפתורים הללו בדרך כלל מסומן קו קטן שמסביר איך אפשר לבחור אותם בעזרת צירוף מקשים במקלדת. אם נסתכל מקרוב נראה שהאות n מסומנת עם קו תחתון מתחתיה בכפתור שנקרא "dont save" – משמע שהקשה על alt+n ילחץ על הכפתור. ולכן הפקודה הבאה שלנו תהיה לשלוח את צירוף המקשים הזה, עם פקודה שאנחנו כבר מכירים:
Send("!n")
בטוח שאלתם את עצמכם איי שם בסעיף 4 איך אפשר לשלוח הקשות מקלדת כגון alt, ctrl, F1-12 וכו', והתשובה כמו שאתם רואים היא בעזרת סימנים מיוחדים. אז הסימן ! ייתן לנו לחיצה על alt, הסימן ^ ייתן לנו Ctrl ואם תרצו את הרשימה כולה, גשו בקובץ העזרה לאינדקס וחפשו send. בדף העזרה ישנה טבלה שמסכמת את כל המקשים הידועים לאדם במקלדות.
זהו!
כל הקוד כולו נראה ככה:
Run("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("I love bitim.co.il")
WinClose("Untitled - Notepad")
WinWaitActive("Notepad","Cancel")
Send("!n")
אם ישר קפצתם לסוף ואם לא, תוכלו להעתיק אותו לקובץ סקריפט ב autoit ולהריץ אותו, תראו את ה Notepad נפתח, מופיע קצת טקסט ואז בוום ! וה- Notepad נסגר.
לסיכום
בעזרת הסקריפט המיותר הזה למדנו כמה פקודות חדשות, הנה התקציר:
run – מריץ קובץ, פרמטר החובה שלו זה נתיב הקובץ.
WinWaitActive – מחכה לחלון מסוים שיהיה פעיל, פרמטר חובה שלו זה כותרת החלון שצריך לחכות לו.
Send – שולח הקשות מקלדת.
WinClose – סוגר חלון מסוים, פרמטר חובה שלו זה כותרת החלון לחכות לו.
כמו ששמתם לב, כאשר אני כותב פרמטר חובה אני מתכוון לכך שזהו הנתון היחיד שחייבים לתת כדי שהפקודה תעבוד, אבל כמו שראינו, זה לא אומר שזה הפרמטר היחיד. לכו לכל אחת מהפקודות הללו באינדקס של קובץ העזרה וראו עוד איזה פרמטרים מגניבים קיימים לכל אד מהפונקציות.
קחו בחשבון שאומנם למדנו רק 4 פקודות, אבל בעצם לכל פקודה כזאת ישנה ואריאציה שדומה לה גם מבחינת שם הפקודה וגם מבחינת הפרמטרים ככה שזה זה לא מסובך להתחיל מזה וללמוד על הדרך עוד 40 פקודות. לדוגמא, אם אני זורק run באינדקס של קובץ העזרה אני מקבלגם את RunAs שמפשר לי להריץ תוכנה במשתמש אחר, RunWait עושה אותו דבר אבל עוצר את הסקריפט עד שהתוכנה נסגרת RunDOS_ מפעילה פקודות DOS בחלון נסתר, ועוד ועוד !
סתם בשביל הכיף, שימו לב לגלילה בתמונה הבאה:
כתבה הבאה בסדרה: פונקציות, לולאות ואולי אפילו טבילה קטנה בנושא בניית ממשק גרפי לתוכנה הקטנה שלכם. אל תפספסו.
דרג את הכתבה
אם ביצעתם את המדריך ונהניתם/סבלתם, או בניתם משהו בעקבות הכתבה ורוצים לספר לכולם, או אולי יש לכם רעיון טוב לבניית סקריפט מתוחכם – שלחו לנו תגובה !
קרא עוד:
- הכרות קצרה ל AutoIt
- מדריך ל Autoit – חלק 5
- מדריך ל Autoit – חלק 3
- מדריך ל Autoit – חלק 6 ואחרון
- מדריך ל Autoit – חלק 4
נהנית מהפוסט? ניתן להביע זאת בעזרת השארת תגובה ויצירת המשך דיון, או הרשמה לפיד ה-RSS וקבלת כל הפוסטים ישידות לקורא ה-RSS שלך. Iאם אנין לך קורא RSS, ניתן גם להרשם לעדכונים יומיים בדוא"ל ליחצו כאן להרשמה.












שמע אחי, התוכנה הזאת זה דבר אדיר.. גדול, אהבתי, ויש שם באמת אחלה של מדריך מפורט. תשמע אפשר ליצור עם זה גם דברים הרסניים "להתעללות" זה די פשוט בתוכנה הזו(-;
ohadts השיב:
מאי 30th, 2010 ב 18:08
כן אבל מניסיון כמעט כל אנטיוירוס עולה על זה אם מדובר בפעולה שנחשבת מזיקה.
אבל אפשר בקלות לבנות איתה "מתיחות" מחשב, כמו למשל הקובץ הזה שרץ פעם ברשת, וכאשר הפעלת אותו הוא שאל אותך האם אתה רוצה למחוק את תיקיית windows – וזה היה נראה אמיתי לגמרי.
כמובן שלא משנה מה לחצת הוא היה מתחיל "כאילו" למחוק לך את התיקייה.
דברים כאלה אפשר לבנות בקלות בעזרתה, מכיוון שהוא יודעת ליצור ממשקים גרפיים, וגם לא נראה שאנטיוירוס יזהה משהו כזה כדבר מזיק כי זה לא עושה כלום למחשב.
בהמשך לתגובה שכתבתי על הכתבה המקורית, אני משתמש באוטואיט בעיקר בשביל לנווט בין רזולוציות תצוגה בין הלפ טופ למסך השולחני הגדול יותר ובין המרחקים השונים שלי מול המסך.
בגדול אני מרוצה עד כה אך לעיתים קרובות, כשאני מפעיל סקריפט, נפתח אייקון בשורת המשימות אבל שום דבר לא קורה. אז אני צריך כביכול "לעזור" לתוכנה וללחוץ למשל על המקום הראשון שהיא הייתה צריכה ללחוץ ומשם היא תדע להמשיך לבד. הגעתי למסקנה שבכתיבת פקודות שאינן מזהות חלון ספציפי (כפי שהסברת בהמשך לכתבה) למשל, אני צריך ללחוץ על כפתור ימני בדסקטופ ומשם על העדפות, ואם אני מפעיל סקריפט שהגדרתי ברזולוציית מסך אחת באחרת, הוא מתבלבל ולוחץ לפי הקורדינטות עכבר שהוא מכיר אבל לא רלונטיות לרזולוציה הנוכחית.
אלא אם כן אני עושה משהו לא נכון, כדאי לשים לב לזה.
אביה
ohadts השיב:
יוני 16th, 2010 ב 9:32
היי אביה,
קודם כל, תמיד עדיף למצוא פקודות מאשר לנסות לנווט את העכבר למסכים שאתה שצריך, זה יותר מדויק כמו שאתה שם לב.
אם בכל זאת לנסות לנווט, בעזרה של Autoit מופיעים שתי פקודות:
@DesktopHeight
@DesktopWidth
שמחזירות את גובה ורוחב המסך בפיקסלים, או במילים את רזולוציית המסך שלך. אם תשתמש בזה תוכל לנווט את העכבר באופן יחסי לרזולוציה המוגדרת במחשב באותה עת, ולכן זה יעבוד גם אם הרזולוציה השתנתה.
אבל בוא נתייחס רגע למשפט הראשון שלי, אם תרשום את הפקודה Desk.cpl בחלון ה"Run" של Windows תגיע ישירות לחלון הגדרות התצוגה. וב- Autoit, כל פקודה שאתה מריץ באמצעות ה Run ניתן להריץ בעזרת הפקודה ShellExecute, אז זה יראה כך:
ShellExecute("desk.cpl")
תפעיל את זה וישר ייפתח חלון הגדרות התצוגה.
אם אתה רוצה לנווט בתוך הפקדים של חלון זה, עדיף להשתמש במקלדת ולא בעכבר. כאשר חלון התצוגה פתוח תלחץ ותחזיק Alt ואז יופיע קו קטן מתחת לאות שמייצגת כל פקד, לאחר מכן תוכל להשתמש בפקודה Send על מנת לשלוח את צירוף המקשים הרלוונטי, כמו שמופיע בכתבה. ספר לנו אם הסתדר לך.
ohadts השיב:
יוני 16th, 2010 ב 10:38
הלכתי לתגובה שלך בכתבה הראשונה בסדרה
הבנתי שאתה רוצה סקריפט לשינוי רזולוציות. פשוט הרצתי חיפוש בפורום של Autoit ונתקלתי בסקריפט המעניין הבא:
DisplayChangeRes(1024, 768, 32, 60)
Func DisplayChangeRes($WIDTH, $HEIGHT, $BPP, $FREQ)
$DM_PELSWIDTH = 0x00080000
$DM_PELSHEIGHT = 0x00100000
$DM_BITSPERPEL = 0x00040000
$DM_DISPLAYFREQUENCY = 0x00400000
$CDS_TEST = 0x00000002
$CDS_UPDATEREGISTRY = 0x00000001
$DISP_CHANGE_RESTART = 1
$DISP_CHANGE_SUCCESSFUL = 0
$HWND_BROADCAST = 0xffff
$WM_DISPLAYCHANGE = 0x007E
$DEVMODE = DLLStructCreate ("byte[32];int[10];byte[32];int[6]")
$B = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DLLStructGetPtr ($DEVMODE))
If @error Then
$B = 0
Else
$B = $B[0]
EndIf
If $B 0 Then
DllStructSetData ($DEVMODE, 2, BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY), 5)
DllStructSetData ($DEVMODE, 4, $WIDTH, 2)
DllStructSetData ($DEVMODE, 4, $HEIGHT, 3)
DllStructSetData ($DEVMODE, 4, $BPP, 1)
DllStructSetData ($DEVMODE, 4, $FREQ, 5)
$B = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DLLStructGetPtr ($DEVMODE), "int", $CDS_TEST)
If @error Then
$B = -1
Else
$B = $B[0]
EndIf
Select
Case $B = $DISP_CHANGE_RESTART
$DEVMODE = ""
Return 2
Case $B = $DISP_CHANGE_SUCCESSFUL
DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DLLStructGetPtr ($DEVMODE), "int", $CDS_UPDATEREGISTRY)
DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
"int", $BPP, "int", $HEIGHT * 2 ^ 16 + $WIDTH)
$DEVMODE = ""
Return 1
Case Else
$DEVMODE = ""
Return $B
EndSelect
EndIf
EndFunc ;==>DisplayChangeRes
פשוט תעתיק את הקוד לסקריפט חדש, תפעיל, והרזולוציה תשתנה ל 1024 על 768 ב 60 הרץ ו 32 ביט עומק צבע (שים לב לפרמטרים האלה בשורה הראשונה).
אתה יכול לשנות לפרמטרים משלך, אבל בזהירות, אני ממליץ לא לשנות את עומק הצבע למשהו לא "תקני" (32 או 16 בלבד, 32 יותר מקובל היום).
לא לשנות את הרזולוציה ליחס רוחב/גובה לא מקובל (פשוט תסתכל על שילוב יחס רוחב/גובה שהמחשב שלך מסוגל לעבוד בהם ותשתמש רק באחת מהאופציות האלה).
ולא לשנות את הקצב רענון מסך - 60 הרץ הוא אזור בטוח שמרבית המסכים/טלוויזיות מסוגלות לקבל, יותר/פחות/לא תקני ותקבל מסך שחור עם הודעה מהמסך שהוא לא מסוגל להציג תמונה, זה מחוץ לטווח שלו.
ואני אומר בזהירות כיוון שלהבדיל מהשינוי תצוגות שאתה עושה ב Windows ואתה מוגבל מראש לסטנדרטים בשוק, פה יש לך יד חופשית. כמו כן ב Windows אתה מקבל הודעה שמחזירה אותך למצב הקודם אם לא לחצת כן במשך 15 שניות, בסקריפט זה השינוי הוא קבוע ומיידי !
ביטים יקר
ניסיתי את הסקריפט שהצעת, קיבלתי שגיאה בתנאי שבשורה 20, אני מקווה שלא חירבתי את הסקריפט אבל פשוט מחקתי את ה ,0, שמופיע שם והכל עובד פיקס.
מה אתה אומר?
ohadts השיב:
יוני 27th, 2010 ב 16:35
אביה,
צודק, יש טעות בקוד. בשורה 20 צריך להחליף את השורה:
If $B 0 Then
לשורה הזאת:
If $B <> 0 Then
אני חושב שזה עובד לך כי שינית את התנאי ל if $B – שזה תמיד True ולכן הסקריפט המשיך.
רצוי שהתנאי "If $B <> 0 Then" יופיע כי הוא גורם לסקריפט להיעצר אם יש Error מסוג כלשהו.
שיניתי לשונה מאפס כמו שכתבת ועכשיו זה עובד גם…
מגניב, תודה
ohadts השיב:
יוני 27th, 2010 ב 20:54
בכיף.
מגניב
בשלב 7 בכתבה לפני הפקודה
Send("!n")
אתה מציין
"על רובם הגדול של הכפתורים הללו בדרך כלל מסומן קו קטן שמסביר איך אפשר לבחור אותם בעזרת צירוף מקשים במקלדת."
יש לי ווינדוס בעברית ללא שום סימון על הכפתורים
מה עושים במקרה כזה?
אוהד צבעוני השיב:
אוקטובר 31st, 2010 ב 14:35
אין קשר לעברית אנגלית.
כאשר קופץ לך חלון שכזה, תלחץ ותחזיק את הכפתור Alt, והקו הקטן יופיע.
כמובן שאם התוכנה שאתה עובד עליה לא תומכת בזה, אז אין… אבל זה נדיר מאד, וכמעט לכל דבר ב Windows יש את זה.
אתה צודק
הקו הקטן מופיע אבל רק בשני כפתורים אבל לא ב"ביטול"
גם ניסיון ללחוץ alt+א (אל תשמור) לא עולה יפה
האם יש טעות בקוד?
run("notepad.exe")
winwaitactive("ללא שם – פנקס רשימות")
Send("I love bitim.co.il")
winclose("ללא שם – פנקס רשימות")
winwaitactive("פנקס רשימות", "ביטול")
send("!א")
אוהד צבעוני השיב:
אוקטובר 31st, 2010 ב 17:28
פתאום שמתי לב שאין לידי שום מחשב בעברית…
בסוף מצאתי אחד, אבל לא יכולתי להתקין עליו Autoit ולהתעלל בו עד מציאת פתרון, אבל זאת האבחנה שלי:
קודם כל "אל תשמור" יהיה alt+ל, וזה לא יעבוד אם באותו הרגע השפה של Windows תהיה על אנגלית (שזה הגיוני כי אז אתה שולח בעצם alt+k). ישר חשבתי על דברים מוגזמים כמו לנסות להקיש את קוד האסקי של האות ל (Alt+140) ולראות אם זה עובד או כל מיני שטויות כאלה. ואז נפל האסימון שיותר פשוט יהיה לשלוח את פקודת ה Send פעם אחת, אחרי זה לשלוח Alt+Shift ואז לשלוח את אותה פקודת ה Send שוב.
ככה פעם אחת הפקודה תשלח באנגלית ולא יקרה כלום, ופעם שנייה בעברית וזה יעבוד (או להיפך אם המחשב שלך היה על עברית, זה לא באמת משנה מה יקרה קודם).
לגבי הביטול, פשוט תשלח Escape, הפקודה נראית כך:
send({esc})
ניצן השיב:
אוקטובר 31st, 2010 ב 23:24
זה באמת מוזר windows בעברית
תודה על העזרה
ניצן השיב:
נובמבר 1st, 2010 ב 1:03
run("notepad.exe")
winwaitactive("ללא שם – פנקס רשימות")
Send("I love bitim.co.il")
winclose("ללא שם – פנקס רשימות")
winwaitactive("פנקס רשימות", "ביטול")
send("!+")
send("!א")
send("!+")
לא עבד
אוהד צבעוני השיב:
נובמבר 1st, 2010 ב 6:49
send("!ל")
בתגובה שלי התכוונתי ל:
send("!ל")
send("!+")
send("!ל")
ככה אתה מכסה את 2 המצבים
אוהד צבעוני השיב:
נובמבר 1st, 2010 ב 9:10
אבל שכח מזה
עכשיו בדקתי את הדברים לעומק, כי מצאתי מחשב בעברית שאני יכול להתעלל בו עם Autoit.
בלי שינוי שפה, בלי כלום – ההשערה הראשונה שלי עובדת, אתה יכול לשלוח את האות "ל" או "כ" ע"י שליחת קוד ההאסקי שלהם.
כדי לשלוח ל תרשום:
send("{ASC 140}")
כדי לשלוח כ תרשום:
send("{ASC 139}")
winwaitactive("פנקס רשימות","ביטול")
send("! + chr(224)")
עושה משהו אבל לא "אל תשמור" ..
אוהד תוכל לרשום לי את הקוד שעבד בשבילך ?
אוהד צבעוני השיב:
נובמבר 1st, 2010 ב 14:54
היי ניצן, הקוד שעבד אצלי הוא זה שמופיע בכתבה, אבל זה לא עוזר לך כי ה Windows שלך בעברית ושלי באנגלית.
תרשום מה שרשמתי למעלה, זה לפי ה UNICODE, אם אתה רוצה לא, תרשום:
send("!{ASC 140}")
אם אתה רוצה כן:
send("!{ASC 139}")
אם אתה רוצה לבטל:
send("{ESC}")