1

Тема: AHK: Изменить msctls_statusbar32

Собственно, как изменить msctls_statusbar32, чтобы можно было проверить при помощи StatusBarWait?

Спасибо.

2

Re: AHK: Изменить msctls_statusbar32

Ничего менять не надо, если это действительно msctls_statusbar32, его содержание должно считываться.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Изменить msctls_statusbar32

Он у меня всегда просто пустой.

4

Re: AHK: Изменить 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
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Изменить msctls_statusbar32

А если несколько полей у StatusBar как с помощью ControlSetText менять текст в определенном поле?

6

Re: AHK: Изменить msctls_statusbar32

В примере выше в слове msctls_statusbar321 последняя цифра 1 — это номер контрола. Если контролов насколько — эти номера у всех будут разными. Определив номер конкретного контрола с помощью Window Spy, можно обращаться к нему.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Изменить msctls_statusbar32

Я имел ввиду если сам StatusBar поделен таким образом

SB_SetParts(100, 100)

Как изменять отдельно 1 и 2 поля из отдельного окна?

8

Re: AHK: Изменить msctls_statusbar32

По идее с помощью сообщения SB_SETTEXT, но у меня что-то не вышло.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Изменить msctls_statusbar32

Так можно:
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
}

10

Re: AHK: Изменить msctls_statusbar32

Если окно своё, то из другого скрипта делать это ни к чему, достаточно

SB_SetText("test", 1)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Изменить msctls_statusbar32

Как вариант от безысходности будем использовать...

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
}

Плохо конечно что нельзя текст передать.

12

Re: AHK: Изменить msctls_statusbar32

Почему же нельзя.
В самом конце пример:
https://autohotkey.com/docs/commands/OnMessage.htm

13

Re: AHK: Изменить msctls_statusbar32

Всем огромное спасибо! Добился чего хотел. Выложу пример быть может кому то поможет.

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
}