|
#1
|
|||
|
|||
Вопрос по winapi
Есть функция осуществляющая поиск окон в системе. Находит окна, для каждого окна определяет (если есть) системное меню и в этом меню считает кол-во элементов. Затем заголовок окна и количество элементов для каждого окна выводит в listbox. Выглядит так:
Код:
function EnumFind(Wd: HWnd; Param: LongInt): Boolean; stdcall; var Nm:Array[0..255] of Char; Cs, MenuName: Array[0..255] of Char; name,clas_s: string; WndMenu: HMENU; menu_size, i: Word; Begin GetClassName(wd,Cs,255); GetWindowText(wd,Nm,255); name:=string(nm); clas_s:=string(cs); WndMenu:=0; WndMenu:=GetSystemMenu(wd, False); if (IsWindowVisible(wd)) and (WndMenu<>0) then begin AppendMenu(WndMenu,MF_STRING,1,'my_string'); menu_size:= GetMenuItemCount(WndMenu); Form1.ListBox2.Items.add(name+' количество элементов меню: '+ IntToStr(menu_size)); end; EnumFind := TRUE; end; Проблема следующая: для окон проводника(обычных, не окон приложений) в 1й раз выводит нормальное кол-во элементов меню (7 обычно), а если закрыть приложение и снова запустить, то для окон приложений будет все выводится верно, а для системных окон выводит типа элементов меню у этого окна 65535( макс типа Word). Если эти окна закрыть и открыть заново, то опять будет нормально работать ф-ция и скажет, что элементов 7 и они такие-то. Но если опять перезапустить приложение, то снова беда, причем только с окнами системы. Если кто в курсе, подскажите пожалуйста в чем может быть дело. PS: Заранее спасибо! PPS: вот на всякий случай вызов функции: Код:
EnumWindows(@EnumFind,0); |