Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать кол-во запушеных программ по, имени класса. Не имени файла! 
V
    Опции темы
andrew_121
Дата 23.5.2009, 03:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 2
Всего: 33



Допустим. Запустил программу. Переименовал исполняемый файл, и запустил еще раз.
Вопрос: Как узнать кол-во запущенных программ по имени класса?

Спасибо.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
GoldFinch
Дата 23.5.2009, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



смотри значение счетчика класса %)

Добавлено через 10 минут и 25 секунд
хотя у атомов вроде нет счетчиков
тогда можно самому сделать счетчик и хранить его в конце WNDCLASSEX

Код

struct MyWNDCLASSEX : WNDCLASSEX {
int counter;
}

....
MyWNDCLASSEX mywc;
mywc.cbSize  = sizeof(mywc);

PM MAIL ICQ   Вверх
GremlinProg
Дата 23.5.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(andrew_121 @  23.5.2009,  05:34 Найти цитируемый пост)
Как узнать кол-во запущенных программ по имени класса

перебрать все окна верхнего уровня (EnumWindows) и проверить имя класса (или атом) каждого
Цитата(GoldFinch @  23.5.2009,  14:52 Найти цитируемый пост)

struct MyWNDCLASSEX : WNDCLASSEX {
int counter;
}....
MyWNDCLASSEX mywc;
mywc.cbSize  = sizeof(mywc)

это что угодно, только не счетчик окон

счетчик нужно делать примерно так:
Код

WNDCLASSEX wcex;
...регистрация...
wcex.cbClsExtra = sizeof(LONG);
...процедура класса окна...
switch( message){
    ...
    case WM_CREATE:{
        ...enter...
        ::SetClassLong(hwnd,0,::GetClassLong(hwnd,0) + 1);
        ...leave...
        break;
    }
    ...
    case WM_DESTROY:{
        ...enter...
        ::SetClassLong(hwnd,0,::GetClassLong(hwnd,0) - 1);
        ...leave...
        break;
    }
    ...
}


...enter...
и
...leave...
это блоки синхронизации, можно и без них, "для посмотреть", но в рабочем проекте, их отсутствие - серьезная ошибка

Добавлено через 3 минуты и 21 секунду
тогда получить значение счетчика для класса MyClassName можно так:
Код

::GetClassLong(
  ::FindWindow(_T("MyClassName"), NULL),
  0
)



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GoldFinch
Дата 23.5.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



GremlinProg, counter - это поле которое будет хранить число классов.
получить WNDCLASSEX можно через GetClassInfoEx
PM MAIL ICQ   Вверх
andrew_121
Дата 24.5.2009, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 2
Всего: 33



Цитата(GremlinProg @  23.5.2009,  14:39 Найти цитируемый пост)
это что угодно, только не счетчик окон

Я тоже так подумал...но после, подумал еще что возможно мой мозг еще не проснулся... smile 



Цитата(GoldFinch @  23.5.2009,  17:45 Найти цитируемый пост)
GremlinProg, counter - это поле которое будет хранить число классов.
получить WNDCLASSEX можно через GetClassInfoEx 

А ты в курсе что WNDCLASSEX это структура. А WinAPI, это С.
P.S.
Вроди как проснулся... smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
GremlinProg
Дата 24.5.2009, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



ну да, WNDCLASSEX - просто структура обмена данными, это не объект ядра, как бы ты не расширял ее содержимое


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0754 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.