Здравствуйте Andrew S, Вы писали:
AS>Не могла она у вас едит находить. Иногда лучше почитать MSDN:
AS>1. If the lpWindowName parameter is not NULL, FindWindowEx calls the GetWindowText function to retrieve the window name for comparison. For a description of a potential problem that can arise, see the Remarks for GetWindowText. AS>2. If the target window is owned by another process and has a caption, GetWindowText retrieves the window caption text. If the window does not have a caption, the return value is a null string.
AS>А у нас и есть поиск из другого процесса и окно (едит) заголовка не имеет. Можете попробовать — работать не будет, это обычные грабли.
Нефига не понял. А что у Edit-а Caption и Text это не одно и тоже?
Или это чисто VB-шный прикол?
Re[7]: Как вставить текст в Edit в другой программе?
Слушай, ну чего может быть проще самому сделать маленькое приложение, открыть отдельно Notepad, напечатать в нем пару символов и поискать его. Едит принадлежащий приложению ты найти сможешь, а вот "чужой" — нет.
Да, caption и edit text — разные вещи, точнее, так считает GetWindowText. Как реализовано это "там внутри" я не знаю, да и не интересно, скорее всего — просто проверяется наличие заголовка у окна по флагам.
BM>Нефига не понял. А что у Edit-а Caption и Text это не одно и тоже? BM>Или это чисто VB-шный прикол?
Здравствуйте Andrew S, Вы писали:
AS>Слушай, ну чего может быть проще самому сделать маленькое приложение,
А вот это вы зря, на RTFM я и сам посылать умею >открыть отдельно Notepad, напечатать в нем пару символов и поискать его. Едит принадлежащий приложению ты найти сможешь, а вот "чужой" — нет.
Пробовал в своем приложении, и все отлично работало. Я так понял VB-шный враппер чегото в этом деле "накручивает"
Единственно не работало когда parent невидимый был и только для Edit-а — почему так и не понял, поэтому отказался от идеи.....
AS>Да, caption и edit text — разные вещи, точнее, так считает GetWindowText. Как реализовано это "там внутри" я не знаю, да и не интересно, скорее всего — просто проверяется наличие заголовка у окна по флагам.
А я вот пробовал, и интересная вещь получается. SetWindowText() по идее ведь просто макрос на SendMessage() с WM_SETTEXT, а получается, что по GetWindowText() возвращается правильное значение, а на экране собссно ничего не меняется....
Лана.... Звиняй что на VBБ но я думаю всё достаточно наглядно....
Public Function FindWindowExEx(hWndParent As Long, strCaption As String) As Long
Dim hWndTmp As Long
Dim strCapTmp As String
Dim lngTextLen As Long
hWndTmp = FindWindowEx(hWndParent, 0, vbNullString, vbNullString)
Do While hWndTmp <> 0 And strCaption <> strCapTmp
lngTextLen = SendMessageAsLong(hWndTmp, WM_GETTEXTLENGTH, 0, 0)
strCapTmp = String$(lngTextLen, 0)
SendMessageAsString hWndTmp, WM_GETTEXT, lngTextLen + 1, strCapTmp
If strCaption = strCapTmp Then
FindWindowExEx = hWndTmp
Else
hWndTmp = FindWindowEx(hWndParent, hWndTmp, vbNullString, vbNullString) ' можно заменить на GetNexWindow()End If
Loop
End Function
Private Sub Command1_Click()
Dim hWndParent As Long
Dim hWndEdit As Long' Перед этим неплохо бы скопировать в буффер строчку "x"
hWndParent = FindWindow(vbNullString, "Добавить новую закачку")
hWndParent = FindWindowExEx(hWndParent, "Закачка")
hWndEdit = FindWindowExEx(hWndParent, "x")
SendMessageAsString hWndEdit, WM_SETTEXT, 0, "zzzzzzzzzzzz"End Sub
Можно конечно и через GetNextDlgItem(), суть в том что не надо кричать что ничего не работает.....
Re[9]: Как вставить текст в Edit в другой программе?
Самое прикольное в этом деле, что эту ф-ию можно подшаманить под DlgItem и GetWindowLong, и вообще всё чё хош, а работает она абсолютно по тому же принципу что и FindWindowEx(), только лучше
Re[5]: Как вставить текст в Edit в другой программе?
Здравствуйте old Dutchman, Вы писали:
OD>На диаложке "Добавить новую закачку". Это закладка
Хм, странно, у меня эта закладка называется "Общие", хотя все работает только если написать "Закачка" (если написать "Общие", то опять-таки дескриптор — NULL)
Кстати, у меня все работает почему-то только при пошаговой отладке, а если в нормальком режиме, то текст не вставляется в Edit...
Re[9]: Как вставить текст в Edit в другой программе?
Здравствуйте Zipper555, Вы писали:
Z>Видать, тут SendMessage не подходит, хотя я пробовал и SetDlgItemText, и PostMessage (эти две вообще даже при отладке не работают).
Вставь текст в клипборд. А потом нажимай F4 — тогда FleshGet сам вставит
Re[11]: Как вставить текст в Edit в другой программе?
Здравствуйте old Dutchman, Вы писали:
OD>Здравствуйте Zipper555, Вы писали:
Z>>Видать, тут SendMessage не подходит, хотя я пробовал и SetDlgItemText, и PostMessage (эти две вообще даже при отладке не работают).
OD>Вставь текст в клипборд. А потом нажимай F4 — тогда FleshGet сам вставит
Ну с клипбордом все понятно, вот только хотелось бы здесь обойтись без клипборда!
Re[12]: Как вставить текст в Edit в другой программе?
Здравствуйте Zipper555, Вы писали:
Z>>>Видать, тут SendMessage не подходит, хотя я пробовал и SetDlgItemText, и PostMessage (эти две вообще даже при отладке не работают).
OD>>Вставь текст в клипборд. А потом нажимай F4 — тогда FleshGet сам вставит
Z>Ну с клипбордом все понятно, вот только хотелось бы здесь обойтись без клипборда!
Покажи весь код поиска окна и вставки. У меня все работает по-любому
Re[13]: Как вставить текст в Edit в другой программе?
Задержки не нужны такие большие — можно поменьше и не везде. И везде проверяй HWND на NULL. Если NULL — или ожидание или выход.
FindWindow не видит окно, которое спрятано чз SW_HIDE. Поэтому можно попробовать с эмулировать щелчок в трэе а потом его искать.
Здравствуйте Zipper555, Вы писали:
Z>Здравствуйте old Dutchman,
Z>У меня и с задержками не работает
Так посмотри, что именно перестает работать. После каждого FindWindow сделай проверку на NULL
Z>Странно, веди если при пошаговой отладке работает, то должно и без нее работать...
Z>А какой у вас код работает? Z>
Здравствуйте old Dutchman, Вы писали:
OD>Так посмотри, что именно перестает работать. После каждого FindWindow сделай проверку на NULL
В том-то и дело, что у меня все работает, каждый дескриптор НЕ равняется NULL. Но только работает почему-то в отладке, а если просто запустить, то необходимо, чтобы этот код сработал два раза (нужно нажать на кнопку дважды).
Здравствуйте old Dutchman, Вы писали:
OD>Здравствуйте Zipper555, Вы писали:
OD>Расставь задержки небольшие. Если работает через раз — это задержки.
Z>>
А почему SendMessage (hwnd, WM_KEYDOWN, VK_F4, NULL);, а не PostMessage (hwnd, WM_KEYDOWN, VK_F4, NULL);? SendMessage тоже не работает здесь, только PostMessage.
Задержки расставлял, не помогает. Хотя ща еще раз попробую.