Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/22: Рейтинг темы: голосов - 22, средняя оценка - 4.68
49 / 37 / 14
Регистрация: 05.02.2010
Сообщений: 249

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

09.04.2012, 01:43. Показов 4503. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.04.2012, 01:43
Ответы с готовыми решениями:

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

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

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

11
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
09.04.2012, 06:08
а память под *tmp_buff не пробовали выделить?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.04.2012, 08:07
И плюс к этому надо все-таки не приводить тип, а конструировать на его основе:
C++
1
tmp_window_name = String( tmp_buff );
1
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
09.04.2012, 09:52
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
49 / 37 / 14
Регистрация: 05.02.2010
Сообщений: 249
09.04.2012, 12:21  [ТС]
Да, это работает, спасибо)
Хотя я был уверен, что указатель для того и нужен, что бы память явно не выделять...
0
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 10
06.05.2014, 15:37
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
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
06.05.2014, 15:54
LPTSTR - это указатель. Поэтому:
C++
1
TCHAR A1[255], A2[255];
Изучаем типы на досуге - Windows Data Types...
1
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 10
06.05.2014, 18:26
следующий код
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
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
06.05.2014, 22:13
Капец на холодец. Не зная языка, ты выдумываешь проверки правильности кода абсурднее некуда.
Это указатели, целочисленные переменные, хранящие адреса блоков памяти. Если они указывают на разные блоки, то и они сами по себе разные. Однако информация, находящаяся в этих разных блоках памяти, вполне себе может быть одинаковой. В данном случае у тебя один и тот же текст находится в двух отдельных местах в памяти - текст одинаковый, а указатели на него разные.
Начни с книг, иначе такая ерунда будет происходить довольно часто.
1
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 10
06.05.2014, 22:45
BRcr, хорошо, но можете подсказать, как сравнить информацию, на которую указывают эти указатели?
то есть, что записать вместо
C++
1
(A1!=A2)
?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
06.05.2014, 23:30
memcmp(), strcmp(), wstrcmp(), SysUtils::CompareStr() и тд и тп...
1
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 10
06.05.2014, 23:55
Объявил еще две переменные ансистринг, конвертировал первые во вторые, и сравнивал их. Так всё получилось, как мне надо было:
C++
1
2
         AnsiString C1, C2;
         C1 = (AnsiString)A1; C2 = (AnsiString)A2;
Добавлено через 11 минут
BRcr, спасибо, вот так -
C++
1
strcmp(A1,A2)!=0
- получилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2014, 23:55
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru