Страница: 1 |
Вопрос: Как еще можно получить текст кроме GetWindowText? | Добавлено: 20.03.08 13:45 |
Автор вопроса: ![]() |
Как еще можно получить текст из чужого окна кроме GetWindowText?
У окон нет своего хендла. т.е. есть главное окно с элементами- окно чарта, кнопки, надписи на форме(не графика), но хендл у всех один- главного окна. Соответственно текст получаю только "заголовок гл. окна" Можно как то получить тексты всех элементов внутри гл. окна? Может кто нибудь возьмется сделать кусок программы, связанный с этой задачей? С оплатой конечно. icq 353-232-625 С API никак не могу подружиться )) |
Ответы | Всего ответов: 6 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 300-70-6пятьЪ Вопросов: 62 Ответов: 545 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 20.03.08 14:46 |
берешь мой прошлый кусок кода, добавляешь
< ![]() Private Shared Function EnumChildWindows(ByVal hWndParent As System.IntPtr, _ ByVal lpEnumFunc As EnumWindowsProc, ByVal lParam As Integer) As Boolean End Function Private Delegate Function EnumWindowsProc(ByVal Handle As IntPtr, ByVal Parameter As IntPtr) As Boolean Private Function EnumWindow(ByVal Handle As IntPtr, ByVal Parameter As IntPtr) As Boolean Dim length As Integer = GetWindowTextLength(Handle) Dim texto_janela As System.Text.StringBuilder = New System.Text.StringBuilder("", length + 1) Dim rc As Integer = GetWindowText(Handle, texto_janela, texto_janela.Capacity) Dim nome_classe As System.Text.StringBuilder = New System.Text.StringBuilder("", 100) rc = GetClassName(Handle, nome_classe, 100) Dim str As String = nome_classe.ToString str += " - " + texto_janela.ToString + " - " + WindowText(Handle) ListBox1.Items.Add(str) Return True End Function и окрестности этих строк в Timer1 hJanelaCima = WindowFromPoint(New Point(ptCursor.X, ptCursor.Y)) Dim length As Integer = GetWindowTextLength(fenster) меняешь на hJanelaCima = WindowFromPoint(New Point(ptCursor.X, ptCursor.Y)) ListBox1.Items.Clear() EnumChildWindows(hJanelaCima, AddressOf EnumWindow, 0) Dim length As Integer = GetWindowTextLength(fenster) также не забудь кинуть на форму больщой ListBox1 |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() Вопросов: 6 Ответов: 23 |
Профиль | Цитата | #2 | Добавлено: 20.03.08 18:49 |
выдает список элементов и хендлов ( я добавил в строку str += " - " + texto_janela.ToString + " - " + WindowText(Handle) еще + " - " + Handle.ToString )
в таком виде: PTIODEVICE - - - 264598 PTIODEVICE - - - 264616 PTIODEVICE - - - 264590 Shell Embedding - - - 264588 Shell DocObject View - - - 264618 Internet Explorer_Server - - - 395634 Shell Embedding - - - 264614 Shell DocObject View - - - 264594 Internet Explorer_Server - - - 264584 Shell Embedding - - - 264592 Shell DocObject View - - - 264610 Internet Explorer_Server - - - 330162 Но текстов с элементов нет.- не видит? Через nome_classe можно задать целевое окно? типа WindowText(nome_classe) ? |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 300-70-6пятьЪ Вопросов: 62 Ответов: 545 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 20.03.08 20:23 |
да, не показывается текст многих элементов.
nome_classe это класс окна, а не хэндл, если хочешь его фильтровать, то и писать нужно что-нить типа Dim nome_classe As System.Text.StringBuilder = New System.Text.StringBuilder("", 100) rc = GetClassName(Handle, nome_classe, 100) If nome_class = "Internet Explorer_Server" Then ... Else ... опиши, что именно ты хочешь получить, если цель например только брать текст из эксплорера, то думаю тебе поможет статья http://www.vbstreets.ru/VB/Articles/66050.aspx |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() Вопросов: 6 Ответов: 23 |
Профиль | Цитата | #4 | Добавлено: 20.03.08 20:59 |
Нет экплорер не нужен. Спиок выше это список элементов главного окна, с которого мне нужты тексты элементов. Internet Explorer_Server- это описатель окна чарта.
Кстати Windows spy из Autohotkey более полно показывает описатели: Internet Explorer_Server=>Internet Explorer_Server 1 или Internet Explorer_Server 2 Не хочется здесь говорить конкрето что нужно. Можешь в асю стукнуть? В принципе моя задача похожа на : запустить интернет нарды из стандартых игр Windows, и прочитать все тексты с этого окна. ( там чарт правда читается, а остальное так же как и в моей задаче) |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() Вопросов: 6 Ответов: 23 |
Профиль | Цитата | #5 | Добавлено: 20.03.08 21:21 |
В принципе с чатом я решил проблему, но тупо: прога ставит курсор на чат, делает клик, посылает ctrl+a, потом ctrl+с- текст в буфере.
но это не решает проблемы с остальными элементами, да быть првязанным к координатам дисплея не хочется |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 8068014 Вопросов: 18 Ответов: 817 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 20.03.08 22:39 |
есть действенный способ, но не реализуемый на дотнете. Нужно хукать TextOutW и еще несколько функций. По координатам можно понять куда выводится текст, и дальше отсекать нужный. Я такое делал, задачка веселая ![]() |
Страница: 1 |
|