Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отлов Caption | хэндл меняется всегда 
:(
    Опции темы
VOX
Дата 14.9.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Отлов Caption | хэндл меняется всегда
Здравствуйте! Прошу направить на решение вопроса!
Есть memo, их там много на форме, хэндл постоянно меняется,
есть ли возможность отлавливать этот мемо?
Spy++ показывает каждый раз разный хэндл,
т.е. искать по хэндлу я не могу, т.е. он разный всегда.
Подскажите пожалуйста, решаем ли данный вопрос?
Спасибо!
PM MAIL   Вверх
mrbrooks
Дата 14.9.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



VOX, тебе для чего нужно. Если одна программа управляет другой - то:

1. Поиск дескриптора окна по имени через FindWindow
2. Получение списка дочерних компонентов через EnumChildWindows
3. Работа  с дочерним компонентом через SendMessage
4. Гуглим на наличие примеров (масса).
...
5. PROFIT!
PM MAIL   Вверх
VOX
Дата 14.9.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо за ответ! Постараюсь поконкретнее.
Есть программа ( чужая, т.е. исходника нет).
На ней примерно 30 label'ов
Эта программа выкидывает определенные цифры
в эти лэйблы.
-------------
Моя программа.
Хотел бы часть этих лэйблов перенести на
свою панель, но только определенных.
Вот не могу сообразить как именно идентифицировать
эти лэйблы. Спасибо!

PM MAIL   Вверх
Anikmar
Дата 14.9.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(VOX @  14.9.2009,  10:24 Найти цитируемый пост)
Вот не могу сообразить как именно идентифицировать

А поля tag в них нет?
Еще можно по полю Name
PM MAIL ICQ   Вверх
VOX
Дата 14.9.2009, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мне SPY++ показывает только:
Handle,
Caption,
Class,
Style,
Rect.
Может воспользоваться иным инструментом?

Добавлено через 5 минут и 19 секунд
Попробывал winspy 1.7
но что то там такого особого не нашел :(
PM MAIL   Вверх
Anikmar
Дата 14.9.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(VOX @  14.9.2009,  10:28 Найти цитируемый пост)
Мне SPY++ показывает только:
Handle,
Caption,
Class,
Style,
Rect.
Может воспользоваться иным инструментом? 


Ах, у вас исходника же нет!
Можно, конечно, по Rect - взаимное же положение их стабильное?
PM MAIL ICQ   Вверх
mrbrooks
Дата 14.9.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(VOX @  14.9.2009,  10:28 Найти цитируемый пост)
Может воспользоваться иным инструментом? 

нет. SPY++ должно хватить. Через него по заголовку определи имя класса формы. 
Дальше - тем способом который я тебе описал выше.

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


Опытный
**


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

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



Спасибо!
Но я всё же не смог понять, как мне отличить одно мемо от другого?

Добавлено через 1 минуту и 10 секунд
класс у всех 1, это TMemo
PM MAIL   Вверх
mrbrooks
Дата 14.9.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(VOX @  14.9.2009,  10:39 Найти цитируемый пост)
Но я всё же не смог понять, как мне отличить одно мемо от другого? 

списки всех дочерних контролов вернет функция EnumChildWindows - по ним и определишь  smile  

RTFM камрад - иначе ни как.  smile 
PM MAIL   Вверх
VOX
Дата 14.9.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Т.е. так, я нахожу по caption окна хэндл,
вот так примерно:
Код

HWND hWnd = 0;
hWnd = FindWindow ( "SciCalc" , "Калькулятор" );

Теперь знаю хэндл калькулятора..
Далее
Код

EnumChildWindows (hWnd,  вот тут, и тут );

Подскажите пожалуйста, что примерно тут должно быть?
PM MAIL   Вверх
mrbrooks
Дата 14.9.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Код



//***
EnumChildWindows (hWnd,  /*здесь передается адрес функции - см. ниже*/(WNDENUMPROC)EnumFunc,  0);
//***

//'эта функция должная будет вывести в твой мемо список всех дочерних контролов другого приложения
bool __stdcall EnumFunc(HWND hWnd, LPARAM param)
{
  char buf[256];  //сюда будет копироваться имя контрола 
  GetClassName(hWnd, buf, sizeof(buf));
  //hWnd - дескриптор который будет относится к дочернему контролу - тоже можешь присвоить.
  Memo->Lines->Add(String(buf));
  return true;
}


что то типа этого.
PM MAIL   Вверх
VOX
Дата 14.9.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В итоге в мемо много одинаковых элементов, 
как можно выбрать интересующий?
Имена одинаковые выдает :(
PM MAIL   Вверх
mrbrooks
Дата 14.9.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



VOX, ну камрад - хоть чутка фантазии.

Код

//---------------------------------------------------------------------------
bool __stdcall EnumFunc(HANDLE hwnd, LPARAM param)
{
    char name[256], caption[256];
    GetClassName(hwnd,name,sizeof(name));
    SendMessage(hwnd, WM_GETTEXT, sizeof(caption),(LPARAM)(LPCTSTR)caption);
    Form->Memo->Lines->Add(String(name) + ":" + String(caption));
    return true;
}
//---------------------------------------------------------------------------
void __fastcall TForm::BtnClick(TObject *Sender)
{
WinExec("calc.exe",SW_SHOW);
Sleep(1000);
HANDLE hwnd = FindWindow("SciCalc","Калькулятор");
if (hwnd != NULL)
{
    Memo->Lines->Add("Приложение найдено");
    EnumChildWindows(hwnd,(WNDENUMPROC)EnumFunc,0);
}
else Memo->Lines->Add("Приложение не найдено");
}
//---------------------------------------------------------------------------

PM MAIL   Вверх
shklowsky
Дата 14.9.2009, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



в отличие от хэндла ID контролов не должны меняться.
по ним и искать.
слегка модифицируем:
Код

bool __stdcall EnumFunc(HANDLE hwnd, LPARAM param)
{
    char name[256], caption[256];
    GetClassName(hwnd,name,sizeof(name));
    SendMessage(hwnd, WM_GETTEXT, sizeof(caption),(LPARAM)(LPCTSTR)caption);
    int i=GetDlgCtrlID(hwnd);
    Form1->Memo1->Lines->Add("ID: "+String(i)+"  "+String(name) + ":" + String(caption));
    return true;
}


PM MAIL   Вверх
VOX
Дата 15.9.2009, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ребят, спасибо, попробую сейчас сделать.
Вообще уже кое-как сделано.... Коллега + еще помог.
Теперь я понял смысл словосочетания
"Программирование в лоб"
Понял в полном смысле этого словосочетания.
Ищу по ректу, форму перемещаю (чужую, откуда брать надо), 
в определенные координаты, да бы рект не сбивался, ну и про-
веряю каждые 5 секунд )))  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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