Что такое код getwindowtext

Java — GetWindowTextA, GetWindowText возвращает пустое значение в элементе управления Edit

Я пытаюсь составить список и получить содержимое элементов управления редактирования из внешнего окна в C ++ / Java, к сожалению, безуспешно.

Когда я вызываю GetWindowText или GetWindowTextA, он возвращает пустое значение в элементах управления Edit, я знаю, что есть некоторые различия между GetWindowText / GetWindowTextW и GetWindowTextA, но я не знаю, что я делаю неправильно, так как это работает на всех других элементах управления.

Решение

Я не уверен, что является причиной вашей проблемы, но для меня это сработало:

редактировать
Вы должны получить текст для редактирования другим способом, через

GetWindowTextA, GetWindowText returns empty value on Edit Control

I’m trying to list and get the content of Edit Controls from an external Window in C++ / Java, unfortunately with no success.

When I call GetWindowText or GetWindowTextA it returns an empty value on Edit Controls, I know there are some differences between GetWindowText / GetWindowTextW and GetWindowTextA but I don’t know What I’m doing wrong since it works on all other controls.

Here the C++ Code:

1 Answer 1

I’m not sure what is causing your problem, but this has worked just fine for me:

Edit
You should get the edit text a different way, via

C# как использовать WM gettext / GetWindowText API

Я хочу получить содержимое элемента управления / дескриптора приложения..

вот экспериментальный код..

есть идеи? Я прочитал какой-то метод API, такой как GetWindowText или WM_GETTEXT, но я не знаю, как его использовать или применить к моему коду.. Мне нужен учебник или пример кода.

3 ответов

GetWindowText не даст вам содержимое окон редактирования из других приложений -Он поддерживает только управляемый по умолчанию текст [как подписи меток] в процессах для предотвращения зависаний. вам нужно будет отправить WM_GETTEXT.

вам нужно будет использовать версию SendMessage StringBuilder:

Что такое код getwindowtext

char tText[254];
HWND hWnd;
//
hWnd = GetTopWindow(0);
while (hWnd != 0) <
hWnd = GetNextWindow(hWnd, GW_HWNDNEXT);
GetWindowText(hWnd, tText, 254);
.
.
>

Ошибка компилятора
e:\mydocs\visual studio 2010\projects\example1\example1\Form1.h(113): error C2664: GetWindowTextW: невозможно преобразовать параметр 2 из «char [254]» в «LPWSTR»

Где ошибка? Ткните носом, пожалуйста!

Microsoft Visual C++ 2010 Express

От: uzhas
Дата: 23.07.11 16:47
Оценка:
От: mrHill
Дата: 23.07.11 17:31
Оценка:

Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, mrHill, Вы писали:

H>>Ошибка компилятора
H>>e:\mydocs\visual studio 2010\projects\example1\example1\Form1.h(113): error C2664: GetWindowTextW: невозможно преобразовать параметр 2 из «char [254]» в «LPWSTR»

H>>Где ошибка? Ткните носом, пожалуйста!
U>вы пытаетесь передать ANSI string, а просят юникодную строчку (wchar_t*)
U>либо сделайте свой текст юникодным (вместо char надо wchar_t), либо уберите поддержку уникода в проекте (в свойствах проекта уберите юникод). в последнем случае это приведет к тому, что GetWindowsText будет превращаться не в GetWindowTextW, а в GetWindowsTextA

Илон Маск рекомендует:  Выравниваем содержимое tcombobox по правую сторону

LPWSTR tText;
HWND hWnd;
//

tText = new WCHAR[254];

hWnd = GetTopWindow(0);
while (hWnd != 0) <
hWnd = GetNextWindow(hWnd, GW_HWNDNEXT);
GetWindowText(hWnd, tText, 254);
.
.
>

Все равно не работает!

Example1.obj : error LNK2028: ссылка на неразрешенную лексему (0A000011) «extern «C» int __stdcall GetWindowTextW(struct HWND__ *,wchar_t *,int)» (?GetWindowTextW@@$$J212YGHPAUHWND__@@PA_WH@Z) в функции «private: void __clrcall Example1::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)» (?button1_Click@Form1@Example1@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)

От: mrHill
Дата: 23.07.11 19:55
Оценка:
От: incomoto
Дата: 23.07.11 20:56
Оценка:

Здравствуйте, mrHill, Вы писали:

H>Есть такой код:

H>char tText[254];
H>HWND hWnd;
H>//
H>hWnd = GetTopWindow(0);
H>while (hWnd != 0) <
H> hWnd = GetNextWindow(hWnd, GW_HWNDNEXT);
H> GetWindowText(hWnd, tText, 254);
H> .
H> .
H>>

H>Ошибка компилятора
H>e:\mydocs\visual studio 2010\projects\example1\example1\Form1.h(113): error C2664: GetWindowTextW: невозможно преобразовать параметр 2 из «char [254]» в «LPWSTR»

H>Где ошибка? Ткните носом, пожалуйста!

H>Microsoft Visual C++ 2010 Express

Ошибка преобразования типов при вызове GetWindowText (). Согласно MSDN прототип функции выглядит следующим образом:

int WINAPI GetWindowText(
__in HWND hWnd,
__out LPTSTR lpString,
__in int nMaxCount
);

где lpString — заполняемый буфер, имеющий тип LPTSTR при условии, что:

#ifdef UNICODE
typedef LPWSTR LPTSTR;
#else
typedef LPSTR LPTSTR;
#endif

определенный как (судя по сообщению MSVC++ макрос UNICODE все-таки определен):

typedef WCHAR *LPWSTR;

где WCHAR, в свою очередь определен как:

typedef wchar_t WCHAR;

где wchar_t — обыкновенный unsigned char (т.е. 16-рязрядное целое без знака), итого имеем:

typedef unsigned char *LPTSTR;

Что, в свою очередь, совсем не char [254]. Поэтому компилятор вполне добросовестно делает свою работу. Вот такой вот пирог от Micro$oft. Раз уж функция требует зловещий LPWSTR, значит этого типа переменную и нужно ей преподнести в данном случае.

От: uzhas
Дата: 23.07.11 22:25
Оценка:

I>где WCHAR, в свою очередь определен как:

I>typedef wchar_t WCHAR;

I>где wchar_t — обыкновенный unsigned char (т.е. 16-рязрядное целое без знака), итого имеем:

I>typedef unsigned char *LPTSTR;

Остапа понесло и принесло не туда

От: incomoto
Дата: 25.07.11 07:48
Оценка:

Здравствуйте, uzhas, Вы писали:

I>>где WCHAR, в свою очередь определен как:

I>>typedef wchar_t WCHAR;

I>>где wchar_t — обыкновенный unsigned char (т.е. 16-рязрядное целое без знака), итого имеем:

I>>typedef unsigned char *LPTSTR;

U>Остапа понесло и принесло не туда

Ёшкин кот, точно.

unsigned short, конечно же, никакой не unsigned char. Пардон

От: Centaur
Дата: 25.07.11 08:41
Оценка:

Здравствуйте, incomoto, Вы писали:

I>>>где wchar_t — обыкновенный unsigned char (т.е. 16-рязрядное целое без знака), итого имеем:

I>unsigned short, конечно же, никакой не unsigned char. Пардон

Опять неправильно. wchar_t — встроенный тип C++, никак не связанный с unsigned short.

От: DarkEld3r
Дата: 25.07.11 09:12
Оценка:

Здравствуйте, Centaur, Вы писали:

C>Опять неправильно. wchar_t — встроенный тип C++, никак не связанный с unsigned short.

Ну а если /Zc:wchar_t-?

От: incomoto
Дата: 25.07.11 10:57
Оценка:

Здравствуйте, Centaur, Вы писали:

C>Здравствуйте, incomoto, Вы писали:

I>>>>где wchar_t — обыкновенный unsigned char (т.е. 16-рязрядное целое без знака), итого имеем:

I>>unsigned short, конечно же, никакой не unsigned char. Пардон

Илон Маск рекомендует:  Что такое код hw_api &#62;remove

C>Опять неправильно. wchar_t — встроенный тип C++, никак не связанный с unsigned short.

Каюсь, опять погорячился. В MSDN, правда, написано:

«By default wchar_t is a typedef for unsigned short.»

Ну а в стандарте С++98 — «implementation-defined». Правда, тип, оказывается, был внесен еще в C90, т.е. еще до официального анонсирования C++.

Что такое код getwindowtext

GetWindowText позволяет извлекать текст из статических системных сообщений с помощью перетаскивания Разработчик Nenad Hrg

GetWindowText — это очень маленькая и портативная программа, с помощью которой вы можете читать текст окна. Нажав левую кнопку мыши на кнопке со значком GetWindowText и удерживая левую кнопку мыши (перетащить), можно начать чтение. Затем просто наведите курсор мыши на окно, из которого текст должен быть прочитан.

Можно прочитать почти все тексты, например, из Edit, Static, Groupbox — Controls и т. д.
Эта программа также поддерживает деревья каталогов (SysTreeView32), комбинированный список и представления списков (SysListView32) для чтения всего содержимого. Когда вы отпустите кнопку мыши, чтение будет закончено.

GetWindowTextA, GetWindowText возвращает пустое значение на Edit Control

Я пытаюсь перечислить и получить содержимое Edit Controls от внешнего окна в C ++ / Java, к сожалению, не имели успеха.

Когда я называю GetWindowText или GetWindowTextA возвращает пустое значение на Edit Controls, я знаю, что есть некоторые различия между GetWindowText / GetWindowTextW и GetWindowTextA, но я не знаю, что я делаю неправильно, так как он работает на все другие элементы управления.

Я не уверен, что является причиной вашей проблемы, но это работает очень хорошо для меня:

Редактирование
Вы должны получить редактировать текст другой способ, с помощью

SetWindowText

Функция SetWindowText изменяет текст заголовка (если заголовок существует) указанного окна. Если указанное окно является элементом управления, то изменяется текст этого элемента управления.

BOOL SetWindowText (

HWND hWnd , // дескриптор окна или элемента управления

LPCTSTR lpString // адрес строки

Параметры

hWnd — идентифицирует окно или элемент управления, чей текст изменяется.

lpString — указывает на завершающуюся нулем строку, используемую в качестве нового заголовка окна или текста элемента управления.

Возвращаемые значения

В случае успеха возвращается ненулевое значение.

В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке, вызовите функцию GetLastError

Комментарии

Функция SetWindowText отправляет сообщение WM_SETTEXT указанному окну или элементу управления. Тем не менее, если окно является окном списка, созданным с параметром WS_CAPTION, SetWindowText устанавливает текст для элемента управления, а не для элементов списка.

Функция SetWindowText не разворачивает символы табуляции ( ASCII -код 0 x 09). Символы табуляции отображаются как вертикальная черта (|).

См . также

GetWindowText , WM_SETTEXT.

Что такое код getwindowtext

Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Форум программистов > Низкоуровневое программирование > Win Api
GetWindowText, помогите разобраться
Регистрация
Поиск по форуму
Расширенный поиск
К странице.

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда — alarforum@yandex.ru

02.11.2006, 23:44 #1

GetWindowText(hWnd:HWND;lpString:PC har,nMaxCount:word):integer
копирует текст, связанный с указанным окном, в указанный буфер

P.S.официальный текст,примеров не нашел.

03.11.2006, 05:24 #2

const
max_L= 256;
var
str:array[0..max_L-1] of char;
_caption:string;
begin
.
getwindowtext(handle,@str);
_caption:=str;

после чего в _caption текст заголовка окна.

03.11.2006, 21:04 #3

после чего в _caption текст заголовка окна.

Что такое код getwindowtext

Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

04.11.2006, 00:43 #4
Форум программистов > Низкоуровневое программирование > Win Api
GETWINDOWTEXT что и как
Регистрация
Поиск по форуму
Расширенный поиск
К странице.

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда — alarforum@yandex.ru

Не могу вставить текст в MEmo1 как перевести из PWideChar в String?
Или эта функция копирует только название окна? Мне нужно полностью текст всего кона, не только название окна

char:PWideChar;
GetwindowText(h1,char,102400);
Memo1.Text:=Widestring(char);

Скопирую ли я весь текст или нужно какой-то массив?

Что такое код getwindowtext

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

Type: HWND

A handle to the window or control containing the text.

Type: LPTSTR

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.

Type: int

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

Type: int

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

Requirements

Minimum supported client

Windows 2000 Professional [desktop apps only]

Minimum supported server

Windows 2000 Server [desktop apps only]

Unicode and ANSI names

GetWindowTextW (Unicode) and GetWindowTextA (ANSI)

Илон Маск рекомендует:  Что такое код pg_affected_rows
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
03.10.2009, 19:41 #1
Winuser.h (include Windows.h)