Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Название окон, Запись заголовка окна в переменную 
:(
    Опции темы
Santilka85
Дата 18.6.2007, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Подскажите, пожалуйста, как написать цикл на С++, который перебирает ВСЕ окна и внутри цикла записывает заголовок окна в переменную?
если можно, приведите, пожалуйста пример..
я это представляю примерно так:

for (.....)
  {
     ...//искать окно 
     ...//ивлечь заголовок
     txt=[заголовок окна];
     ShowMessage ("Найдено окно --->"+txt);
  }
ShowMessage ("Больше окон нет.");
--------------------
Снегоболотоходы WP8X8 всего за 480000 рублей и аксессуары к ним.
PM MAIL   Вверх
SenkraD
Дата 18.6.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот пример по изменению заголовков всех окон, бередаль думаю сам сможеш

Код

// Раз "колбек"
BOOL CALLBACK EnumChildWnd( HWND hwnd, LPARAM lParam)
{
    SendMessage(hwnd, WM_SETTEXT, 0,LPARAM(LPCTSTR("I See You")));
    return TRUE;
}

// Два "колбек"
BOOL CALLBACK EnumWindowsWnd(HWND hwnd,    LPARAM lParam)
{
    SendMessage(hwnd, WM_SETTEXT, 0,LPARAM(LPCTSTR("I See You")));
    EnumChildWindows(hwnd,&EnumChildWnd,0);
    return TRUE;
}

// Вот вызов

EnumWindows(&EnumWindowsWnd, 0);



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Santilka85
Дата 18.6.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



не получилось, можно по подробней, что где описать надо?

ерор:

[C++ Error] Unit1.cpp(230): E2034 Cannot convert 'int (__stdcall *)(void *,long)' to 'int (__stdcall *)()'
[C++ Error] Unit1.cpp(230): E2342 Type mismatch in parameter 'lpEnumFunc' (wanted 'int (__stdcall *)()', got 'int (__stdcall *)(void *,long)')
[C++ Error] Unit1.cpp(251): E2034 Cannot convert 'int (__stdcall * (_closure )(void *,long))(void *,long)' to 'int (__stdcall *)()'
[C++ Error] Unit1.cpp(251): E2342 Type mismatch in parameter 'lpEnumFunc' (wanted 'int (__stdcall *)()', got 'int (__stdcall * (_closure )(void *,long))(void *,long)')
--------------------
Снегоболотоходы WP8X8 всего за 480000 рублей и аксессуары к ним.
PM MAIL   Вверх
Rodman
Дата 18.6.2007, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



окон твоего приложения или всех открытых на машине???
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Santilka85
Дата 18.6.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Мне нужно чтоб заголовки ВСЕХ ОТКРЫТЫХ  на машине "пробежались" через одну переменную в цикле.
--------------------
Снегоболотоходы WP8X8 всего за 480000 рублей и аксессуары к ним.
PM MAIL   Вверх
SenkraD
Дата 18.6.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот тебе твоя версия.  Кладён на форму TMemo (Memo1), TButton(Button1) и пишеш так, при чём в таком же порядке
Код

String g_strParentWindowName;
//---------------------------------------------------------------------------
BOOL CALLBACK EnumChildWnd( HWND hwnd, LPARAM lParam)
{
    SendMessage(hwnd, WM_SETTEXT, 0,LPARAM(LPCTSTR("I See You")));

    char lpWndText[256];

    GetWindowText(hwnd, lpWndText, 256);
    Form1->Memo1->Lines->Add(g_strParentWindowName + String(lpWndText));

    return TRUE;
}

//---------------------------------------------------------------------------
BOOL CALLBACK EnumWindowsWnd(HWND hwnd, LPARAM lParam)
{
    SendMessage(hwnd, WM_SETTEXT, 0,LPARAM(LPCTSTR("I See You")));
    char lpWndText[256];

    GetWindowText(hwnd, lpWndText, 256);
    Form1->Memo1->Lines->Add(lpWndText);
    g_strParentWindowName.sprintf("%s->", lpWndText);
    EnumChildWindows(hwnd, (WNDENUMPROC)&EnumChildWnd,0);
    Form1->Memo1->Lines->Add("---------------------------------------");

    return TRUE;
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Memo1->Lines->Clear();
    EnumWindows((WNDENUMPROC)&EnumWindowsWnd, 0);
}


Тебе это нужно было?


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Santilka85
Дата 18.6.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну примерно да, только я не понял ГДЕ текущий заголовок извлекается, я только понял где он задаётся..

Где можно вставить ShowMessage() чтобы в этой месаге увидеть у КАКОГО ОКНА сейчас изменится заголовок?
--------------------
Снегоболотоходы WP8X8 всего за 480000 рублей и аксессуары к ним.
PM MAIL   Вверх
SenkraD
Дата 18.6.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Santilka85, ну строку SendMessage(hwnd, WM_SETTEXT, 0,LPARAM(LPCTSTR("I See You"))) закоменьть. Эт я немного лоханулся )))
А текущий заголовоек получается вот так:
Код

char lpWndText[256];    // Буфер под название окна

GetWindowText(
    hwnd,                   // Хендл окна
    lpWndText,           // Буфер в который запишется название окна
    sizeof lpWndText  // Максимальное количество символов, которое нужно считать
);


Это сообщение отредактировал(а) SenkraD - 18.6.2007, 12:17


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Santilka85
Дата 18.6.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Огромное Человеческое спасибо!!! кажись заработало smile
--------------------
Снегоболотоходы WP8X8 всего за 480000 рублей и аксессуары к ним.
PM MAIL   Вверх
Santilka85
Дата 18.6.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А вот маленький вопросик, почему в ListBox записывается много пустых строк?? (я вместо Memo ListBox сделал)??
--------------------
Снегоболотоходы WP8X8 всего за 480000 рублей и аксессуары к ним.
PM MAIL   Вверх
SenkraD
Дата 18.6.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Santilka85, потому что у окна может не быть заголовка или заговово равен пустой строке!!!


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Klin
Дата 18.6.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Santilka85, если важен интерфейс сделайте элементарную проверку перед добавлением нового элемента. 
Код

. . . . . . . .
if ( lpWndText == "" ) lpWndText = "<БЕЗ ЗАГОЛОВКА>";
Memo1->Lines->Add(g_strParentWindowName + String(lpWndText));



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Santilka85
Дата 21.6.2007, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Пробовал, не помогает, всё равно много пустых строк, надо как-то избавиться от них, а то смысла нету-  пол-экрана ПУСТО, подскажите, плиз
--------------------
Снегоболотоходы WP8X8 всего за 480000 рублей и аксессуары к ним.
PM MAIL   Вверх
Klin
Дата 21.6.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Santilka85, попробуйте проверять на пробел или если их много (или всегда по-разному), то уничтожайте стандартной функцией пробелы, а затем уж проверйте.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Santilka85
Дата 21.6.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Klin, LastDelimiter пробовал.... не помогает, как быть??
--------------------
Снегоболотоходы WP8X8 всего за 480000 рублей и аксессуары к ним.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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