Страница: 1 |
Страница: 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-сайт:
Профиль | | #2
Добавлено: 18.03.08 19:13
да не для NET
кинь вопщем на форму 2 лейбла и вот код:
Imports System.Runtime.InteropServices
Public Class Form1
<llImport("user32.dll", SetLastError:=True)> _
Private Shared Function GetForegroundWindow() As IntPtr
End Function
<llImport("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
<llImport("user32.dll", SetLastError:=True)> _
Private Shared Function GetCursorPos(ByRef lpPoint As Point) As Boolean
End Function
<llImport("user32.dll"> _
Private Shared Function WindowFromPoint(ByVal xyPoint As Point) As Integer
End Function
<llImport("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
<llImport("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
<llImport("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
Спасибо.