Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как считать запись с другой формы?


Автор: Папараццы 25.12.2007, 10:19
Например как считать запись "Running - OPER660 - MSSQLServer", котороя периодически будет менятся ? Во вложенном файлике я  отчет вывел из  WinSight. Мне как я понел нужно использовать WinApi и функцию FindWindowEx. Но как именно считать текст?  

Автор: pandrew 25.12.2007, 10:36
WM_GETTEXT, GetWindowText

Автор: Папараццы 26.12.2007, 08:46
Код

int GetWindowText(      
    HWND hWnd,
    LPTSTR lpString,
    int nMaxCount
);


Я что то не понел.. Как можно int присвоить текст ? 

Автор: Папараццы 26.12.2007, 10:26
  А как мне найти хандл текста который меняется ?  Мне то и надо найти сам текст. 

Автор: ProgMaster 26.12.2007, 22:46
Цитата(Папараццы @  26.12.2007,  08:46 Найти цитируемый пост)
Я что то не понел.. Как можно int присвоить текст ?  

А никак. Открой MSDN и посмотри что и чему нужно присвоить.

Цитата(Папараццы @  26.12.2007,  10:26 Найти цитируемый пост)
А как мне найти хандл текста который меняется ?  Мне то и надо найти сам текст.  

Вначале ищешь хендл главной формы: 
Код

HWND hMain = FindWindow(NULL, "MainForm");

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

HWND hChild;
int iCtrlInd = 0;
while((hChild = FindWindowEx(hMain, NULL, 0, 0)) != NULL)
{
  char s[80] = {0};
   GetWindowText(hChild, s);
  iCtrlInd ++;
  ShowMessage("Control txt: " + s + " and its index at form: " + IntToStr(iCtrlInd));
}

Запоминаешь индекс. Потом просто:
Код

for (int i = 0; i < iCtrlInd - 1; i++)
  hChild = FindWindowEx(hMain, NULL, 0, 0);

hChild = FindWindowEx(hMain, NULL, 0, 0); // это будет нужный контрол


Это конечно образно говоря (этот код даже не скомпилиться). Ну а дальше MSDN и у тебя все получится ;).

Автор: Папараццы 27.12.2007, 09:40
Этот код будет выдовать все записи на форме.  А мне конкретно нужна одна строка. Притом она каждый раз меняется. Интересно можно ли поймать местоположение этого лейбла ? (не по имени а по классу или есче что то в этом роде)

Автор: ProgMaster 27.12.2007, 14:17
Цитата(Папараццы @ 27.12.2007,  09:40)
Этот код будет выдовать все записи на форме.  А мне конкретно нужна одна строка. Притом она каждый раз меняется. Интересно можно ли поймать местоположение этого лейбла ? (не по имени а по классу или есче что то в этом роде)

Не будет он выдавать все записи. Я все подробно расписал, так что попробуй еще раз чутка напрячься и перечитать мой пост. А ловить тут ничего не надо, есть такая тема как TabOrder, именно этот принцип я и использовал.

Подсказочка: в итоговом коде тебе нужно будет юзать только лишь последний код из моего сообщения.

Автор: Папараццы 22.1.2008, 17:11
Код

HWND hwnd1,hwnd2,hwnd3;
hwnd1=FindWindow(NULL,"test form");
hwnd2=FindWindow(NULL, "cvbxcfbxcf");
hwnd3=FindWindowEx(hwnd1,hwnd2,0,0);

наличие формы под именем "test form" я нахожу через if (hwnd1!=NULL) А вот как найти наличие Child ? Потомучто FindWindowEx всегда возвращает  какоето значение даже если на форме явно нету такого окна... Как разобраться с этим ?  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)