Есть функция осуществляющая поиск окон в системе. Находит окна, для каждого окна определяет (если есть) системное меню и в этом меню считает кол-во элементов. Затем заголовок окна и количество элементов для каждого окна выводит в 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);