Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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 - константа
Public Const WM_SETTEXT = &HC

Во-вторых: зачем тебе функция GetDlgItem? Если дочерние окна (включая объекты) находятся через функцию FindWindowEx?
Public 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

А в-третьих - вот код:
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 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а.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам