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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как пройтись по всем открытым окошкам? узнать их названия и... 
:(
    Опции темы
szz
Дата 24.9.2005, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

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



Как пройтись по всем открытым в данный момент окошкам, узнать из названия(заголовки) и если у одного из них название "foobar" - закрыть его?


--------------------
PM   Вверх
p0s0l
Дата 24.9.2005, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 3
Всего: 112



Сделай поиск по форуму, наверняка найдешь примеры.
Ищи:
EnumWindows + EnumChildWindows - Так ты узнаешь хэндлы окон.
Получить заголовок окна - GetWindowText
Закрыть окно - CloseWindow

Также возможно в твоей задаче подойдёт FindWindow + FindWindowEx, если известны заголовки родителей нужного окна...



--------------------
С уважением, г-н Посол.
PM   Вверх
rsm
Дата 24.9.2005, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: 4
Всего: 62



Код

#include <windows.h>

BOOL CALLBACK EnumWindowsProc(HWND, LPARAM);

void start()
{
    EnumWindows(&EnumWindowsProc, 0);
}

BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
    #define WND_CAPTION "foobar"
    #define CAPTION_LEN 256
    char buff[CAPTION_LEN];
    
    GetWindowText(hWnd, (LPSTR) &buff[0], CAPTION_LEN);
    if(!lstrcmp((LPSTR) &buff[0], WND_CAPTION))
    {
        SendMessage(hWnd, WM_CLOSE, 0, 0);
        return FALSE;
    }
    return TRUE;
}


Это сообщение отредактировал(а) rsm - 24.9.2005, 17:51
PM MAIL   Вверх
Yak
Дата 5.11.2005, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.11.2005

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



можно простым, правда не совсем красивым способом - прокрутить ч-з цикл, от i=-33000 до гдет 33000 (короче в пределах действия типа HWND) функцию IsWindow(i). если возвращает1, то окно с данным Hwnd в системе существует, если 0 - знач нет. находит все, даж мелкие кнопочки на панелях инструментов и системные окна, которые никогда не показываются сами)))))
PM MAIL   Вверх
szz
Дата 5.11.2005, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

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



зачем? код, который дал rsm - пробегает только по открытым окошкам и все отлично работает


--------------------
PM   Вверх
Helicopterr
Дата 6.11.2005, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 20.8.2005
Где: Stavropol

Репутация: нет
Всего: 3



SendMessage(FindWindow(NULL,"foobar"), WM_SYSCOMMAND, SC_CLOSE,0);


--------------------
people can fly
PM MAIL   Вверх
Eugene82
  Дата 18.12.2005, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 30.5.2005
Где: г. Ростов-на-Дону

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



Цитата(Yak @ 5.11.2005, 23:06)
прокрутить ч-з цикл, от i=-33000 до гдет 33000 (короче в пределах действия типа HWND) функцию IsWindow(i). если возвращает1, то окно с данным Hwnd в системе существует, если 0 - знач нет
А как конвертируется void* HWND в int i??? У меня Билдер 6 отказывается это делать.

To rsm. И твой код билдер отказался запускать - видно ещё какую-то библиотеку подключить надо кроме windows.h. Выдаёт две ошибки (вторая я думаю из-за первой). Первая: E2034 Cannot convert 'int (__fastcall *)(void *,long)' to 'int (__fastcall *)()'

А вообще я хочу узнать заголовок окна Винампа (версия 5.1) - на Winamp v1.x не откликается! smile

Поможите кто чем может! А я потом плагином поделюсь! smile
PM WWW ICQ   Вверх
SergeCpp
Дата 19.12.2005, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 10
Всего: 124



PM MAIL WWW ICQ   Вверх
Eugene82
  Дата 19.12.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 30.5.2005
Где: г. Ростов-на-Дону

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



Цитата(SergeCpp @ 19.12.2005, 11:41)
InqSoft Window Scanner 1.7
Спасибо! Поставил и убедился, что заголовок главного окна Винампа есть "Winamp v1.x".

Почему не работал мой код? Видать что-то пропустил, хотя компилер не ругался. Но прога всё таки не работала.

Сейчас взял текст на Object Pascal
Код

Procedure WinampCommand(Command:Integer);
var
WinampHWND:HWND;
begin
//поиск окна Winamp'a
WinampHWND:=findwindow('Winamp v1.x',nil);
//если поиск успешен, то посылаем сообщение
if WinampHWND<>0 then
SendMessage(WinampHWND, WM_Сommand, Command, 0);
end;
И переписал на С++
Код

HWND WinampHWND;
//поиск окна Winamp'a
WinampHWND=FindWindow("Winamp v1.x",0);
if(WinampHWND!=0)//...
//...
Прога заработала!
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.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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