PDA

View Full Version : hwnd



کم حوصله
سه شنبه 07 مرداد 1382, 22:58 عصر
سلام
آقا این hwnd چیه به چه درد می خورد اصلا کاربردش چیه :(

Abbas Arizi
سه شنبه 07 مرداد 1382, 23:28 عصر
تا اونجایی که من بلدم:
هر پنجره ای که توی ویندوز باز میشه توسط ویندوز یک کد به اون داده میشه که به این کد هندل یا گیره اون پنجره گفته میشه.
انجام هر عملیاتی روی این پنجره توسط پیغامهایی انجام میشه که ویندوز اونهارو از طریق این هندل به پنجره موردنظر میفرسته.
hWnd هم همین هندل هست. h مخفف Handle که پیشوند همه هندلهاست (چون هندلهای دیگه ای هم توی ویندوز هست. مثل هندل به DC یا هندل به ایکون و بیتمپ و ...)
Wnd هم که مخفف کلمه Window.
نا گفته نمونه که از طریق این هندلها میشه کارهای جالبی رو روی پنجره ها انجام داد. یک نمونه خیلی کوچیکش همونیه که من توی MessageBox فارسی انجام دادم (نمیدونم شما تا حالا دیدینش یا نه؟)
به هر حال این اون چیزی بود که من بلد بودم. شاید دوستان دیگه اطلاعات کاملتری هم داشته باشند.

کم حوصله
سه شنبه 07 مرداد 1382, 23:59 عصر
اقا ببخشید ها
این هندلی که گفتید چه جوری میشه کنترلش کرد و مقدارش را بدست آورد و آیا در برنامه های دیگر هم ایم هندل وجود دارد و اگر دارد چه جور می توان بدستش آورد یا نه فقط مختص وبی است :oops:

Abbas Arizi
چهارشنبه 08 مرداد 1382, 00:39 صبح
توی برنامه خودتون که Handle همون hWnd هست.
برای بدست آوردن هندل برنامه های دیگه نیاز به استفاده از توابع API مختلف دارید. بسته به اینکه چه کاری بخواهید انجام بدید، باید از یک روش خاص استفاده کنید.
مثلا با استفاده از FindWindow میتونید هندل یک پنجره رو از طریق متن لبه اون به دست بیارید که این ساده ترین کاره. در برخی موارد باید از Hook و SubClass استفاده کنید که تا حدودی پیچیده تره.
برای ارسال پیغام به هندل هم برای بعضی پیغامها توابع مخصوص وجود داره. برای بقیه هم باید از SendMessage استفاده کنید.
به هر حال اگه توضیحات بیشتری خواستید من در حد اطلاعات خودم در خدمتتون هستم

کم حوصله
چهارشنبه 08 مرداد 1382, 01:29 صبح
سلام می بخشید من اینقدر می پرسم ها
ببینید من تا حالا تقریبا از هر 10 تاپیک تو 6 تاش این کلمه رادیدم و نفهمیدم چیه یکم iq من در این مورد پایینه :cry:
فکر میکنم کاربرد های خوب مفید و زیادی هم داشته باشه
حالا اگر لطف کنید و یکم کامل و مفید در مورد نحوه استفاده از آن و علت استفاده و مزیت استفاده و مکان استفاده از آن توضیح بدید شرمنده می شوم :oops:
ضمنا اگر هم یک نمونه از استفاده های آن را با مثال اینجا attach کنید دیگر محشر می شود
انشا... هروز پر بار تر گردید تا برجسته تر باشید
با کمال تشکر فراوان :wink:

Abbas Arizi
چهارشنبه 08 مرداد 1382, 02:04 صبح
ببین دوست عزیز. در حقیقت هندل هر پنجره هویت اون پنجره توی محیط ویندوزه. پنجره که میگم اعم از فرمها و دیالوگها و کنترلهاییه که به صورت فرزند روی اونها قرار می گیرند.
فرضا شما وقتی که متن یک TextBox رو توی VB تنظیم میکنید یک پیغام WM_SETTEXT به اون TextBox فرستاده میشه. شما فرستاده شدن این پیغام رو اصلا متوجه نمیشید. چون کنترل TextBox برای شما طوری طراحی شده که فقط یک متن رو جلوی خصوصیت Text اون مینویسید و تمام. ولی در پشت صحنه این پیغام به کنترل Edit فرستاده میشه. این فقط یک مثال بود. تمام عملیاتی که در سطح ویندوز روی پنجره ها انجام میشه بوسیله همین سیستم پیغام رسانی انجام میشه. به عنوان مثال میتونید این کد رو امتحان کنید:

Private Const WM_SETTEXT = &HC
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Sub Form_Load()
SendMessage Text1.hwnd, WM_SETTEXT, 0, ByVal "ABBAS"
End Sub

اما گاهی اوقات پیش میاد که شما مجبورید یک پنجره رو دستکاری کنید که خارج از محیط برنامه خودتون هست. اون وقته که میتونید به عنوان یک برنامه نویس راسا اقدام به ارسال پیغام به اون کنید.
یا گاهی اوقات پیش میاد که شما با استفاده از API میخواهید تغییراتی روی یک کنترل ایجاد کنید که طراحان VB یا طراح اون کنترلی که با اون کار میکنید، برای شما پیش بینی نکرده. هر کدوم از کنترلهای عمومی ویندوز دهها ویژگی و خاصیت دارند. فرضا کنترل Edit. این کنترل دارای بسیاری از ویژگیهاست که امکان اینکه همه اونها رو در قالب شیی TextBox توی VB قرار بدن نبوده. شما فرضا بیایید توی محیط .NET یا VC++. بسیاری از این ویژگیهارو ملاحظه میکنید (حتی اونجا هم همه خصوصیات پشتیبانی نشده). با استفاده از تابع API مربوطه میتونید از اون ویژگیها توی محیط VB هم بهره بگیرید.
اما چه جوری میخواهید بین اون API و کنترلی که دارید ارتباط برقرار کنید. قطعا این کار از طریق هندل اون کنترل انجام خواهد شد.
بنابراین اگر کمی به دنیای API قدم بگذارید، متوجه میشوید که هندل پنجره ها جزو ملزومات کار با بسیاری از توابع خواهد بود.
البته همون طوری که گفتم توی ویندوز هندلهای دیگه ای هم داریم. مثل hDC که هندل به محتوای ابزار یا DC پنجره هاست یا hIcon که هندل به ایکونهاست و ...
امیدوارم که چیزایی که گفتم به دردت بخوره و اگر بازم مطلبی بود در خدمت هستم.