ממשק תכנות היישומים של מערכות ההפעלה Windows מיוצג על ידי קבוצה של פונקציות. כאשר הם נקראים, ניתן ליצור אובייקטים שונים (קבצים, תהליכים, שרשורים, אובייקטים לסנכרון וכו '). כדי לספק גישה מופשטת ומאוחדת מספיק לאובייקטים אלה, הזיהוי שלהם מתבצע באמצעות מתארים - ערכים מספריים "לא אישיים".
נחוץ
- - מתרגם משפת תכנות המאפשר שימוש בממשק ה- API של Windows;
- - אולי פלטפורמת SDK של Windows.
הוראות
שלב 1
קבל ידיות לחלון. ישנן דרכים רבות לעשות זאת. השיטה המדויקת תלויה במטרה הסופית.
השתמש בממשקי ה- API של CreateWindow או CreateWindowEx כדי ליצור חלון. הם מחזירים אחיזה בהצלחה וה- NULL בכישלון.
חפש חלונות ברמה העליונה וחלונות ילדים לפי פרמטרים שונים באמצעות הפונקציות FindWindow ו- FindWindowEx, בהתאמה. בחיפוש מוצלח תתקבל ידית החלון.
ספר חלונות עם פונקציות EnumWindows, EnumChildWindows, EnumThreadWindows. הידיות של החלונות שנמצאו יועברו כפרמטר לפונקציית ההתקשרות.
מצא את הידית לחלון הממוקם במיקום מסוים על המסך. התקשר לאחת מהפונקציות: WindowFromPoint, ChildWindowFromPoint או ChildWindowFromPointEx.
שלב 2
קבל ידיות תהליך. צור תהליך חדש על ידי קריאה לפונקציות ה- API של CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW או CreateProcessWithLogonW. כולם מחזירים ידית לתהליך החדש בשדה hProcess של מבנה PROCESS_INFORMATION, שהמצביע אליו צריך לעבור אליהם כפרמטר האחרון.
מצא את הידית לתהליך לפי המזהה הידוע שלה. השתמש בשיחת OpenProcess. ניתן לקבל את המזהים של כל התהליכים הפועלים, למשל באמצעות הפונקציות CreateToolhelp32Snapshot, Process32First ו- Process32Next בספריית Help Help.
אחזר את ידית הפסאודו של התהליך הנוכחי באמצעות הפונקציה GetCurrentProcess.
שלב 3
קבל מתארים של חוטים. הפונקציות CreateThread ו- CreateRemoteThread יוצרות אשכולות בתהליך שלהן ושל מישהו אחר, בהתאמה, ומחזירות את ידיותיהן. אתה יכול לפתוח שרשור קיים באמצעות המזהה שלו ולקבל את הידית המתאימה באמצעות הפונקציה OpenThread. ידית הפסאודו של הזרימה הנוכחית מוחזרת כאשר קוראים ל- GetCurrentThread.
שלב 4
ניתן להשיג מתארים לקבצים, ספריות, דיסקים פיזיים, נפחי דיסק, קונסולות, משאבי תקשורת (יציאות קלט / פלט), חריצי דואר וצינורות בשם על ידי קריאה לפונקציה יחידה, CreateFile.
שלב 5
מתארים של אובייקט מיפוי קבצים לזיכרון מוחזרים באמצעות שיחות ל- CreateFileMapping ו- OpenFileMapping.
שלב 6
הפונקציות CreateMutex, CreateSemaphore ו- CreateEvent יוצרות, ופונקציות OpenMutex, OpenSemaphore ו- OpenEvent פותחות אובייקטים של סנכרון קיימים (mutexes, semaphores ואירועים). כולם מחזירים מתארים.
שלב 7
כל אובייקטים של GDI (כגון הקשרים של מכשירים, גופנים, מברשות, עפרונות, מפות סיביות תלויי חומרה ועצמאיים, קטעי DIB וכו ') עוברים מניפולציה באמצעות המתאר שלהם. הפונקציות ליצירת אובייקטים של GDI הן רבות ויש להתייעץ במדור MSDN למידע עליהם.
שלב 8
מתאר המתקבל בתהליך אחד, ככלל, לא יכול לשמש בתהליך אחר. עם זאת, במקרים מסוימים ניתן להשיג מתאר כפול המתאים לאובייקט הראשי. התקשר ל- DuplicateHandle API לשכפול הידית. זה יכול לשמש, למשל, כדי לשתף אובייקטים או ערוצים של סינכרון ללא שם בין מספר תהליכים.