PDA

View Full Version : پیدا کردن Handel مربوط به برنامه ها



Delphi_Developer
پنج شنبه 16 تیر 1384, 02:51 صبح
سلام
میخواستم بدونم چجوری میتونم Handel مربوط به یه قرم یا یه Textbox یا هر Object دیگه ای رو توی برنامه های دیگه پیدا کنم و ازشون استفاده کنم ؟
ممنون.

brians2000
پنج شنبه 16 تیر 1384, 03:34 صبح
اچ دابی اندی هر فرم در صورتی که از نوع کنترل باشه توی دلفی با همون پراپرتی هندل قابل دسترسیه ...
در عین حال می تونی اچ دی سی دیب ها و یا بیتمپ رو از کنواس اونها بگیری. در صورتی که می خواهی اچ دی سی چیزی رو بگیری که دیب یا بیتمپ نیست حتما باید ریلیسش کنی که ریسورس از بین نره... در صورتی که هندل اینستانس رو می خواهی می تونی از اچ اینستانس استفاده کنی.
اگر می خواهی از دایرکت ایکس استفاده کنی قبل استفاده اچ دی سی اون که کامپتیبیلتی با فرامین استاندارد ویندوز رو فراهم می کنی ریلیس کنی.
سعی کن همه چی رو توی ترای فاینالی بگذاری که در صورت خطا بازهم محیط خالی شه! در هر وضع من استفاده مستقیم از ای پی آی رو توصیه نمی کنم.

در ضمن: اون هندل رو اشتباه نوشتی ال ای هستش.

Delphi-Clinic
پنج شنبه 16 تیر 1384, 10:13 صبح
در هر وضع من استفاده مستقیم از ای پی آی رو توصیه نمی کنم

در برخی موارد چاره ای نداری رفیق.

وقتی فتوا می دی بی زحمت راه حلش رو هم بگو.

منتظرم :)

brians2000
پنج شنبه 16 تیر 1384, 10:26 صبح
ببین... مثلا میاید از بیت بلت استفاده می کنی یکجا... :) خوب... وقتی معادلش هست نیاز نیست! ایشون هم که گیم نویس نیست! اگر بود می گفتم بیا کامپتیبل اچ دی سی رو بگیر بعد ریلیس کن فرامین رو هم مستقیم بده! من برای کار ایشون گفتم... بله... خود من توی برنامه هام زیاد به صورت مستقیم از ای پی آی استفاده می کنم ولی یا از روتین ساخت یافته اش استفاده می کنم یا میشینم می نویسم که درگیر یه هندل نشم! شما وقتی توی دایرکت ایکس کامپتیبل اچ دی سی رو استخراج می کنی سارفیست لاک میشه و ارور جنریت می کنه ولی اگر ساخت یافته بنویسی با اون سر کاری نداری چون راحت می تونی ریلیسش رو هم به سر و ته کارت ببندی .... من حرفم رو تکرار می کنم :‌به هیچ وجه برنامه هارو طوری ننویسید که به صورت باز از هندل ها استفاده بکنه اگر می نویسید طوری ساخت یافته بنویسید که گاربیژ‌کالکت و دستروی بکنید و گرنه ریسورس ها از دست می روند و ویندوز بهم می ریزه! دقیقا ایشون اگر آشنایی نداره نباید از اینها استفاده بکنه فقط فکر کن ایشون توی یه لوپ یه گت دی سی بندازه این لوپه هزار بار اجرا شه اونوقت ریسورسی باقی نمی مونه! مگر اینکه اگر می نویسند توجه کنند که باید منابع بلافاصله ریلیس بشوند ...


بهتر توضیح بدم :‌ استفاده از ای پی رو انجام بدید ولی بسیار بسیار با دقت! این هندل ها از آسمون نمیان و باید دستروی بشن! حتما دقت کنید.

محمد میرمصطفی
پنج شنبه 16 تیر 1384, 11:25 صبح
والله قبلا در موردش صحبت شده. میشه با FindWondowEx هندل پنجره و با EnumChildWindows هم Componentهای آونو پیدا کرد.

brians2000
پنج شنبه 16 تیر 1384, 13:38 عصر
شرمنده! من سوال رو دقت نکردم جواب به بیراهه رفت!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 :)) من فکر کردم تو خود دلفی می خواهی........................ :) بله... می تونی با فایند ویندو ای اکس اینکار رو بکنی .... :)) ....

اگر سوال رو دقت نکردم ببخشید من کجا رفتم و تو منظورت چی بود....... هندل رو هم همونطور که بعدا!!! در یک جواب بی ربط توضیح دادم ازش اچ دی سی بگیری و باهاش سر و کله بزنی...

Delphi_Developer
شنبه 18 تیر 1384, 01:58 صبح
به!!!! بابا خسته نباشید من چی گفتم شما ها نشتسین واسه خودتون چی بحث میکنید === فقط اون آخریه مربوط به حرف منه ! ---- خواهشن یه مثال برام بزنید ممنون.

محمد میرمصطفی
دوشنبه 20 تیر 1384, 01:17 صبح
hRun := FindWind( 'Run', nil );

tami_1369
دوشنبه 20 تیر 1384, 06:38 صبح
سلام.اینکه با دو کد حل میشه....
اول GetWindow(getdesktopwindow,GW_CHILD) اولین handleپنجره ویندوز گرفته میشه.
دوم با ...
while h <>0 do begin;
h:=getwindow(h,GW_hwndnext);
getwindowtext(h,name,sizeof(name((;
if name='Wnidows Task Manager' then break;
end;
البته اینو تو محیط دلفی پیاده نکردم ببینم درست نوشتم یا نه!!!
این برای پیدا کردن هندل wnidows task manager استفاده میشه !!!