Страница: 1 |
Страница: 1 |
Вопрос: вопрос по SetWindowText
Добавлено: 27.08.07 17:03
Автор вопроса: Сергей
Имеется диалог открытия файлов, мне нужно в строку "Имя файла" передать путь и имя открываемого файла. Хендл строки получать научили, а вот как передать туда текст - не знаю. Подсказывали что нужно использоваь SetWindowText, но у меня ничего не выходит, меняется имя строки ввода, но текста в ней не появляется. Или нужно использовать другую функцию ? Не могли бы вы привести пример, который, отправит слово "Привет" в строку имени файла стандартного диалога открытия файлов. Спасибо.
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
shuffle
Администратор
ICQ: 201502381
Вопросов: 15
Ответов: 737
Профиль | | #1
Добавлено: 27.08.07 17:48
Если ты сам показываешь диалог (контролом ms common dialog control), то для этого есть св-во filename.
Если диалог не твой, то установить текст нужно через sendmessage с сообщением wm_settext
Номер ответа: 2
Автор ответа:
Сергей
Вопросов: 9
Ответов: 18
Профиль | | #2
Добавлено: 27.08.07 19:14
А с примером никак ? Я пишу так:
SendMessage (hWin, WM_SETTEXT, 0, "test" однако ничего не происходит. Может объявляю неправильно. Диалоговое окно не мое, сторонней программы.
Номер ответа: 3
Автор ответа:
shuffle
Администратор
ICQ: 201502381
Вопросов: 15
Ответов: 737
Профиль | | #3
Добавлено: 27.08.07 21:06
SendMessage (hWin, WM_SETTEXT, 0, byval "test"
Номер ответа: 4
Автор ответа:
Сергей
Вопросов: 9
Ответов: 18
Профиль | | #4
Добавлено: 27.08.07 21:35
Не работает, вот так у меня все целиком выглядит:
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As String, ByVal wParam As Long, lParam As Any) As Long
Option Explicit
Dim hWin As Long
Dim cWin As Long
Dim WM_SETTEXT As Long
Private Sub Form_Load()
hWin = FindWindow(vbNullString, "Открыть"
cWin = GetDlgItem(hWin, 1152)
Call SendMessage(cWin, WM_SETTEXT, 0, ByVal “test”)
End Sub
Скажите пожалуйста, где я ошибаюсь ?
Номер ответа: 5
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #5
Добавлено: 27.08.07 22:56
Во-первых, WM_SETTEXT - константа
Во-вторых: зачем тебе функция GetDlgItem? Если дочерние окна (включая объекты) находятся через функцию FindWindowEx?
А в-третьих - вот код:
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 SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SETTEXT = &HC
Dim hParent As Long
Dim hTemp As Long
Dim sText As String
Dim sByteArr() As Byte
'Эту функцию я "слизал" (автор не известен)
Private Function StringToByteArray(str As String) As Variant
Dim bray() As Byte
Dim cnt As Integer
Dim ln As Integer
ln = Len(str)
ReDim bray(ln)
For cnt = 0 To ln - 1
bray(cnt) = Asc(Mid(str, cnt + 1, 1))
Next cnt
bray(ln) = 0
StringToByteArray = bray
End Function
Private Sub Command1_Click()
hParent = FindWindow("#32770", "Запуск программы"
sText = "Ё-моё, работает! "
ReDim sByteArr(Len(sText) + 1)
sByteArr = StringToByteArray(sText)
If hParent <> 0 Then
hTemp = FindWindowEx(hParent, ByVal 0&, "ComboBox", vbNullString)
If hTemp <> 0 Then
SendMessage hTemp, WM_SETTEXT, ByVal 0&, sByteArr(0)
Else
MsgBox "Окно с таким именем не существует!", vbExclamation
End If
Else
MsgBox "Окно с таким именем не существует!", vbExclamation
End If
End Sub
Номер ответа: 6
Автор ответа:
Stuart
Вопросов: 5
Ответов: 152
Профиль | | #6
Добавлено: 27.08.07 23:32
Хм, а не проще сделать вот так вот?
Для начала добавить компонент: Microsoft Common Dialog Control 6(Проект>Компоненты)
Затем поместить его на форму, вместе с кнопкой и текстовым полем, вот теперь код к кнопке:
On Error Resume Next
CommonDialog1.FileName = "Привет" 'имя предлогаемого файла для запуска
CommonDialog1.Filter = ".exe|*.exe;*.ocx" 'расширение файла(.exe и .ocx)
CommonDialog1.ShowOpen ' вызываем диалог запска файла
Text1.Text = CommonDialog1.FileName 'text1.text = имя выбранного файла и путь
Номер ответа: 7
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #7
Добавлено: 27.08.07 23:39
2Stuart
Номер ответа: 8
Автор ответа:
Stuart
Вопросов: 5
Ответов: 152
Профиль | | #8
Добавлено: 28.08.07 02:12
Ну мне кажеться то что автору данного вопроса , будет легче использовать, MS Common Dialog Control
Номер ответа: 9
Автор ответа:
shuffle
Администратор
ICQ: 201502381
Вопросов: 15
Ответов: 737
Профиль | | #9
Добавлено: 28.08.07 09:01
Интересно, как бы ты к сторонней программе прикрутил ms cdc?
Номер ответа: 10
Автор ответа:
Сергей
Вопросов: 9
Ответов: 18
Профиль | | #10
Добавлено: 28.08.07 09:49
Как использовать Common Dialog в моей проблемме, я сказать по правде не понял. С моей задачей прекрасно справился код предложенный Arcady, за что ОГРОМНОЕ СПАСИБО !!!
Номер ответа: 11
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #11
Добавлено: 28.08.07 11:28
2Сергей
Тебе нужен диалог открытия файлов?
Номер ответа: 12
Автор ответа:
Сергей
Вопросов: 9
Ответов: 18
Профиль | | #12
Добавлено: 28.08.07 12:16
Нет, спасибо, все прекрасно работает, просто я не понял предложения Stuartа.