Тема: AHK: Изменить msctls_statusbar32
Собственно, как изменить msctls_statusbar32, чтобы можно было проверить при помощи StatusBarWait?
Спасибо.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Собственно, как изменить msctls_statusbar32, чтобы можно было проверить при помощи StatusBarWait?
Спасибо.
Ничего менять не надо, если это действительно msctls_statusbar32, его содержание должно считываться.
Он у меня всегда просто пустой.
Если задача изменить текст контрола msctls_statusbar32, то в своём окне так:
Gui, Add, StatusBar
SB_SetText("This is status bar text")
Gui, Show, w300 h200
если в чужом, так:
ControlSetText, msctls_statusbar321, This is status bar text, A
А если несколько полей у StatusBar как с помощью ControlSetText менять текст в определенном поле?
В примере выше в слове msctls_statusbar321 последняя цифра 1 — это номер контрола. Если контролов насколько — эти номера у всех будут разными. Определив номер конкретного контрола с помощью Window Spy, можно обращаться к нему.
Я имел ввиду если сам StatusBar поделен таким образом
SB_SetParts(100, 100)
Как изменять отдельно 1 и 2 поля из отдельного окна?
По идее с помощью сообщения SB_SETTEXT, но у меня что-то не вышло.
Так можно:
sender.ahk
SendMessage, 0x40,,,, receiver.ahk
receiver.ahk
OnMessage(0x40, "SetText")
Gui Add, StatusBar
SB_SetParts(100, 100)
Gui Show, w300 h300
return
SetText()
{
SB_SetText("test", 1)
return
}
Если окно своё, то из другого скрипта делать это ни к чему, достаточно
SB_SetText("test", 1)
Как вариант от безысходности будем использовать...
SendMessage, 0x40,,,, ahk_id %BarHWND%
SendMessage, 0x42,,,, ahk_id %BarHWND%
OnMessage(0x40, "SetText")
OnMessage(0x42, "SetText2")
SetText()
{
SB_SetText("test", 1)
return
}
SetText2()
{
SB_SetText("test2", 2)
return
}
Плохо конечно что нельзя текст передать.
Почему же нельзя.
В самом конце пример:
https://autohotkey.com/docs/commands/OnMessage.htm
Всем огромное спасибо! Добился чего хотел. Выложу пример быть может кому то поможет.
Sender
Send_WM_COPYDATA("Text1|1", "Title")
Send_WM_COPYDATA("Text2|2", "Title")
Send_WM_COPYDATA("Text3|3", "Title")
Send_WM_COPYDATA(ByRef StringToSend, ByRef TargetScriptTitle)
{
VarSetCapacity(CopyDataStruct, 3*A_PtrSize, 0)
SizeInBytes := (StrLen(StringToSend) + 1) * (A_IsUnicode ? 2 : 1)
NumPut(SizeInBytes, CopyDataStruct, A_PtrSize)
NumPut(&StringToSend, CopyDataStruct, 2*A_PtrSize)
Prev_DetectHiddenWindows := A_DetectHiddenWindows
Prev_TitleMatchMode := A_TitleMatchMode
DetectHiddenWindows On
SetTitleMatchMode 2
SendMessage, 0x4a, 0, &CopyDataStruct,, %TargetScriptTitle%
DetectHiddenWindows %Prev_DetectHiddenWindows%
SetTitleMatchMode %Prev_TitleMatchMode%
Return ErrorLevel
}
Receive
OnMessage(0x4a, "Receive_WM_COPYDATA")
Receive_WM_COPYDATA(wParam, lParam)
{
StringAddress := NumGet(lParam + 2*A_PtrSize)
CopyOfData := StrGet(StringAddress)
StringSplit, TextArrya, CopyOfData, |
SB_SetText(TextArrya1, TextArrya2)
return true
}
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться