заполнить текст бокс в другом окне

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

заполнить текст бокс в другом окне

Сообщение v-adix » 20.03.2004 (Сб) 10:39

как заполнить текст бокс в другом окне? точнее какой использовать message и как определить handle текст бокса ?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.03.2004 (Сб) 10:46

Код: Выделить всё
Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Последний раз редактировалось GSerg 20.03.2004 (Сб) 10:52, всего редактировалось 1 раз.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 20.03.2004 (Сб) 10:49

может пояснишь написанное? вырезать кусок кода из API Guide я тоже могу

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.03.2004 (Сб) 10:54

Я фигею... Имеет api-guide и не юзает его по назначению...

Ищется окно по заголовку через findwindow. Ищется текстбокс через findwindowex. Устанавливается текст через setwindowtext.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 20.03.2004 (Сб) 11:05

спасибо щас попробую !

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 20.03.2004 (Сб) 11:21

я не рабобрался с параметрами findwindowex! помогите!

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 20.03.2004 (Сб) 16:25

ну помогите же! срочно нужно!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.03.2004 (Сб) 18:20

Ну блин...
Разжевать надо? В API-Guide и так пюре подается.
Нашел FindWindow, запомнил в hWindow.
В FindWindowEx первый параметр - hWindow, второй параметр указываешь null (он полезен, чтобы перебирать все контролы), третий и четвертый параметр - класс и текст окна. Если точно не знаешь третий и четвертый параметр, то придется делать перебор, запоминая полученные значения и подставляя их как второй параметр. Получаешь hControl.
Подсовываешь hControl вместе с текстом в SetWindowText.
Lasciate ogni speranza, voi ch'entrate.

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 21.03.2004 (Вс) 18:33

а как я узнаю что это действительно тот контрол какой нужен? вдруг я получу handle например лэйбла? хотя в окне всего 2 текст бокса + лэйбл и пикчер бокс... можно как нибудь перебирать только текст боксы?

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 21.03.2004 (Вс) 18:55

Label - lightweight - не имеет хендла.
PictureBox отсеиваем по lpClassName.
TextBox'ы перебираем.
Нет меня больше

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 23.03.2004 (Вт) 12:57

сделал всё как сказал alibek. получилось, но поменялись названия всех кнопок и лэйблов! а текст бокс (он в окне один) не поменялся!
код:

Код: Выделить всё
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Sub Form_Load()
Dim x As Long
Dim y As Long
Dim z As Long
Dim arr() As Long
x = FindWindow(vbNullString, "title okna")
y = FindWindowEx(x, 0, vbNullString, vbNullString)

Do While y <> 0
    z = z + 1
    ReDim Preserve arr(z)
    arr(z) = y
    DoEvents
    y = FindWindowEx(x, arr(z), vbNullString, vbNullString)
Loop

For x = 1 To UBound(arr)
    SetWindowText arr(x), "privet"
Next x
End Sub
[/quote]

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.03.2004 (Вт) 13:37

Код: Выделить всё
Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String) As Long

Private Sub Form_Load()
Dim H As Long, H0 As Long, C As String, ret As Long
H0 = FindWindow(vbNullString, "title okna")
H = 0&
Do
  H = FindWindowEx(H0, H, vbNullString, vbNullString)
  If H = 0 Then Exit Do
  C = Space$(256)
  ret = GetClassName(H, C, Len(C))
  C = Left$(C, ret)
  If C Like "*Edit*" Then
    SetWindowText H, "privet"
    'Refresh
  End If 
Until
End Sub


На место рефреша помоему надо вставить какую-то APIшку, уведомляющую окно о том, что его содержимое надо перерисовать (не помню точно, искать долго).
Lasciate ogni speranza, voi ch'entrate.

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 23.03.2004 (Вт) 13:42

хорошо а как по хэндлу узнать что это именно текстбокс? и ещё желательно определить ширину текстбокса. какие API использовать для этого?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.03.2004 (Вт) 13:44

GetWindowRect, GetClassName
Lasciate ogni speranza, voi ch'entrate.

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 23.03.2004 (Вт) 14:31

всё получилось. осталось только разобраться с Refresh...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList