רשום פופולרי

בחירת העורך - 2020

MQL4: ניהול מחשבים מיועץ

לפעמים צריך ללחוץ באופן פרוגרמטי על כפתור ביישום צד שלישי, לקרוא את הטקסט מרכיב מסוים, להפעיל מסוף אחר, כל תוכנית אחרת, לפתוח קובץ טקסט, לכבות את המחשב בזמן מסוים ולבצע פעולות אחרות. פונקציית WinAPI ShellExecute, שנמצאת בספריית shell32.dll ובספריית WinUser32.mqh, תעזור לנו כאן. כיצד למכן את כל התהליך הזה - אנו לומדים מהשיעור החדש שלנו בנושא תכנות רובוטים של מט"ח. הנושא יוצא דופן, הוא ירחיב מאוד את כישוריך כמתכנת.

לקבלת מידע נוסף על ShellExecute, עיין בעזרה של MSDN. שם תוכל לקבל מידע מפורט על כל הפונקציות הזמינות מספריית WinUser32.mqh. אתן תיאור קצר של כל אחד מהם:

  • Shellexecute - מבצע פעולה עם הקובץ שצוין;
  • Sendmessage - שולח את ההודעה שצוינה לחלון או לחלונות, ממתין לתגובה;
  • SendNotifyMessage - אותו דבר, אך לא מחכה לתשובה;
  • הודעה שלאחר ההודעה - מכניס את ההודעה לזרם מבלי לחכות לתגובה;
  • keybd_event - מסנתז לחיצה על מקש נתון במקלדת;
  • עכבר_אירוע - מסנתז תנועת עכברים ולחיצות על הכפתורים;
  • Findwindow - מאחזר את הידית לחלון העליונה;
  • SetWindowText - מציב את הטקסט בכותרת החלון;
  • GetWindowText - קורא טקסט משם החלון;
  • אורך GetWindowText - קורא את מספר התווים בכותרת החלון;
  • גט ווינדו - מאחזר ידית חלון שקשורה לחלון שצוין;
  • גטרפנט - מאחזר את הידית של החלון שצוין או הורה;
  • חלון עדכונים - מעדכן את חלון התוכנית;
  • אפשר חלון - מאפשר או מבטל קלט של מקלדת ועכבר בחלון או בשליטה שצוינו;
  • הרס חלון - מבטל את החלון או מסיר ממנו את מיקוד המקלדת;
  • חלון ראווה - מגדיר את מצב התצוגה של החלון שצוין;
  • SetActiveWindow - מפעיל את החלון;
  • חלון הנפשה - מאפשר לך ליצור אפקטים מיוחדים בעת הצגת או הסתרת חלונות;
  • Flashwindow - גורם לחלון שצוין להבהב פעם אחת;
  • חלון סגור - ממזער (אך לא סוגר) את החלון שצוין;
  • חלון מעבר - משנה את המיקום והגודל של החלון שצוין;
  • SetWindowPos - משנה את הגודל והמיקום של ילד, חלון קופץ או עליון;
  • IsWindowVisible - קובע את מצב הראות של החלון שצוין;
  • איזיקון - קובע אם ממוזער החלון שצוין;
  • IsZoomed - קובע אם החלון מוגדל;
  • Setfocus - מגדיר את מיקוד המקלדת לחלון שצוין;
  • גט פוקוס - מאחזר ידית חלון עם מיקוד במקלדת;
  • GetActiveWindow - מקבל את הידית של החלון הפעיל;
  • IsWindowEnabled - קובע אם החלון שצוין לקלט מקלדת ועכבר מופעל;
  • תיבת המסרים - מציג תיבת דו-שיח מודאלית הכוללת סמל מערכת, קבוצת כפתורים והודעה קצרה ליישום ספציפי, כגון מידע על מצב או שגיאה;
  • MessageBeep - משכפל צליל באמצעות רמקול המערכת;
  • GetSystemMetrics - מאחזר את פרמטרי המערכת או פרמטר תצורת המערכת שצוינו;
  • יציאה מחלונות - יציאה של המשתמש האינטראקטיבי, כיבוי המערכת או כיבוי והפעלה מחדש של המערכת;
  • כפתור החלפה - משנה או משחזר את ערך כפתורי העכבר השמאלי והימני.

מה נעשה היום?

לא נשקול כל פונקציה מהרשימה - זה היה לוקח הרבה זמן וחוץ מזה אני לא רוצה לקחת ממך את האפשרות של לימוד עצמאי. לכן אנו פשוט פותרים כמה בעיות פשוטות, כגון:

  • כיבוי או הפעלה מחדש של המחשב;
  • השקת תוכנית נוספת מהטרמינל (למשל, Google Chrome);
  • החלפת שם חלון התוכנית

כן, אלה משימות פשוטות מאוד, אך יכול להיות שהפתרון שלהן משמש דוגמה טובה להפגנת יכולות הספריות ובניית אלגוריתמים מורכבים יותר על סמך דוגמאות אלה.

השקת אפליקציה

הדבר הראשון שצריך לעשות הוא להכריז על פונקצית ShellExecuteW:

// - ייבא פונקציה מ- DLL חיצוני
#import "shell32.dll"
int ShellExecuteW (int hwnd, מחרוזת lp פעולה, מחרוזת lpFile, מחרוזת lpParameters, מחרוזת lpDirectory, int nShowCmd);
# ייבוא

לאחר מכן, בשיטת onStart (), הפעל את התוכנית הרצויה:

ShellExecuteW (NULL, NULL, "C: File Files (x86) GoogleChromeApplicationchrome.exe", NULL, NULL, 1);

בוא נשחרר את התסריט על כל תרשים ונפתח את התוכנית שצוינה.
כעת נכלול את ספריית המסוף WinUser32.mqh בתסריט שלנו:

# כלול

עכשיו עלינו למצוא את ידית החלון של תוכנית ההפעלה. ניתן לעשות זאת באמצעות הפונקציה WinApi - FindWindowW.
בספריית הטרמינל מתוארת הפונקציה כך:

int FindWindowW (מחרוזת lpClassName, מחרוזת lpWindowName);

פירוש הדבר שעליך להזין את שם הכיתה של היישום שלנו בפרמטר המחרוזת lpClassName, ובמקום הפרמטר מחרוזת lpWindowName, שם חלון התוכנית הוא "כרטיסייה חדשה". ניתן למצוא את שם מחלקת היישומים באמצעות כלי עזר כגון: Spy ++, WinSight, WinInspector ואחרים. הורד והתקן את תוכנית Spy ++.

כלי השירות קל מאוד לשימוש. מספיק להפעיל את התוכנית, ללחוץ על הכפתור עם המשקפת ולגרור את המראה לחלון שאנו זקוקים לו, ונראה מיד את שמו, הכיתה ומידע אחר. בפונקציה FindWindowW, באפשרותך לציין גם את שם הכיתה וגם את שם החלון (או בנפרד). יספיק לנו לציין רק את שם החלון:

int handle = FindWindowW (NULL, "כרטיסייה חדשה - Google Chrome");

מידע עם הידית של החלון שנמצא מוצג על המסך. אם הידית היא 0, החלון לא נמצא. לאחר שקיבלת את הידית של החלון הראשי, אתה יכול לעשות כל מה שתרצה עם היישום: חפש את חלון הילד שאנו זקוקים לו, לקרוא ולשלוח טקסט, לחץ על כפתורים באופן תכנותי וכן הלאה.

הוסף עוד פונקציה SetWindowTextW פשוטה לקוד שלנו. זה ישנה את טקסט החלון לכל אחד אחר:

SetWindowTextW (ידית "Chromchik שלי");

כדי לכבות את המחשב, אנו מוצאים את התוכנית shutdown.exe בדיסק. וכמו במקרה הקודם, אנו כותבים בפונקציה את כתובת התוכנית עם הפרמטרים הדרושים לנו:

ShellExecuteW (NULL, NULL, "C: WindowsSystem32shutdown.exe", "- s -t 00", NULL, 1);

כדי לכבות את המחשב, הזן את השורה הבאה:

shutdown.exe -s -t 00

כדי להפעיל מחדש את המחשב, הזן את השורה הבאה:

shutdown.exe -r -t 00

כדי לראות את האפשרויות לגירסאות שונות של Windows - עקוב אחר קישור זה.

מסקנה

תוכלו למצוא פונקציות מעניינות רבות נוספות בספריית WinUser32.mqh שיאפשרו לכם לנהל תוכנית צד שלישי ישירות מיועץ שנכתב ב- MQL4. ניתן למצוא רשימה מלאה של תכונות WinApi ב- MSDN.

כך תוכלו לשלוט באופן מלא במחשב שלכם מתוך סקריפט mql, להפוך את כל ההכנות שלכם למסחר באופן אוטומטי: פתיחת יומני עסקאות, אתרי חדשות בעת פתיחת טרמינל וכן הלאה.

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

צפו בסרטון: Building your own trading bot using MetaTrader 4 and MQL4 (פברואר 2020).

עזוב את ההערה שלך