PDA

View Full Version : نوع کلاس منو ها 32768#



__siavash__
دوشنبه 06 فروردین 1386, 20:40 عصر
سلام
من میخوام یه منو (مثلا منوی Help ) که خارج از برنامه ی خودمه رو فعال یا غیر فعال کنم
توی MSDN گفته کلاس منو ها 32768# هستش خوب منم که عنوانشو دارم (مثلا Help&)
قانونا با داشتن عنوان و نوع کلاس باید بتونیم هندل پنجره مورد نظر رو پیدا کنیم
اما هر کاری کردم نتونستم هندل یه منو رو پیدا کنم !
در این کد من میخوام منوی Help برنامه یاهو مسنجر رو غیر فعال کنم


Dim hwnd As Long
hwnd = FindWindow("YahooBuddyMain", vbNullString)
hwnd = FindWindowEx(yhwnd, ByVal 0&, #32768, "&Help")


اگه میشه بگید مشکل این کد کجاست ؟؟؟

حامد مصافی
دوشنبه 06 فروردین 1386, 21:50 عصر
دوست عزیزم منو که هندل نداره !
در واقع یک آیتم از یک منو یک پنجره نیست!
منظور MSDN کل پنجره یک منو هست، نه یک آیتم.

ابتدا با استفاده از GetMenu اشاره گر منو را به دست بیاورید.
سپس با استفاده از تابع GetMenuItem اشاره گر آیتم مورد نظر را بدست بیاورید.

__siavash__
دوشنبه 06 فروردین 1386, 23:58 عصر
BlackDal (http://barnamenevis.org/forum/member.php?u=6808)
ممنون
ولی اولا تابع GetMenuItem تو برنامه ی API Veiwer نبود تو MSDN هم نبود
GetMenuItemID بود احیانا منظور شما این دومی نبوده ؟؟؟
من این کدا رو نوشتم ولی در آخر 1- برگردوند


Dim yhwnd As Long
yhwnd = FindWindow("YahooBuddyMain", vbNullString)
yhwnd = GetMenu(yhwnd)
yhwnd = GetMenuItemID(yhwnd, 0)

__siavash__
سه شنبه 07 فروردین 1386, 00:02 صبح
من میخوام اشاره گر منو (به عنوان مثال منوی Help )و بعد زیر منوهای اونو بدست بیارم و بعد فعال یا غیر فعال کنم

CodeMasterX
سه شنبه 07 فروردین 1386, 02:12 صبح
همونطور که BlackDal گفت منوها مثل پنجره ها نیستند که هندل مجزا و مخصوصی به خود داشته باشن.شما با کد زیر می تونی هندل یه منو رو بگیری و اون رو ویرایش کنی حالا هر کاری که می خوایی باهاش بکنی:



Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Any) As Long

Private Sub Form_Load()
Dim hMenu As Long, hSubMenu As Long, lID As Long

hMenu = GetMenu(Me.hWnd)
hSubMenu = GetSubMenu(hMenu, 0)
'first menu (index=0)
lID = GetMenuItemID(hSubMenu, 0)


شما تو کدی که GetMenu انجام میشه میتونی با FindWindowEx هندل پنجره ای که مورد نظرت هست رو بگیری.بقیه کد هم که واضح هست.

__siavash__
سه شنبه 07 فروردین 1386, 15:15 عصر
من برای Enable یا Disable کردن یه زیر منو یا خود منو خیلی با کدهای بالا سر و کله زدم ولی فقط گزینه مشخص شده پنهان میشد
اما من میخوام باشه ولی غیرفعال ی فعال بشه
با تابع EnableMenuItem هم کار کردم ولی انگار فقط وضعیت منو رو بر میگردونه
در ضمن وقتی میخوام Position یه زیر منو رو بدم اولا که از صفر شروع میشه دوما اینکه باید خط های جدا کننده رو بشماریم تا به زیر منوی مورد نظر برسیم ؟؟؟
این کدو یه نگاه بکنید :
میخوام گزینه Save درش غیر فعال بشه !!!

romina2006
دوشنبه 13 فروردین 1386, 01:16 صبح
اینم سورس غیر فعال کردن یک گزینه