با سلام خدمت دوستان عزيزم - سال نو مبارك اميدوارم سال خوبي در پيش رو داشته باشين.
مي خواستم برنامه اي بنويسم كه از برنامه هاي باز شده در حال اجرا عكس بگيره. درست مانند ويندوز Vista كه با گرفتن Alt+Tab پنجره ها رو هم نمايش ميده.
موفق باشين
باي![]()
با سلام خدمت دوستان عزيزم - سال نو مبارك اميدوارم سال خوبي در پيش رو داشته باشين.
مي خواستم برنامه اي بنويسم كه از برنامه هاي باز شده در حال اجرا عكس بگيره. درست مانند ويندوز Vista كه با گرفتن Alt+Tab پنجره ها رو هم نمايش ميده.
موفق باشين
باي![]()
سلام
كسي مانع نوشتن برنامه شده؟!
يا مشكلي وجود دارد؟
سلام
خير كسي مانع نيست. شكر خدا فعلا هم سالمم . ولي مشكل هست. مشكل هم اينكه كه وقتي من توي يه Application ديگه هستم(برنامه خودم) ، چجوري مي تونم از يه Application در حال اجراي ديگه (فقط محيط كاربري اون) Screenshot بگيرم؟ اگه متوجه نشدين يه جور ديگه بگم. پله پله.
موفق باشين
باي
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد بالا تصویر دسکتاپ رو در یک TBitmap برمیگردونه. لینک منبعش اینه:
حالا، کاری که شما باید بکنید اینه که بجای دادن عدد صفر به تابع GetDC، هندل پنجره مورد نظر خودتون رو بزارید، و بجای تنظیم طول و عرض Bitmap بر اساس اندازه Screen، طول و عرض پنجره مربوطه رو بزارید.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای بدست آوردن هندل یک پنجره متناسب با اینکه چه پنجره ایی رو می خواید بگیرید، توابع مختلفی وجود داره، مثل EnumWindows, GetWindow, GetActiveWindow و...
بعد از اینکه هندل پنجره رو بدست آوردید، می تونید با توابعی مثل GetWindowRect یا GetClientRect طول و عرض پنجره مروبطه رو بدست بیارید و در داخل تابع استفاده کنید.
با این تفاسیر کد بالا باید به چیزی مثل این تبدیل بشه:
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Last edited by VDeveloper; 27-03-2008 at 02:45.
با سلام
خيلي ممنون. اتفاقاً من خودم ديروز در MSDN داشتم توابع مربوط به Window ها در Windows Managment رو مي خوندم كه همين توابعي كه شما گفته بودين نيز توش بود. فقط طرز استفادش رو نمي دونستم. براي بدست آوردن تعداد برنامه هاي باز و در حال اجرا هم مي شه از تابع GetALTTABINFO استفاده كرد كه مشخصات پنجره ALT+TAB رو در يك ساختمان قرار ميده.
امتحان مي كنم و نتيجه رو بهتون خبر مي دم.
موفق باشين
باي
سلام
من كد رو بصورت زير نوشتم و جواب ميده. البته مشكلش اينكه حتماً بايد برنامه در حالت Maximized باشه تا عكسش رو ذخيره كنه:
حالا دوتا سوال ديگه:کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
1- چجوري ميشه يه پنجره خارجي را Maximize يا Minimize كرد.
2- چجوري تعداد برنامه هاي Switching- Window رو ميشه پيدا كرد. منظور اينكه كه پنجره هايي كه بشه از اونا عكس گرفت. براي مثال وقتي Jetaudio رو در حالت Try مي برين ديگه Switching-Window نيست. ولي وقتي Minimize مي كنيد Switching-Window هست و در ليست پنجره Alt+Tab مياد.
ممنون
باي
EnumWindowsچجوري تعداد برنامه هاي Switching- Window رو ميشه پيدا كرد. منظور اينكه كه پنجره هايي كه بشه از اونا عكس گرفت.
کد بالا نباید وابستگی به حالت Maximized یا Minimized یک پنجره داشته باشه.من كد رو بصورت زير نوشتم و جواب ميده. البته مشكلش اينكه حتماً بايد برنامه در حالت Maximized باشه تا عكسش رو ذخيره كنه
سلام
متأسفانه EnumWindows رو امتحان كردم. ارورر ميده كه. دو تا پارامتر از نوع Pointer و Integer داره. وقتي كه برنامه رو اجرا مي كني و تابع رو فراخواني مي كني ارورر دسترسي به حافظه مي ده.
در مورد Max و Min شدن هم بايد بگم كه اين كدي كه من نوشتم همون كد شماست كه يخورده تغيير كرده، و فقط در صورتي از پنجره ديگه عكس مي گيره كه اون پنجره در حالت Max يا Normal باشه، و اگه Min باشه عكسي نمي گيره. حالا اين مهم نيست. مهم Handle كردن پنجره هاي ديگه است كه نياز به تعداد و اسمشون داره. فكر كنم براي اسم پنجره ها بشه از تابع GetwindowText استفاده كرد. به هر حال Enumwindow كار نكرد.
سلام
براي Minimize يك پنجره خاص :
اينم مثال براي EnumWindows :کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(يه ليست باكس روي فرم با اسم strlist قرار دهيد)
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
خيلي ممنون نانفورس جان.
مشكل عجيبيه من برنامه رو نوشتم. جوابم ميده. ولي با يه مشكلي جواب ميده. اونم اينكه برنامه ها حتما بايد Max يا Normal باشن. با استفاده از تابع Showwindow من اونا رو Max مي كنم ولي برنامه يهو قاطي مي كنه. البته اين كار كار اصولي و درستي هم نيست. كسي مي دونه من بايد چه تغييري در تابعم بدم تا از برنامه هاي Minmize شده هم عكس بگيره. ( تابع در پست 6 تعريف شده)؟ حتي وقتي برنامه ها Max يا Normal هم هستند وقي با تابع Setforegroundwindow اونو به جلو ميارم، بازم برنامه قاطي ميكنه. مي خواين كد كلي رو بزارم تا ببينيد.
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)