Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как еще можно получить текст кроме GetWindowText? Добавлено: 20.03.08 13:45  

Автор вопроса:  dimon
Как еще можно получить текст из чужого окна кроме GetWindowText?
У окон нет своего хендла. т.е. есть главное окно с элементами- окно чарта, кнопки, надписи на форме(не графика), но хендл у всех один- главного окна. Соответственно текст получаю только "заголовок гл. окна"

Можно как то получить тексты всех элементов внутри гл. окна?

Может кто нибудь возьмется сделать кусок программы, связанный с этой задачей? С оплатой конечно.

icq 353-232-625

С API никак не могу подружиться ))

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #1
Добавлено: 20.03.08 14:46
берешь мой прошлый кусок кода, добавляешь


<;DllImport("user32.dll", CharSet:=CharSet.Auto)> _
    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
Автор ответа:
 dimon



Вопросов: 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
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #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
Автор ответа:
 dimon



Вопросов: 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
Автор ответа:
 dimon



Вопросов: 6
Ответов: 23
 Профиль | | #5 Добавлено: 20.03.08 21:21
В принципе с чатом я решил проблему, но тупо: прога ставит курсор на чат, делает клик, посылает ctrl+a, потом ctrl+с- текст в буфере.
но это не решает проблемы с остальными элементами, да быть првязанным к координатам дисплея не хочется

Ответить

Номер ответа: 6
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #6
Добавлено: 20.03.08 22:39
есть действенный способ, но не реализуемый на дотнете. Нужно хукать TextOutW и еще несколько функций. По координатам можно понять куда выводится текст, и дальше отсекать нужный. Я такое делал, задачка веселая =) Но на дотнете мало выполнимая.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам