Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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);
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter