4 / 4 / 8
Регистрация: 11.11.2014
Сообщений: 256
1

Как изменить текст Label в другом приложении?

10.02.2015, 15:08. Показов 1833. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Подскажите пожалуйста, как можно изменить Label на другом приложении.
Знаю, что надо использовать дескриптор, но как это можно реализовать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2015, 15:08
Ответы с готовыми решениями:

Перенести текст с одного label на label в другом окне
Как перенести текст с label одного окна в label другого окна? ссылка на гитхаб: ...

Как по кнопке изменить текст Label
Здравствуйте, как это сделать MFC приложение?

Как программно изменить текст Label?
Имеется на страничке порядка пару сотен Label, примерно в 50 нужно изменить текст. почему когда...

Как изменить текст label на Form1 из Form2
Добрый день, подскажите как изменить текст label на Form1 из Form2? Делаю так: На Form1,...

7
COM‐пропагандист
800 / 748 / 144
Регистрация: 18.12.2014
Сообщений: 2,155
Записей в блоге: 4
11.02.2015, 12:27 2
Средствами vb.net — никак. Необходимо использовать WinAPI.
Во-первых, каким-то образом необходимо будет получить идентификатор окна, у которого нужно изменить текст.
Во-вторых, необходимо этому идентификатору отправить сообщение WM_SETTEXT функцией SendMessage (SendMessageW).
VB.NET
1
SendMessage(hwnd, WM_SETTEXT, 0, "строка с текстом")
0
4 / 4 / 8
Регистрация: 11.11.2014
Сообщений: 256
11.02.2015, 13:00  [ТС] 3
Цитата Сообщение от Замабувараев Посмотреть сообщение
Во-первых, каким-то образом необходимо будет получить идентификатор окна, у которого нужно изменить текст.
Вот в том то и проблема, что это надо каким-то образом определить!
В любом случае надо плясать от от хендла родительского окна.
А вот потом уже определить хендл Label.
Если для примера взять простое приложение с 2 формами, то определить идентификатор окна Form2 можно так:
VB.NET
1
Public Declare Function FindWindow Lib "user32" Alias "FindWindowW" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
VB.NET
1
2
hWnd = FindWindow(vbNullString, "Form2")
MsgBox(hWnd)
Но как на Form2 определить хендл Label?
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
11.02.2015, 13:12 4
Копай глубже
FindWindowEx
0
4 / 4 / 8
Регистрация: 11.11.2014
Сообщений: 256
11.02.2015, 14:47  [ТС] 5
Цитата Сообщение от SoftIce Посмотреть сообщение
Копай глубже
FindWindowEx
Нашел описание этой функции. Как бы все понятно, но код почему-то выдает ошибку!
VB.NET
1
2
Public Declare Function FindWindow Lib "user32" Alias "FindWindowW" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWndParent As IntPtr, ByVal hWndChildAfter As Integer, ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
VB.NET
1
2
3
4
5
6
7
8
        Dim hWnd As Long
        Dim lHwnd As Long
 
        hWnd = FindWindow(vbNullString, "Form2")
        MsgBox(hWnd)
 
        lHwnd = FindWindowEx(hWnd, 0, vbNullString, "Label1")
        MsgBox(lHwnd)
Подскажите! Что делаю не так?
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
11.02.2015, 15:01 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Edgar4 Посмотреть сообщение
Подскажите! Что делаю не так?
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Class Form1
 'код первой программы
   Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWndParent As IntPtr, ByVal hWndChildAfter As Integer, ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
    Private Const WM_SETTEXT = &HC
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim hwnd As IntPtr = FindWindowEx(FindWindow(vbNullString, "Form2"), 0&, vbNullString, "Label2")'ищем Label по тексту в нем
        MsgBox(IIf(SendMessage(hwnd, WM_SETTEXT, 0&, "новая надпись") <> 0, "Label change", "Label not found"))
    End Sub
 
End Class
 
'код для второй программы
Public Class Form2
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       'если не обновлять , то надпись не изменится
        Me.Refresh()
    End Sub
End Class
Добавлено через 4 минуты
Edgar4, Вы мануалы по АПИ так и не покурили?
3
COM‐пропагандист
800 / 748 / 144
Регистрация: 18.12.2014
Сообщений: 2,155
Записей в блоге: 4
11.02.2015, 15:40 7
Прекратите использовать функции с A на конце. Времена однобайтных кодировок прошли тридцать лет назад.
Используйте юникодовые функции с W.
0
4 / 4 / 8
Регистрация: 11.11.2014
Сообщений: 256
11.02.2015, 15:42  [ТС] 8
SoftIce, Теперь все понятно! Огромное спасибо!
Проблема решена!!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2015, 15:42
Помогаю со студенческими работами здесь

Как изменить текст в в label другой формы?
private void button1_Click(object sender, EventArgs e) { string n...

Скопировать выделенный в другом приложении текст
Здравствуйте! Хочу написать аналог приложения Klipper из Линукса. На данный момент необходима...

Получить выделенный текст в другом приложении
Нужно получить выделенный текст в другом приложении при этом не отправляя нажатий клавиш, это...

Как изменить текст в Li или в любом другом теге при нажатии на него?
Как изменить текст в Li или в любом другом теге при нажатии на него? Нужен какой-либо простейший...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru