screen capture

dragonight4

New member
screen capture

אני מנסה בvisual c++ לקרוא פיקסלים שנמצאים על המסך, שתוכנה או משחק אחרים ציירו, כמו לקחת screenshot של משחק. איך אפשר לגשת לפיקסלים שהוא שם על המסך? ואם המשחק משתמש בdirectx על מסך מלא? הצלחתי לגשת רק לשולחן עבודה והחלונות שמעל, לא למשחקים של מסך מלא... זה לא אמור להיות מסובך אם מישהו ידע לעזור לי, תודה.
 

voguemaster

New member
הוא רוצה לגשת לתמונת מסך של משחק

ואת זה צריך לבצע בצורה הבאה: 1. לקבל ידית (HANDLE) אל ה-primary surface שמוצג כרגע. 2. לנעול אותו (לבצע lpSurface->lock() ) 3. להעתיק את התוכן שלו תוך התחשבות ב-pixel stride. לא מסובך אבל גם לא טריויאלי לחלוטין. ובכלל, אם זה משחק קיים ולא משהו שהוא כתב אז להשיג את הידית ל-primary surface זה טיפה מסובך.
 

dragonight4

New member
מתקרב...

בשיטה עם hdc וGetPixel זה עובד אבל רק לשולחן עבודה, לא למשחקים. השיטה השנייה יותר קרובה, הצלחתי לעשות איתה capture לשולחן עבודה, רק... איך משיגים את הידית ל-primary surface של משחק שלא אני כתבתי?
 

voguemaster

New member
reverse code engineering

צריך למצוא בקוד של התוכנה הרצה את ה-handle. לא קל... באופן עקרוני הייתי מחפש קריאות ל-flip כדי לנסות למצוא אותה. אבל זה סתם רעיון שזרקתי בשניה ורבע..
 

dragonight4

New member
אבל

כל פעם שמריצים את המשחק זה יכול להיות handle אחר... נו זה אפשרי לגשת לprimary surface, איך התוכנות לצילום מסך עושות את זה?
 

voguemaster

New member
באמת שאין לי מושג

לא חקרתי את זה עד כדי כך לעומק. בכל מקרה, זה שהערך של ה-HANDLE אחר כל פעם זה ממש לא בעייתי.. לוקחים אותו תמיד מאותו מקום..
 

dragonight4

New member
עקיפת הבעיה

מצאתי שיטה לעקוף את הבעיה, ע"י שימוש בכפתור הקסמים במקלדת printscreen ואז לקיחת התמונה מהclipboard
היי, זה עובד...
 

dragonight4

New member
התכוונתי

התכוונתי שתוכנה עושה את זה, לא אני.... חחחחח התוכנה שלי מאתרת לחיצה על הכפתור ואז בעצמה פותחת את הclipboard ומוציאה את התמונה, ואז יכולה לעבוד עליה לצרכיה...
 

IdanR

New member
עוד דרך קצת...

קצת כפייתית, היא להשתמש בReadProcessMemory בשביל לגלות איכשהו את הhandle, אבל זה לא מספיק, כי הhandle הוא עבור process מסוים. לכן יש צורך להשתמש בDuplicateHandle כדי לשכפל אותו אלייך.
 
למעלה