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

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

09.04.2012, 01:43. Показов 4440. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru