PDA

View Full Version : سوال: مشکل با EnumChildWindows



mohammad_kazem
سه شنبه 15 دی 1394, 09:24 صبح
با سلام
دوستان کسی با ویندوز ای پی آی EnumChildWindows کار کرده؟ باهاش مشکل دارم. پارامترهاش چی هستن؟ چطوری باید بهش پارامتر بدیم. این بحث بازگشتی که داره چطوری باید باهاش کار کرد؟
من یه برنامه دارم که توش با فشردن یه دکمه ، یک پنجره جدید میشه. میخوام هندل اون پنجره جدید رو پیدا کنم. بعد از سرچ کردن به نتیجه رسیدم که یکی از راه های بدست اوردن این هندل EnumChildWindows هست. کسی میتونه راهنمایی کنه؟ ایا راه حل دیگه ای هم وجود داره؟
با تشکر فراوان

mohammad_kazem
سه شنبه 15 دی 1394, 09:30 صبح
دوستان لطفا حتی المقدور سورس بدین. چون این روش هایی که توی اینترنت هستن رو امتحان کردم ولی به جواب نرسیدم. متشکر

plus
چهارشنبه 16 دی 1394, 05:18 صبح
بیشتر توضیح بدین، برنامه ای که دارین سورسش رو دارین یا نه؟

EnumChildWindows برای شمارش و دسترسی به پنجره های فرزند یک پنجره هست، با این اوصاف فکر نمیکنم ربطی به نیاز شما داشته باشه. اگه برنامه مربوط به خود شما نیست و سورسش رو ندارین میتونید با روش هایی مثل استفاده از FindWindow و یا WindowFromPoint به هندل پنجره مورد نظر دسترسی داشته باشید. اگه بیشتر توضیح بدین بهتر میشه راهنمایی کرد.

mohammad_kazem
چهارشنبه 16 دی 1394, 10:14 صبح
بیشتر توضیح بدین، برنامه ای که دارین سورسش رو دارین یا نه؟

EnumChildWindows برای شمارش و دسترسی به پنجره های فرزند یک پنجره هست، با این اوصاف فکر نمیکنم ربطی به نیاز شما داشته باشه. اگه برنامه مربوط به خود شما نیست و سورسش رو ندارین میتونید با روش هایی مثل استفاده از FindWindow و یا WindowFromPoint به هندل پنجره مورد نظر دسترسی داشته باشید. اگه بیشتر توضیح بدین بهتر میشه راهنمایی کرد.


سلام
برنامه مال یه شرکت چینی و سورسش رو ندارم. وقتی برنامه باز میشه ، یک منوی درختی در سمت چپ وجود داره(تقریبا چیزی شبیه به رجیستری ویندوز). روی هر کدوم از منوها که کلیک بشه یک پنجره جدید در سمت راست باز میشه. توی یکی ازین پنجره ها که من بهش نیاز دارم یک تکست ادیتور وجود داره که باید چیزی توش تایپ بشه و مراحل بعدی صورت بگیره
حالا میخوام هندل همین پنجره که بهش نیاز دارم رو پیدا کنم که یه خرده اذیتم میکنه. اگه ممکنه کمک کنید
با تشکر فراوان

plus
چهارشنبه 16 دی 1394, 14:38 عصر
سلام. کاری که میخواین بکنید، توضیح مرحله به مرحله ش زمان بر هست، من میتونم به صورت کلی راهنمایی کنم، خودتون باید برین دنبالش و البته توضیح کامل تک تک توابع به صورت جزئی در MSDN موجود هست (برای مثالhttps://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=win32+api+FindWindow). اگه در مورد خاصی مشکل داشتین بفرمایین.
ابتدا باید هندل پنجره اصلی رو پیدا کنید. روش های مختلفی هست، میتونید برای مثال از FindWindow و یا WindowFromPoint استفاده کنید. بعد از اون میتونید با EnumChildWindows پله پله به پنجره مورد نظر (ListView) برسید. اگه خوش شانس باشید و اون یک Win32 ListView باشه میتونید با SendMessage با ارسال پیغام های مربوط به ListView، آیتم مورد نظر رو پیدا و انتخاب کنید. بعد از اون، به همین ترتیب Text Editor مورد نظر رو پیدا کنید و باز اگه یک Win32 Edit باشه با ارسال پیغام های مربوط به Edit، متنش رو تنظیم کنید.

mohammad_kazem
چهارشنبه 16 دی 1394, 22:26 عصر
سلام. کاری که میخواین بکنید، توضیح مرحله به مرحله ش زمان بر هست، من میتونم به صورت کلی راهنمایی کنم، خودتون باید برین دنبالش و البته توضیح کامل تک تک توابع به صورت جزئی در MSDN موجود هست (برای مثالhttps://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=win32+api+FindWindow). اگه در مورد خاصی مشکل داشتین بفرمایین.
ابتدا باید هندل پنجره اصلی رو پیدا کنید. روش های مختلفی هست، میتونید برای مثال از FindWindow و یا WindowFromPoint استفاده کنید. بعد از اون میتونید با EnumChildWindows پله پله به پنجره مورد نظر (ListView) برسید. اگه خوش شانس باشید و اون یک Win32 ListView باشه میتونید با SendMessage با ارسال پیغام های مربوط به ListView، آیتم مورد نظر رو پیدا و انتخاب کنید. بعد از اون، به همین ترتیب Text Editor مورد نظر رو پیدا کنید و باز اگه یک Win32 Edit باشه با ارسال پیغام های مربوط به Edit، متنش رو تنظیم کنید.
سلام
من با هندل پنجره اصلی مشکلی ندارم و براحتی پیدا شده. با پنجره ای که داخل این پنجره اصلی باز میشه مشکل دارم و نمیدونم چرا EnumChildWindows روی سیستمم اجرا نمیشه. نمونه های توی اینترنت رو هم تست کردم. شاید ویندوزم مشکل داره. نمیدونم والا. اگه میتونید یه نمونه کد برای EnumChildWindows اینجا بزارین. شاید من دارم اشتباه ازش استفاده میکنم.
ممنون

plus
پنج شنبه 17 دی 1394, 06:38 صبح
شاید UI برنامه مورد نظر شما بر اساس Native Windows نیست مثلا WPF هست. شما اول با استفاده از Spy (در منوی Tools از Visual Studio) , ابزار Find Window این برنامه، ببینید آیا اصلا پنجره اصلی مورد نظر پنجره فرزندی داره یا نه؟ کافیه علامت Target (در ابزار Find Window) رو روی پنجره اصلی Drag & Drop کنید.

mohammad_kazem
شنبه 19 دی 1394, 11:16 صبح
شاید UI برنامه مورد نظر شما بر اساس Native Windows نیست مثلا WPF هست. شما اول با استفاده از Spy (در منوی Tools از Visual Studio) , ابزار Find Window این برنامه، ببینید آیا اصلا پنجره اصلی مورد نظر پنجره فرزندی داره یا نه؟ کافیه علامت Target (در ابزار Find Window) رو روی پنجره اصلی Drag & Drop کنید.
سلام دوست عزیز
این گزینه توی ویژوال استدیو 2008 نیست و متاسفانه امکان نصب ورژن جدیدتر هم روی این سیستم وجود نداره. این سیستم ویندوز سرور 2008 روش نصبه و ورژن بالاتر از vs 2008 رو قبول نمیکنه

plus
دوشنبه 21 دی 1394, 08:41 صبح
سلام. شرمنده بابت تاخیر،
ابزار Spy در نسخه های قبلی VS هم وجود داره. در این مسیر:


C:\Program Files\Microsoft Visual Studio VV\Common7\Tools

به دنبال فایل spyxx.exe یا spy.exe بگردید.

بجای VV عدد ورژن مربوطه رو باید بگذارین. برای 2008 فکر میکنم 9 ّباشه.