Мне нужно получить доступ к тексту, находящемуся в программе управления станком.
Этой программы у меня естественно на компе нет, поэтому я, можно сказать, тренируюсь на кошках))
Я поискал в форуме и нашел такой вот текст
HWND hWndNotepad=NULL,hWndEdit=NULL;
hWndNotepad=::FindWindow("Notepad",NULL);//ищем дескриптор блокнота(родителя для едита)if(hWndNotepad)
{
hWndEdit=::FindWindowEx(hWndNotepad,0,"Edit",NULL);//ищем дескриптор едита где вы чето написалиif(hWndEdit)
{
char buf[4096]={0};
//шлем пламенный привет едиту с просьбой вернуть его содержимое
::SendMessage(hWndEdit,WM_GETTEXT,sizeof(buf),(LPARAM)buf);//сработает и в чужом приложении(но на незащищенных окнах)
::MessageBox(0,buf,0,0);
}
}
С блокнотом это сработало. Решил попробовать на Ворде
Возникли следеующие проблемы:
1. В Spy++ не отображается окно с самим текстом, который я ввел в ворд (или не отображается просто текст),
хотя остальные окна (касающиеся управления) отображаются. Это означает, что оно заблокировано?
2. И если у какой-то программы несколько окон с типом, например, "Edit", то как открыть нужное?
У меня такая идея, что надо получить список всех дочерних окон, а потом их просмотреть.
Как получить список, в этом случае?
06.02.10 15:15: Перенесено модератором из 'C/C++' — Кодт. Да, и форматирование сделал.
Re: Небольшой вопрос по граббингу текста из стороннего прило
Здравствуйте, J-son, Вы писали:
JS>1. В Spy++ не отображается окно с самим текстом, который я ввел в ворд (или не отображается просто текст), JS>хотя остальные окна (касающиеся управления) отображаются. Это означает, что оно заблокировано?
Возможно это не окно на самом деле.
На WM_GETTEXT будут реагировать далеко не все окна, и надо прежде всего посмотреть, какого типа окно в том приложении.
Если это стандартный Edit контрол — то все ок. Если нет, то есть еще способ — эмулировать нажатие Ctrl+C
в окне и потом считывать текст из буфера обмена.
JS>2. И если у какой-то программы несколько окон с типом, например, "Edit", то как открыть нужное? JS>У меня такая идея, что надо получить список всех дочерних окон, а потом их просмотреть. JS>Как получить список, в этом случае?
EnumChildWindows
Re[2]: Небольшой вопрос по граббингу текста из стороннего пр
Здравствуйте, A.J., Вы писали:
AJ>Здравствуйте, J-son, Вы писали:
JS>>1. В Spy++ не отображается окно с самим текстом, который я ввел в ворд (или не отображается просто текст), JS>>хотя остальные окна (касающиеся управления) отображаются. Это означает, что оно заблокировано?
AJ>Возможно это не окно на самом деле. AJ>На WM_GETTEXT будут реагировать далеко не все окна, и надо прежде всего посмотреть, какого типа окно в том приложении. AJ>Если это стандартный Edit контрол — то все ок. Если нет, то есть еще способ — эмулировать нажатие Ctrl+C AJ>в окне и потом считывать текст из буфера обмена.
JS>>2. И если у какой-то программы несколько окон с типом, например, "Edit", то как открыть нужное? JS>>У меня такая идея, что надо получить список всех дочерних окон, а потом их просмотреть. JS>>Как получить список, в этом случае?
AJ>EnumChildWindows
Хорошо, спасибо
Возможно вы немного не поняли, я имел ввиду, что я именно в Spy++ не вижу вордовского окна, в который собственно вводят текст. Хотя вижу окна с названием шрифта, его размером и тд
А по поводу копирования — идея хорошая, но сначала надо эту испробовать
А как выполнить выделение текста в этом случае, он там не маленький
Например в блокноте можно три раза кликнуть мышкой, а вот в студии такой вариант не прокатил.
Re[3]: Небольшой вопрос по граббингу текста из стороннего пр
Здравствуйте, J-son, Вы писали:
JS>Здравствуйте, A.J., Вы писали:
AJ>>Здравствуйте, J-son, Вы писали:
JS>>>1. В Spy++ не отображается окно с самим текстом, который я ввел в ворд (или не отображается просто текст), JS>>>хотя остальные окна (касающиеся управления) отображаются. Это означает, что оно заблокировано?
AJ>>Возможно это не окно на самом деле. AJ>>На WM_GETTEXT будут реагировать далеко не все окна, и надо прежде всего посмотреть, какого типа окно в том приложении. AJ>>Если это стандартный Edit контрол — то все ок. Если нет, то есть еще способ — эмулировать нажатие Ctrl+C AJ>>в окне и потом считывать текст из буфера обмена.
JS>>>2. И если у какой-то программы несколько окон с типом, например, "Edit", то как открыть нужное? JS>>>У меня такая идея, что надо получить список всех дочерних окон, а потом их просмотреть. JS>>>Как получить список, в этом случае?
AJ>>EnumChildWindows
JS>Хорошо, спасибо
JS>Возможно вы немного не поняли, я имел ввиду, что я именно в Spy++ не вижу вордовского окна, в который собственно вводят текст. Хотя вижу окна с названием шрифта, его размером и тд
JS>А по поводу копирования — идея хорошая, но сначала надо эту испробовать JS>А как выполнить выделение текста в этом случае, он там не маленький JS>Например в блокноте можно три раза кликнуть мышкой, а вот в студии такой вариант не прокатил.
Я разобрался, выделение можно сделать с помощью горячих клавиш
Re[3]: Небольшой вопрос по граббингу текста из стороннего пр
Здравствуйте, J-son, Вы писали:
JS>Возможно вы немного не поняли, я имел ввиду, что я именно в Spy++ не вижу вордовского окна, в который собственно вводят текст. Хотя вижу окна с названием шрифта, его размером и тд
Потому что нет окна с вводом текста, в обычном его понимании.
В Блокноте — стандартный richedit, с которым можно работать стандартными способами.
В ворде — своё окошко, со своей отрисовкой, со своим способом хранения текста где-то там у себя в памяти. Работать через wm_gettext с ним не получится. Оно простирается от левого верхнего угла и до скроллбаров
Получить текст из _любого_ окна — не получится. Из ворда это лучше делать через средства COM.
Re: Небольшой вопрос по граббингу текста из стороннего прило
если обычное, то сообщение WM_GETTEXT
если windowless controls (те у которых нет своего HWND), то через IAccessibility можно получить
если там окно эксплорера то можно через DOM модель работать
еще можно через ctrl+c копировать
и т.д. короче пройдитесь spy++ по проге, там уже будет видно какой способ выбирать
JS>1. В Spy++ не отображается окно с самим текстом, который я ввел в ворд (или не отображается просто текст), JS>хотя остальные окна (касающиеся управления) отображаются. Это означает, что оно заблокировано? JS>2. И если у какой-то программы несколько окон с типом, например, "Edit", то как открыть нужное? JS>У меня такая идея, что надо получить список всех дочерних окон, а потом их просмотреть. JS>Как получить список, в этом случае?