Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
31 / 23 / 10
Регистрация: 05.02.2010
Сообщений: 211
1

Не срабатывает GetWindowText

09.04.2012, 01:43. Показов 3666. Ответов 11
Метки нет (Все метки)

Пытаюсь перечислением найти окно, а заголовке которого есть слово "test" ( заголовок "this is test aaa!" должен находить.)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BOOL CALLBACK MyEnum(HWND tmp_hwnd,LPARAM lParam)
{
    AnsiString tmp_window_name;
    wchar_t *tmp_buff;
    int a=GetWindowText(tmp_hwnd,tmp_buff,200);
    tmp_window_name=(AnsiString)tmp_buff;
    if (tmp_window_name.Pos("test"))
        hwnd=tmp_hwnd;
    return TRUE;
}
//---------------------------------------------------------------------------
void FindGameWindow()
{
    EnumWindows((WNDENUMPROC)MyEnum, 1);
}
a всегда =0
tmp_hwnd не ноль - видимо нормально находит
tmp_window_name всегда =NULL

Не могу понять, что я делю не так, перечитал уже все, что можно...
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2012, 01:43
Ответы с готовыми решениями:

Функция GetWindowText
Доброе время суток ! Использую функцию GetWindowText после чего вывожу в файл WriteFile , почему...

LPWSTR и GetWindowText
Итак, есть такой кусок кода: LPWSTR tmp; HWND hwnd = (HWND)pHandle; GetWindowText(hwnd, tmp,...

Функции GetWindowText
Подскажите, почему ф-я GetWindowText считывает в массив через один, т.е. если запись в окне 12345,...

GetWindowText возвращает мусор
Для определения имени программы, вызвавшей хук (Keyboard) использую GetWindowText, но она почему то...

11
1089 / 587 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
09.04.2012, 06:08 2
а память под *tmp_buff не пробовали выделить?
0
4033 / 2323 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.04.2012, 08:07 3
И плюс к этому надо все-таки не приводить тип, а конструировать на его основе:
C++
1
tmp_window_name = String( tmp_buff );
1
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
09.04.2012, 09:52 4
C++
1
2
3
4
5
6
7
8
9
char chBuff[MAX_PATH + 1];
if (GetWindowTextA(hWnd,chBuff,MAX_PATH)!=0) {
    const AnsiString sWindowName(chBuff);
    if (sWindowName.Pos("test")) {
        // окно с текстом найдено
    }
} else {
    // у окна нет заголовка, либо заголовок пустой
}
1
31 / 23 / 10
Регистрация: 05.02.2010
Сообщений: 211
09.04.2012, 12:21  [ТС] 5
Да, это работает, спасибо)
Хотя я был уверен, что указатель для того и нужен, что бы память явно не выделять...
0
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 10
06.05.2014, 15:37 6
C++
1
2
3
4
5
6
7
8
      pH = FindWindow(NULL, (Edit2->Text).c_str());
      LPTSTR A1="", A2="";
      //ZeroMemory(&A1, 255);
      //ZeroMemory(&A2, 255);
      GetWindowText(pH, A1, 255);
      GetWindowText(pH, A2, 255);
      ShowMessage(A1);
      ShowMessage(A2);
В поле Edit2 ввожу полученное из WinSpy++ "Безымянный - Блокнот",
при одном запуске показывает пустые строки "" и "",
при другом выдает "ББезымянный - Блокнот" и "Безымянный - Блокнот"
как сделать, чтобы работало корректно?
0
4033 / 2323 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
06.05.2014, 15:54 7
LPTSTR - это указатель. Поэтому:
C++
1
TCHAR A1[255], A2[255];
Изучаем типы на досуге - Windows Data Types...
1
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 10
06.05.2014, 18:26 8
следующий код
C++
1
2
3
4
5
6
7
8
         TCHAR A1[255], A2[255];
         GetWindowText(pH, A1, 255);
         GetWindowText(pH, A2, 255);
 
         if (A1!=A2) { f1 = "отличаются: " + (AnsiString)A1 + ": "  +
            (AnsiString)A2;}
         if (A1==A2) { f1 = "одинаковые"; }
         ShowMessage(f1);
дает сообщение, что А1 и А2 отличаются, хотя не должны, зато они выводятся одинаковыми
сейчас вообще не пойму, в чем проблема...

Добавлено через 12 минут
пробовал
C++
1
2
3
         LPTSTR A1, A2;
         A1 = (char *)malloc(255);
         A2 = (char *)malloc(255);
но результат тот же
0
4033 / 2323 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
06.05.2014, 22:13 9
Капец на холодец. Не зная языка, ты выдумываешь проверки правильности кода абсурднее некуда.
Это указатели, целочисленные переменные, хранящие адреса блоков памяти. Если они указывают на разные блоки, то и они сами по себе разные. Однако информация, находящаяся в этих разных блоках памяти, вполне себе может быть одинаковой. В данном случае у тебя один и тот же текст находится в двух отдельных местах в памяти - текст одинаковый, а указатели на него разные.
Начни с книг, иначе такая ерунда будет происходить довольно часто.
1
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 10
06.05.2014, 22:45 10
BRcr, хорошо, но можете подсказать, как сравнить информацию, на которую указывают эти указатели?
то есть, что записать вместо
C++
1
(A1!=A2)
?
0
4033 / 2323 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
06.05.2014, 23:30 11
memcmp(), strcmp(), wstrcmp(), SysUtils::CompareStr() и тд и тп...
1
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 10
06.05.2014, 23:55 12
Объявил еще две переменные ансистринг, конвертировал первые во вторые, и сравнивал их. Так всё получилось, как мне надо было:
C++
1
2
         AnsiString C1, C2;
         C1 = (AnsiString)A1; C2 = (AnsiString)A2;
Добавлено через 11 минут
BRcr, спасибо, вот так -
C++
1
strcmp(A1,A2)!=0
- получилось
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2014, 23:55

Различия GetWindowText и WM_Gettext
Извините что не по теме кто нибуд подскажет Различия GetWindowText и WM_Gettext на VB

Повторный вызов GetWindowText
Len = GetWindowText(hEdt1, strEdt1, 5); memcpy(charFromEdt1, strEdt1, 5); ...

GetWindow и GetWindowText. Корректировка кода
if Msg = '!window' then begin wnd := GetWindow(handle, gw_hwndfirst); while wnd <> 0 do begin...

GetWindowText() не получаю заголовок окна
Помогите справиться с бедой, или укажите куда курить... Имеем x64, свою .dll в которой ставим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.