Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Помогите пжлста с GetWindowText кто знает. Добавлено: 18.03.08 15:20  

Автор вопроса:  dimon
Помогите кто может пожалуйста.
Нужно читать текст с чужих приложений(окон, кнопок и т.д.)
Вот, написал такой код:

Public Class Form1
    Dim h As Integer
    Dim bb As New System.Text.StringBuilder
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

    Public Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Integer, ByVal yPoint As Integer) As Integer

    Private Shared Function GetWindowText( _
    ByVal h As Integer, _
    ByVal bb As System.Text.StringBuilder, _
    ByVal maxCount As Integer) As String
    End Function

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        h = WindowFromPoint(Cursor.Position.X, Cursor.Position.Y)
        GetWindowText(h, bb, 255)
        TextBox1.Text = Clipboard.GetText()
    End Sub
End Class


h- хендл, находит.
после выполнения Clipboard пуст. Может быть можно как-то взять текст как нибудь еще? из памяти процесса, например?

Ответить

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

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



Вопросов: 6
Ответов: 23
 Профиль | | #1 Добавлено: 18.03.08 15:22
Да, забыл- код приведенный здесь-http://www.vbnet.ru/faq/showtopic.asp?id=214 не работает, полно ошибок, это не для NET написано?

Ответить

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



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

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #2
Добавлено: 18.03.08 19:13
да не для NET

кинь вопщем на форму 2 лейбла и вот код:


Imports System.Runtime.InteropServices
Public Class Form1
    <;DllImport("user32.dll", SetLastError:=True)> _
    Private Shared Function GetForegroundWindow() As IntPtr
    End Function
    <;DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function SendMessage( _
     ByVal hWnd As IntPtr, _
     ByVal Msg As UInteger, _
     ByVal wParam As IntPtr, _
     ByVal lParam As String) As IntPtr
    End Function
    <;DllImport("user32.dll", SetLastError:=True)> _
    Private Shared Function GetCursorPos(ByRef lpPoint As Point) As Boolean
    End Function
    <;DllImport("user32.dll";)> _
    Private Shared Function WindowFromPoint(ByVal xyPoint As Point) As Integer
    End Function
    <;DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function GetWindowText(ByVal hwnd As IntPtr, _
                           ByVal lpString As System.Text.StringBuilder, _
                           ByVal cch As Integer) As Integer
    End Function
    <;DllImport("user32.dll", CharSet:=CharSet.Auto)> _
    Private Shared Function GetClassName(ByVal hWnd As System.IntPtr, _
       ByVal lpClassName As System.Text.StringBuilder, ByVal nMaxCount As Integer) As Integer
    End Function
    <;DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function GetWindowTextLength(ByVal hwnd As IntPtr) As Integer
    End Function
    Private strBuffer As String
    Private hJanelaCima As Integer
    Private hJanelaAntiga As Integer
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Interval = 100
        Timer1.Enabled = True
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim ptCursor As Point
        Dim texto_janela As System.Text.StringBuilder
        Dim rc As Integer
        Dim nome_classe As System.Text.StringBuilder
        Dim fenster As Integer
        fenster = GetForegroundWindow()
        GetCursorPos(ptCursor)
        hJanelaCima = WindowFromPoint(New Point(ptCursor.X, ptCursor.Y))
        Dim length As Integer = GetWindowTextLength(fenster)
        texto_janela = New System.Text.StringBuilder("", length + 1)
        rc = GetWindowText(fenster, texto_janela, texto_janela.Capacity)
        nome_classe = New System.Text.StringBuilder("", 100)
        rc = GetClassName(hJanelaCima, nome_classe, 100)
        Label1.Text = nome_classe.ToString
        If hJanelaCima = hJanelaAntiga Then Exit Sub
        If WindowText(hJanelaCima) = Nothing Then Exit Sub
        hJanelaAntiga = hJanelaCima
        strBuffer = texto_janela.ToString & vbNewLine
        strBuffer = strBuffer & WindowText(hJanelaCima) & vbNewLine
        Label2.Text = strBuffer
    End Sub
    Private Function WindowText(ByVal window_hwnd As IntPtr) As String
        Dim txtlen As Long
        Dim txt As String
        If window_hwnd = 0 Then Return Nothing
        txtlen = SendMessage(window_hwnd, &HE, 0, 0)
        If txtlen = 0 Then Return Nothing
        txtlen = txtlen + 1
        txt = Space$(txtlen)
        txtlen = SendMessage(window_hwnd, &HD, txtlen, txt)
        Return txt.Substring(0, txtlen)
    End Function
End Class

Ответить

Номер ответа: 3
Автор ответа:
 dimon



Вопросов: 6
Ответов: 23
 Профиль | | #3 Добавлено: 18.03.08 20:58
Блин, вы тут волшебники какието ))
Спасибо большое.

Ответить

Номер ответа: 4
Автор ответа:
 dimon



Вопросов: 6
Ответов: 23
 Профиль | | #4 Добавлено: 19.03.08 12:03
то yxaxa
К сожалению не все удалось сделать что нужно. А можно вам заказать кусок программы, связанный с чтением текстов из чужого приложения?
С оплатой конечно. icq 353-232-625
Спасибо.

Ответить

Страница: 1 |

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



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