Можно ли выскрести текст из текстового поля, которое содержится в отдельном исполняемом файле? У меня есть приложение, которое имеет окно отладки. Окно отладки генерирует подробный журнал. Тем не менее, журнал никогда не сохраняется нигде и может быть просмотрен только в приложении. Если приложение генерирует исключение, я хотел бы написать себе по электронной почте, зная, что исключение было сгенерировано, чтобы я мог прыгнуть и проверить вещи. Также есть кнопка для копирования текстового поля, поэтому я подумал об использовании Spy ++ для получения информации о команде. Тем не менее, я не знаю, куда идти оттуда. Любые указатели очень ценятся.
Я бы предпочел использовать C # в .NET, но если мне нужно будет использовать C ++, я буду.
UPDATE
Основываясь на комментариях, я попытался сделать следующее:
Private Declare Function GETWINDOWTEXT Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Integer, ByVal lpString As String, ByVal cch As Integer) As Integer
Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Integer) As Integer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindow As String) As IntPtr
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Private Declare Ansi Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
Private Const WM_GETTEXT As Short = &HDS
Private Const WM_GETTEXTLENGTH As Short = &HES
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim hwnd As Integer = FindWindowEx(0, 0, "MyAppForm", "Hello World")
If Not hwnd = 0 Then
SetForegroundWindow(hwnd)
'Dim LabelEx As Integer = FindWindowEx()
Dim TextBoxEx As Integer = FindWindowEx(hwnd, 0, "MyAppTextBox", vbNullString)
Dim txtLength As Long = SendMessage(TextBoxEx, WM_GETTEXTLENGTH, CInt(0), CInt(0)) + 1
Dim txtBuff As String = Space(txtLength)
Dim txtValue As Long = SendMessage(TextBoxEx, WM_GETTEXT, txtLength, txtBuff)
MsgBox(txtBuff)
End If
End Sub
Однако я не могу найти дескриптор элемента управления textbox. Когда я перечисляю все окна, я вижу только один объект TextBox, но я вижу родителя несколько раз в течение перечисления. Как я могу получить указатели на элементы управления в окне?
ОБНОВЛЕНИЕ 2:
Я загрузил пример приложения для Windows, чтобы показать тип приложения, к которому я пытаюсь получить доступ. Я пытаюсь получить значения обеих меток в дополнение к текстовому полю. Текстовое поле является наиболее важным. Пример приложения Win находится здесь: http://www.mediafire.com/file/172r2xapj7p4f2f/StatusSimulator.zip