Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / WinAPI SetWindowText / 6 сообщений из 6, страница 1 из 1
28.07.2010, 16:10
    #36764352
evansl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinAPI SetWindowText
привествую, не подскажите почему у меня не отрабатывает функция SetWindowText, после того как нашел Handle, пытаюсь поменять текст, но он выводит не понятные символы вместо "TEst", есть какая-нибудь особенность? Что я делаю не так, подскажите?


Dim HandleWin As Long
Dim TextCaption As String
Dim j As Long ' return value


TextCaption = "Выбрать значения переменных"
HandleWin = FindWindow(vbNullString, TextCaption)
If HandleWin <> 0 Then
j = SetWindowText(HandleWin, "Test")
End If

Counter = Counter + 1
...
Рейтинг: 0 / 0
28.07.2010, 18:09
    #36764684
WinAPI SetWindowText
evansl,

описания функций через Declare показывайте.
...
Рейтинг: 0 / 0
29.07.2010, 10:20
    #36765500
evansl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinAPI SetWindowText
13-й кварталevansl,

описания функций через Declare показывайте.

13-й квартал, вот код, подскажите пожалуйста что делаю не так ... в названии окно так и выводятся не читаемые символы, а я хочу чтобы был текст "Test".


'Функции работы с таймером
Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, _
ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

'Поиск окна
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

'''''''''''''''
Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent _
As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, _
ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Declare Function SendMessageS Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Declare Function FindWindowX Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, ByVal lpsz1 As Long, ByVal lpsz2 As Long) As Long

Declare Function SetWindowText Lib "user32" Alias "SetWindowTextW" _
(ByVal hwnd As Long, lpString As Any) As Long


Public Const WM_GETTEXT = &HD
'''''''''''''''''
Public Counter As Long
Public IdEv As Long

Public Sub HowManyProc(ByVal HandleW As Long, ByVal msg As Long, _
ByVal idEvent As Long, ByVal TimeSys As Long)
Dim HandleWin As Long
Dim TextCaption As String
Dim retval As Long ' return value

TextCaption = "Выбрать значения перменных"
HandleWin = FindWindow(vbNullString, TextCaption)
If HandleWin <> 0 Then
retval = SetWindowText(HandleWin, "Test")
Debug.Print "Найден Handle окна: " & HandleWin
End If

Counter = Counter + 1
Debug.Print "Hi", Counter

End Sub

Public Sub Start()
'Создан таймер, вызывая Win32 Api функцию SetTimer
Counter = 0
IdEv = SetTimer(0&, 0&, 1000, AddressOf HowManyProc)
If IdEv = 0 Then
MsgBox ("Не удалось создать таймер!")
Else
Debug.Print "Создан таймер: Идентификатор = ", IdEv
End If
End Sub

Public Sub Finish()
'Удаляет таймер
If IdEv > 0 Then
Call KillTimer(0&, IdEv)
Debug.Print "Удален таймер: Идентификатор = ", IdEv
IdEv = 0
End If
End Sub
...
Рейтинг: 0 / 0
29.07.2010, 13:13
    #36765918
WinAPI SetWindowText
evansl,

при таком описании (не совсем логичном, так как 1) все остальные функции описаны ANSI-шные, с суффиксом A, 2) второй параметр строковый, не понятно, зачем он описан As Any) вызов должен выглядеть как retval = SetWindowText(HandleWin, ByVal StrPtr("Test")).

Если б функция была (классически) описана как Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long, вызов бы работал без изменений.
...
Рейтинг: 0 / 0
29.07.2010, 15:15
    #36766325
evansl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinAPI SetWindowText
Вопрос снят.
...
Рейтинг: 0 / 0
29.07.2010, 15:16
    #36766330
evansl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WinAPI SetWindowText
13-й кварталevansl,

при таком описании (не совсем логичном, так как 1) все остальные функции описаны ANSI-шные, с суффиксом A, 2) второй параметр строковый, не понятно, зачем он описан As Any) вызов должен выглядеть как retval = SetWindowText(HandleWin, ByVal StrPtr("Test")).

Если б функция была (классически) описана как Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long, вызов бы работал без изменений.

Спасибо.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / WinAPI SetWindowText / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]