PDA

View Full Version : سوال: بدست آوردن اشاره گر منو



ahmad_roushan
یک شنبه 01 شهریور 1388, 09:05 صبح
سلام به همه دوستان
من میخام اشاره گر منو یک برنامه ، غیر از برنامه خودم رو بگیرم ولی نمیدونم چجوری باید اینکار رو انجام بدم .
تابع api ،
getmenu(hwnd)
واسه notepad یا ymessenger جواب میده ولی برای برنامه های دیگه همیشه صفر برمیگردونه .
لطفا کمک کنید .

etoshey
یک شنبه 01 شهریور 1388, 15:42 عصر
هندل هر پنجره ای بهش بدین می تونین منو تغییر بدین. چه منویی می خواین تغییر بدین؟؟

GetWindowMenuPopup( HMENU hMenuBar );

ahmad_roushan
دوشنبه 02 شهریور 1388, 07:58 صبح
متشکر .
میخوام save و Saveas رو از منوی file غیر فعال کنم ولی هندل منو همیشه صفر برگردونده میشه .
یعنی در واقع مشکل من گرفتن اشاره گر منو هست .
آیا غیر از تابع getmenu تابع دیگری هم برای این کار هست ؟

etoshey
دوشنبه 02 شهریور 1388, 19:37 عصر
برای بدست آوردن هندل پنجره ی مورد نظر از findwindow استفاده کن. اما classname را null قرار بده و پارامتر دوم برابر کپشن پنجره ی مورد نظر قرار بده. سپس از getmenu استفاده کن تا هندل منو را بدست بیاورید.
مثال :

findwindow(nil,'Adobe Reader');

ahmad_roushan
سه شنبه 03 شهریور 1388, 08:54 صبح
با تشکر از شما به خاطر وقتی که گداشتید ولی این کار جواب نمیده و باز هم صفر برمیگرده !

etoshey
سه شنبه 03 شهریور 1388, 11:30 صبح
کدی که استفاده می کنید تو تاپیک بزارین.من تونستم منوی adobe عوض کنم.

H:=findwindow(nil,'Adobe Reader');
menu:=getmenu(H);
Caption:=inttostr(menu);

ahmad_roushan
سه شنبه 03 شهریور 1388, 12:20 عصر
ممنون از توجهتون
این واسه Mozilla Firefox هست که جواب نمیده
همین برنامه واسه notepad یا yahoo messenger جواب میده و میشه حتی منو اونارو پاک کرد ولی واسه برنامه من یا همین موزیلا جواب نمیده .

etoshey
سه شنبه 03 شهریور 1388, 17:58 عصر
mozilla کپشن ثابتی ندارد. پس بهتر از classname استفاده کنید.

findwindow('MozillaUIwindowclass',null)

اما بعضی از نرم افزار ها مثل mozilla را نمی توان با getmenu هندل منو را دریافت کرد.
برای حذف save از چه کدی استفاده می کنید؟؟

با این برنامه می توان کپشن و classname و Hmenu تمام پنجره ها را بدست آورید.
دو تا دکمه گذاشتم که می تونه save حذف کنه و منوی خودش را به پنجره ی انتخات شده از لیست اضافه کنید.
برای موزیلا نمی تونم کمکی کنم. فکر می کنم کلاس منوش فرق می کند.

ahmad_roushan
چهارشنبه 04 شهریور 1388, 08:36 صبح
سلام
ممنون که واسه کمک کردن وقت گذاشتید .
آره این کد واسه بعضی برنامه ها جواب میده ولی واسه بعضی برنامه ها جواب نمیده ، البته گذاشتن منو کار میکنه ولی Mhandle واسه بعضی برنامه ها صفر میشه ، از جمله برنامه من .


::EnableMenuItem(hMenu,MF_DISABLED,2);در این تابع hMenu اشاره گر به منو هست و 2 اندیس Save هست از بالای منو از صفر اندیس داده میشه .
که البته باز هم برای همون برنامه های خاص مثل notepad جواب میده .


بقیه دوستان اگه لطف کنند همفکری کنند ممنون میشم .:افسرده: