- Php windows get window text
- GetWindowText для Windows
- Отзывы о программе GetWindowText
- GetWindowTextA function (winuser.h)
- Syntax
- Parameters
- Return value
- Remarks
- Examples
- GetWindowTextW function (winuser.h)
- Syntax
- Parameters
- Return value
- Remarks
- Examples
- Блог GunSmoker-а (переводы)
- вторник, 11 ноября 2008 г.
- Тайная жизнь GetWindowText
Php windows get window text
Функция GetWindowText копирует текст заголовка определяемого окна (если окно имеет его) в буфер. Если заданное окно является органом управления, копируется его текст. Однако функция GetWindowText не может извлекать текст органа управления в другом приложении.
[in] Дескриптор окна или органа управления, содержащего текст.
[out] Указывает на буфер, который примет текст. Указатель на буфер, который получит текст. Если строка является такой же длины или длиннее, чем буфер, она обрезается и завершается символом NULL.
Устанавливает максимальное число символов для копирования в буфер, включая символ NULL. Если текст превышает это ограничение, он усекается.
Если функция завершается успешно, возвращаемое значение — длина, в символах, скопированной строки, не, включая символа конца строки (нуль-терминатора). Если у окна нет заголовка или текста, если строка заголовка — пустая строка или, если дескриптор окна или органа управления недопустимы, возвращаемое значение нулевое. Чтобы получать расширенные данные об ошибках, вызовите GetLastError .
Эта функция не может извлекать текст из поля элемента редактирования в другой прикладной программе.
Если целевое окно находится во владении текущего потока, функция GetWindowText вынуждена отправить сообщение WM_GETTEXT заданному окну или органу управления. Если целевое окно находится во владении другого потока и имеет заголовок GetWindowText извлекает текст заголовка окна. Если у окна нет заголовка, возвращаемое значение является нулевой строкой. Это поведение регулируется в соответствии с проектом. Оно позволяет прикладным программам вызвать функцию GetWindowText без зависания программы, если процесс, который владеет целевым окном, зависает. Однако если целевое окно зависаете, и оно принадлежит вызывающей программе, функция GetWindowText приведет к зависанию вызывающую программу.
Чтобы извлечь текст из органа управления в другом процессе, отправьте сообщение WM_GETTEXT непосредственно вместо вызова GetWindowText.
GetWindowText для Windows
Оценка: |
4.40 /5 голосов — 5 |
Лицензия: | Бесплатная |
Версия: | 4.01 | Сообщить о новой версии |
Обновлено: | 02.02.2021 |
ОС: | Windows 10, 8.1, 8, 7, XP |
Интерфейс: | Английский, Русский |
Разработчик: | Nenad Hrg |
Категория: | другое |
Загрузок (сегодня/всего): | 4 / 4 951 | Статистика |
Размер: | 49 Кб |
СКАЧАТЬ |
GetWindowText — небольшая портативная (не требующая инсталляции) утилита с помощью которой можно прочитать текст окна (заголовки). Необходимо зажать левую кнопку мыши и навести ее на выбранное окно, после чего в главном окне программы можно будет прочитать его заголовки.
Поддерживает просмотр дерева каталогов (SysTreeView32), выпадающие списки и списки представления (SysListView32), позволяя читать их содержимое.
ASPack — программа для сжатия исполняемых файлов (EXE, DLL, OCX) и защиты от непрофессионального.
SPRuler — экранная линейка, с помощью которой можно быстро и легко измерить в пикселях любые объекты на экране монитора.
CHM Editor — удобная программа для работы с CHM файлами, которые используются при создании.
PHP Expert Editor — редактор PHP скриптов и HTML страниц. Имеет встроенный браузер, отладчик, FTP-клиент.
Ini Editor — Программа является расширенным редактором файлов инициализации, которые имеют.
Logical Designer — небольшая программа для проектирования логических цепочек и схем.
Отзывы о программе GetWindowText
racer про GetWindowText 2.64 [11-01-2015]
распознает только заголовок
2 | 2 | Ответить
Знаток в ответ racer про GetWindowText 3.06 [13-11-2018]
Не смотря на то, что не во всех окнах распознаёт текст, всё равно считаю, что программа отличная.
Иногда приходится копировать ошибки системы, обычным способом это не получилось бы.
2 | 2 | Ответить
Ян про GetWindowText 2.57 [14-12-2014]
Действительно «изумительная» полная ЧУШЬ.
Жаль потраченного времени.
2 | 3 | Ответить
Den про GetWindowText 2.57 [21-10-2014]
Да, дерево левого окна проводникf показывает в тексте. Больше ничего от неё добиться не смог. Как ею пользоваться? Пишет название приложения из которого я пытаюсь получить текст.Похоже полная чушь. Win7 64
2 | 2 | Ответить
Знаток в ответ Den про GetWindowText 3.06 [13-11-2018]
Если не знаешь как пользоваться, значит нем нужна программа
2 | 2 | Ответить
Andr про GetWindowText 2.56 [28-06-2014]
Достойная программа. Для удобства в работе — значок на панель задач рядом со значком любого онлайн переводчика.
2 | 3 | Ответить
Slavko про GetWindowText 2.55 [17-05-2014]
Я В ВОСТОРГЕ! давно такую программу ищу. теперь что бы перевести окно с английского не надо вручную текст вводить.
3 | 2 | Ответить
GetWindowTextA function (winuser.h)
Copies the text of the specified window’s title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied. However, GetWindowText cannot retrieve the text of a control in another application.
Syntax
Parameters
A handle to the window or control containing the text.
The buffer that will receive the text. If the string is as long or longer than the buffer, the string is truncated and terminated with a null character.
The maximum number of characters to copy to the buffer, including the null character. If the text exceeds this limit, it is truncated.
Return value
If the function succeeds, the return value is the length, in characters, of the copied string, not including the terminating null character. If the window has no title bar or text, if the title bar is empty, or if the window or control handle is invalid, the return value is zero. To get extended error information, call GetLastError.
This function cannot retrieve the text of an edit control in another application.
Remarks
If the target window is owned by the current process, GetWindowText causes a WM_GETTEXT message to be sent to the specified window or control. If the target window is owned by another process and has a caption, GetWindowText retrieves the window caption text. If the window does not have a caption, the return value is a null string. This behavior is by design. It allows applications to call GetWindowText without becoming unresponsive if the process that owns the target window is not responding. However, if the target window is not responding and it belongs to the calling application, GetWindowText will cause the calling application to become unresponsive.
To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText.
Examples
The following example code demonstrates a call to GetWindowTextA.
To see this example in context, see Sending a Message.
The winuser.h header defines GetWindowText as an alias which automatically selects the ANSI or Unicode version of this function based on the definition of the UNICODE preprocessor constant. Mixing usage of the encoding-neutral alias with code that not encoding-neutral can lead to mismatches that result in compilation or runtime errors. For more information, see Conventions for Function Prototypes.
GetWindowTextW function (winuser.h)
Copies the text of the specified window’s title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied. However, GetWindowText cannot retrieve the text of a control in another application.
Syntax
Parameters
A handle to the window or control containing the text.
The buffer that will receive the text. If the string is as long or longer than the buffer, the string is truncated and terminated with a null character.
The maximum number of characters to copy to the buffer, including the null character. If the text exceeds this limit, it is truncated.
Return value
If the function succeeds, the return value is the length, in characters, of the copied string, not including the terminating null character. If the window has no title bar or text, if the title bar is empty, or if the window or control handle is invalid, the return value is zero. To get extended error information, call GetLastError.
This function cannot retrieve the text of an edit control in another application.
Remarks
If the target window is owned by the current process, GetWindowText causes a WM_GETTEXT message to be sent to the specified window or control. If the target window is owned by another process and has a caption, GetWindowText retrieves the window caption text. If the window does not have a caption, the return value is a null string. This behavior is by design. It allows applications to call GetWindowText without becoming unresponsive if the process that owns the target window is not responding. However, if the target window is not responding and it belongs to the calling application, GetWindowText will cause the calling application to become unresponsive.
To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText.
Examples
The winuser.h header defines GetWindowText as an alias which automatically selects the ANSI or Unicode version of this function based on the definition of the UNICODE preprocessor constant. Mixing usage of the encoding-neutral alias with code that not encoding-neutral can lead to mismatches that result in compilation or runtime errors. For more information, see Conventions for Function Prototypes.
Блог GunSmoker-а (переводы)
. when altering one’s mind becomes as easy as programming a computer, what does it mean to be human.
вторник, 11 ноября 2008 г.
Тайная жизнь GetWindowText
Функция GetWindowText сложнее, чем может вам показаться на первый взгляд. Документация пытается объяснить её сложность простыми словами, которые прекрасно подойдут, если вы не понимаете сложных слов, но это также значит, что вам говорят не всё.
Этот пост — попытка рассказать «всё».
Как окна управляют своим текстом
Для окна (в смысле WinAPI) существует два способа управлять своим текстом (заголовком). Они могут делать это сами или позволить делать это системе. По умолчанию управлением занимается система.
Если оконный класс даёт управление своим текстом системе, то система сделает следующее:
— Обработчик по-умолчанию для сообщения WM_NCCREATE возьмёт параметр lpWindowName (передваваемый CreateWindow/Ex) и сохранит его в «особом месте».
— Обработчик по-умолчанию для сообщения WM_GETTEXT копирует строку из этого «особого места».
— Обработчик по-умолчанию для сообщения WM_SETTEXT копирует строку в это «особое место».
С другой сторны, если оконный класс решит управлять своим текстом сам, то система не будет делать никаких дополнительных действий, а оконный класс будет обязан реагировать на сообщения WM_GETTEXT/WM_SETTEXT и руками сохранять/восстанавливать строку.
Каркасные классы обычно отдают управление текстом системе, а пользовательские классы предпочитают ручное управление.
У функции GetWindowText есть одна маленькая проблема: она должна возвращать текст окна без зависания. К примеру, функции FindWindow нужно получать заголовки окон во время поиска. Приложениям по переключению задач (Task-switching applications) нужно получать заголовки окон для отображения в окошке переключения. Нельзя допустить, чтобы одно зависшее приложении влияло бы на другие приложения. Это было бы очень нехорошо.
Именно поэтому в этих сценариях не будет работать отправка сообщения WM_GETTEXT, потому что целевое для WM_GETTEXT окно может висеть. Чтобы избавиться от этой проблемы, GetWindowText должна использовать «особое место», т.к. оно не подвержено влиянию зависшего приложения.
С другой стороны, GetWindowText часто используется для чтения строк в элементах управления (контролах) диалогов, а эти контролы часто используют ручное управление текстом. Это требует отправки сообщения WM_GETTEXT, поскольку это единственный способ получения текста у окон с ручным управлением.
Поэтому GetWindowText использует компромиссное решение:
— Если вы пытаетесь использовать GetWindowText для окна в своём собственном процессе, то GetWindowText будет использовать сообщение WM_GETTEXT.
— Если вы пытаетесь использовать GetWindowText для окна в чужом процессе, то GetWindowText будет использовать строку из «особого места» и не будет отправлять сообщение.
Согласно первому правилу, если вы пытаетесь получить текст из окна в своём процессе, а окно при этом висит, то, конечно же, GetWindowText также повиснет. Но поскольку зависшее окно принадлежит вашему процессу, то это будет целиком вашей виной. Вы проиграли, а другие не пострадали — всё честно. При этом отправка сообщений WM_GETTEXT гарантирует корректную работу окон с ручным управлением текстом.
Согласно же второму правилу, если вы пытаетесь получить текст из окна в чужом процессе, тогда GetWindowText не будет отправлять сообщение — она просто прочтёт строку из «особого места». Поскольку самой частой причиной для вызова GetWindowText для окна чужого процесса является чтение заголовков окон и поскольку такие оконные классы используют системное управление, то такое поведение обычно приводит к желаемому результату.
Что касается документации, то она упрощает это до одной фразы: «GetWindowText() cannot retrieve text from a window from another application.» («GetWindowText не может читать текст из окна чужого приложения.»).
Что, если мне не нравятся эти правила?
Если вас так уж отягощает второе правило (потому что вам нужно получать текст пользовательского контрола в чужом процессе), то вам никто не мешает слать WM_GETTEXT напрямую. Поскольку при этом вы не будете использовать GetWindowText, то вы и не окажетесь под влиянием этих правил.
Только не забудьте, что если интересующее вас окно будет висеть, то ваше приложение также повиснет, т.к. SendMessage не вернёт управление, пока целевое окно не ответит.
Также заметим, что поскольку WM_GETTEXT лежит в диапазоне базовых системных сообщений (от 0 до WM_USER-1), то вам не нужно делать никакой обработки параметров (и, фактически, вы не должны этого делать). Система автоматически скопирует строку из одного процесса в другой для вас.
А можешь дать пример, когда это на что-то влияет?
Рассмотрим такой элемент управления:
Пусть теперь приложение А делает:
И пусть у нас есть процесс Б, у которого есть описатель окна (hwnd = MyControl.Handle), созданного процессом А (не важно, как он его получил):
Этот код вернёт szBuf = ‘Frappy’, потому что это именно та строка, которая хранится в «особом месте».
Однако: