واضح آرشیو وب فارسی:سایت ریسک: romixery26-03-2008, 02:30 PMبا سلام خدمت دوستان عزيزم - سال نو مبارك اميدوارم سال خوبي در پيش رو داشته باشين. مي خواستم برنامه اي بنويسم كه از برنامه هاي باز شده در حال اجرا عكس بگيره. درست مانند ويندوز Vista كه با گرفتن Alt+Tab پنجره ها رو هم نمايش ميده. موفق باشين باي:11: NoneForce26-03-2008, 05:40 PMسلام كسي مانع نوشتن برنامه شده؟! يا مشكلي وجود دارد؟ romixery26-03-2008, 06:53 PMسلام كسي مانع نوشتن برنامه شده؟! يا مشكلي وجود دارد؟ سلام خير كسي مانع نيست. شكر خدا فعلا هم سالمم . ولي مشكل هست. مشكل هم اينكه كه وقتي من توي يه Application ديگه هستم(برنامه خودم) ، چجوري مي تونم از يه Application در حال اجراي ديگه (فقط محيط كاربري اون) Screenshot بگيرم؟ اگه متوجه نشدين يه جور ديگه بگم. پله پله. موفق باشين باي VDeveloper27-03-2008, 03:42 AM!!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! کد بالا تصویر دسکتاپ رو در یک TBitmap برمیگردونه. لینک منبعش اینه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!حالا، کاری که شما باید بکنید اینه که بجای دادن عدد صفر به تابع GetDC، هندل پنجره مورد نظر خودتون رو بزارید، و بجای تنظیم طول و عرض Bitmap بر اساس اندازه Screen، طول و عرض پنجره مربوطه رو بزارید. برای بدست آوردن هندل یک پنجره متناسب با اینکه چه پنجره ایی رو می خواید بگیرید، توابع مختلفی وجود داره، مثل EnumWindows, GetWindow, GetActiveWindow و... بعد از اینکه هندل پنجره رو بدست آوردید، می تونید با توابعی مثل GetWindowRect یا GetClientRect طول و عرض پنجره مروبطه رو بدست بیارید و در داخل تابع استفاده کنید. با این تفاسیر کد بالا باید به چیزی مثل این تبدیل بشه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! romixery27-03-2008, 11:14 AMبا سلام خيلي ممنون. اتفاقاً من خودم ديروز در MSDN داشتم توابع مربوط به Window ها در Windows Managment رو مي خوندم كه همين توابعي كه شما گفته بودين نيز توش بود. فقط طرز استفادش رو نمي دونستم. براي بدست آوردن تعداد برنامه هاي باز و در حال اجرا هم مي شه از تابع GetALTTABINFO استفاده كرد كه مشخصات پنجره ALT+TAB رو در يك ساختمان قرار ميده. امتحان مي كنم و نتيجه رو بهتون خبر مي دم. موفق باشين باي romixery27-03-2008, 06:06 PMسلام من كد رو بصورت زير نوشتم و جواب ميده. البته مشكلش اينكه حتماً بايد برنامه در حالت Maximized باشه تا عكسش رو ذخيره كنه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! حالا دوتا سوال ديگه: 1- چجوري ميشه يه پنجره خارجي را Maximize يا Minimize كرد. 2- چجوري تعداد برنامه هاي Switching- Window رو ميشه پيدا كرد. منظور اينكه كه پنجره هايي كه بشه از اونا عكس گرفت. براي مثال وقتي Jetaudio رو در حالت Try مي برين ديگه Switching-Window نيست. ولي وقتي Minimize مي كنيد Switching-Window هست و در ليست پنجره Alt+Tab مياد. ممنون باي VDeveloper28-03-2008, 02:35 AMچجوري تعداد برنامه هاي Switching- Window رو ميشه پيدا كرد. منظور اينكه كه پنجره هايي كه بشه از اونا عكس گرفت. EnumWindows من كد رو بصورت زير نوشتم و جواب ميده. البته مشكلش اينكه حتماً بايد برنامه در حالت Maximized باشه تا عكسش رو ذخيره كنه کد بالا نباید وابستگی به حالت Maximized یا Minimized یک پنجره داشته باشه. romixery28-03-2008, 09:45 AMسلام متأسفانه EnumWindows رو امتحان كردم. ارورر ميده كه. دو تا پارامتر از نوع Pointer و Integer داره. وقتي كه برنامه رو اجرا مي كني و تابع رو فراخواني مي كني ارورر دسترسي به حافظه مي ده. در مورد Max و Min شدن هم بايد بگم كه اين كدي كه من نوشتم همون كد شماست كه يخورده تغيير كرده، و فقط در صورتي از پنجره ديگه عكس مي گيره كه اون پنجره در حالت Max يا Normal باشه، و اگه Min باشه عكسي نمي گيره. حالا اين مهم نيست. مهم Handle كردن پنجره هاي ديگه است كه نياز به تعداد و اسمشون داره. فكر كنم براي اسم پنجره ها بشه از تابع GetwindowText استفاده كرد. به هر حال Enumwindow كار نكرد. NoneForce28-03-2008, 10:56 AMسلام براي Minimize يك پنجره خاص : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اينم مثال براي EnumWindows : (يه ليست باكس روي فرم با اسم strlist قرار دهيد) !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! romixery29-03-2008, 10:20 AMسلام خيلي ممنون نانفورس جان. مشكل عجيبيه من برنامه رو نوشتم. جوابم ميده. ولي با يه مشكلي جواب ميده. اونم اينكه برنامه ها حتما بايد Max يا Normal باشن. با استفاده از تابع Showwindow من اونا رو Max مي كنم ولي برنامه يهو قاطي مي كنه. البته اين كار كار اصولي و درستي هم نيست. كسي مي دونه من بايد چه تغييري در تابعم بدم تا از برنامه هاي Minmize شده هم عكس بگيره. ( تابع در پست 6 تعريف شده)؟ حتي وقتي برنامه ها Max يا Normal هم هستند وقي با تابع Setforegroundwindow اونو به جلو ميارم، بازم برنامه قاطي ميكنه. مي خواين كد كلي رو بزارم تا ببينيد. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 481]