Показать сообщение отдельно
  #1  
Старый 14.08.2010, 14:18
Kaligula Kaligula вне форума
Прохожий
 
Регистрация: 14.08.2010
Сообщения: 1
Репутация: 10
По умолчанию Вопрос по 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);
Ответить с цитированием