1

Тема: AHK: Отображение полного заголовка вверху браузера

Всем привет!

Специалисты, выручайте, пожалуйста, нужен скрипт.

У разработчиков современных браузеров пошла странная мода - убирать заголовок окна браузера, и, чтобы его прочитать полностью, приходится наводить курсор на текущую вкладку. Мне это очень не нравится, хочется всегда видеть полный заголовок окна.

Думаю, что с помощью AHK можно это реализовать, но мне самому не справиться.

Суть. Необходимо, чтобы при получении фокуса браузером на движке Blink (Chrome, Opera, Яндекс.Браузер) в его верхней части добавлялась полоска GUI с текстом заголовка браузера (и при переключении вкладок чтобы он менялся), а когда фокус с браузера снимается - этот GUI удалялся.

Я браузер не разворачиваю на весь экран, поэтому у меня над вкладками как раз есть место для этого заголовка (показал на картинке).

2

Re: AHK: Отображение полного заголовка вверху браузера

В опере надо просто выбрать: файл - показывать меню.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: AHK: Отображение полного заголовка вверху браузера

Думаю, что с помощью AHK можно это реализовать, но мне самому не справиться.

Здесь всё необходимое - http://forum.script-coding.com/viewtopic.php?id=9733.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4

Re: AHK: Отображение полного заголовка вверху браузера

В опере надо просто выбрать: файл - показывать меню.

Это только в Опере до версии 12.6 включительно, раньше так и делал. У меня же Opera 23, в которой такой возможности нет, как и в любом другом браузере на движке Blink.

5

Re: AHK: Отображение полного заголовка вверху браузера

Не знаю что у Вас за Opera, у меня последняя офф. версия - 12.17.
По счёт решения темы, ссылку я вам привёл.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: Отображение полного заголовка вверху браузера

Не знаю что у Вас за Opera, у меня последняя офф. версия - 12.17.

Удивительно, что вы не в курсе. Последняя официальная версия - 23.

По счёт решения темы, ссылку я вам привёл.

Попробовал код из 6-го поста - практически то, что надо, единственное, чего не хватает - GUI не удаляется, когда я убираю фокус с браузера.

7

Re: AHK: Отображение полного заголовка вверху браузера

Последняя официальная версия - 23.

Думаю что официальная версия находится на сайте с английским языком.

GUI не удаляется, когда я убираю фокус с браузера.

В ShellProc nCode = 4 при активации окон.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Отображение полного заголовка вверху браузера

Думаю что официальная версия находится на сайте с английским языком.

Так скачайте Оперу с главной opera.com, установите и посмотрите, какая там версия Я просто поражаюсь, как вы упорно не верите. Или это вы так троллите меня?

В ShellProc nCode = 4 при активации окон.

Там нет такого кода, я же говорю, что взял код из 6-го поста, т.е. код, который написал teadrinker, а не вы.

9

Re: AHK: Отображение полного заголовка вверху браузера

Взял ваш код, сделал nCode = 4, но title появляется сразу при загрузке скрипта и вообще не зависит от фокуса. Пока скрипт не закрою, он так и висит.

10

Re: AHK: Отображение полного заголовка вверху браузера

Или это вы так троллите меня?

Нет, зачем, вы мне просто приведите ссылку английский офф сайт где эта версия указана как текущая.

Там нет такого кода, я же говорю, что взял код из 6-го поста

Ну если из 7 поста не устраивает, то есть ведь команды WinWaitActive / WinWaitNotActive.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Отображение полного заголовка вверху браузера

Взял ваш код, сделал nCode = 4

Как понять - "сделал"?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Отображение полного заголовка вверху браузера

Нет, зачем, вы мне просто приведите ссылку английский офф сайт где эта версия указана как текущая.

Пожалуйста - http://www.opera.com/docs/history/

Как понять - "сделал"?

В вашем коде строка:

If (nCode = 2 && wParam = tWin && !(tWin := 0)) ; HSHELL_WINDOWDESTROYED

Я заменил 2 на 4.

13

Re: AHK: Отображение полного заголовка вверху браузера

Пожалуйста - http://www.opera.com/docs/history/

Ну что ж, признаюсь не знал, но почему то обновление с 12.16 на 12.17 было не так давно, сейчас эта не обновляется. Они что за 4 месяца столько версий настрогали, да ещё и поломали автообновление. Вообщем эта 23 убога и кастрирована как хром, есть мнение что все эти новые оперы из какой то другой оперы.

Я заменил 2 на 4.

Не думаю что вся операция адаптации кода это только замена одной циферки.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: Отображение полного заголовка вверху браузера

Ну что ж, признаюсь не знал, но почему то обновление с 12.16 на 12.17 было не так давно, сейчас эта не обновляется. Они что за 4 месяца столько версий настрогали, да ещё и поломали автообновление. Вообщем эта 23 убога и кастрирована как хром, есть мнение что все эти новые оперы из какой то другой оперы.

Версии до 12.17 включительно были на движке Presto. Прошлой весной они поменяли движок на Webkit, который используется в Хроме. Т.е. по сути теперь Опера - это Хром, и от старого функционал почти ничего не осталось. Именно из-за смены движка автообновления с версии 12.17 не происходит.

Не думаю что вся операция адаптации кода это только замена одной циферки.

Можете сделать? Я в скриптинге совсем не разбираюсь.

15 (изменено: serzh82saratov, 2014-08-12 17:34:44)

Re: AHK: Отображение полного заголовка вверху браузера

эти новые оперы из какой то другой оперы.

Вот смотрите:

2014-04-23 - Opera 12.17

Opera 20 - 2014-03-04

Это как так?

Чуствую что Opera 12.18 всё же появится.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: Отображение полного заголовка вверху браузера

Можете сделать? Я в скриптинге совсем не разбираюсь.

Могу, но тут либо пиво, либо пробуйте разобратся в коде, и по ходу вашей разработки я вам подскажу.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: AHK: Отображение полного заголовка вверху браузера

Обновления 12-й ветки возможны только в случае, если они найдут критические уязвимости, как это и было с версией 12.17.

18 (изменено: serzh82saratov, 2014-08-12 17:50:07)

Re: AHK: Отображение полного заголовка вверху браузера

По ссылке я не нашёл текст говорящий, что "обычных" обновлений не будет.

Тут дело тёмное, почему с 12.15

2013-04-04 - Opera 12.15

оно не обновило на

2013-05-28 - Opera 15 Next

Да и собственно почему сейчас 12.17 не обновляет на 23?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: Отображение полного заголовка вверху браузера

Ну я же говорю, не обновляет потому, что они поменяли движок.

20

Re: AHK: Отображение полного заголовка вверху браузера

Поковырял ваш код. Получилось сделать, чтобы ToolTip появлялся, когда браузер получает фокус, осталось сделать, чтобы он удалялся, когда браузер теряет фокус:


CoordMode, ToolTip, Screen
Global Win := "ahk_class Chrome_WidgetWin_1"
    , tWin := WinExist(Win)
    , WinTitle, FS

OnExit, Exit
DllCall("RegisterShellHookWindow", "UInt", A_ScriptHwnd)
OnMessage(DllCall("RegisterWindowMessage", "str", "SHELLHOOK"), "ShellProc")

SetWinEventHook(0x800B, 0x800B, 0, RegisterCallback("WinEventHook", "F"),0,0,0)    ;    EVENT_OBJECT_LOCATIONCHANGE
OSD()
Return

Exit:
    DllCall("DeregisterShellHookWindow", "UInt", A_ScriptHwnd)
    ExitApp

ShellProc(nCode, wParam)  {
    If (nCode = 2 && wParam = tWin && !(tWin := 0)) ; HSHELL_WINDOWDESTROYED
        ToolTip
    Else If (nCode = 1 && !tWin && (tWin := WinExist(Win))) ; HSHELL_WINDOWCREATED
        OSD()
    Else If (nCode = 6 && wParam = tWin) ; HSHELL_REDRAW
        OSD()
}

SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags) {
    Return DllCall("SetWinEventHook" , "UInt", eventMin, "UInt", eventMax, "Ptr", hmodWinEventProc
            , "Ptr", lpfnWinEventProc, "UInt", idProcess, "UInt", idThread, "UInt", dwFlags, "Ptr")
}

OSD()  {
    WinWaitActive, %Win%
    IfWinActive, %Win%
    {
        WinGetTitle, WinTitle, ahk_id %tWin%
        if !FS
            ToolTip % WinTitle, 172, 4
    }

    ; тут нужно какое-то условие, чтобы ToolTip удалялся,
    ; когда браузер теряет фокус

}

21

Re: AHK: Отображение полного заголовка вверху браузера

поменяли движок

Как это может помешать процессу обновления программы?

Получилось сделать

1. зачем тут SetWinEventHook?
2. зачем WinWaitActive если есть ShellProc?
3. зачем HSHELL_WINDOWCREATED и HSHELL_WINDOWDESTROYED?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: Отображение полного заголовка вверху браузера

Можете попробовать "вручную" вернуть окну заголовок командой WinSet.

23

Re: AHK: Отображение полного заголовка вверху браузера

1. зачем тут SetWinEventHook?
2. зачем WinWaitActive если есть ShellProc?
3. зачем HSHELL_WINDOWCREATED и HSHELL_WINDOWDESTROYED?

Не знаю ответов ни на один вопрос, потому что, как я уже говорил, в этом совсем не разбираюсь. Я тестирую методом тыка.

Можете попробовать "вручную" вернуть окну заголовок командой WinSet.

Понимать бы еще, о чем вы говорите.

24

Re: AHK: Отображение полного заголовка вверху браузера

Судя по картинке из первого сообщения, окно имеет стиль "-Caption".
Как пользоваться командой WinSet: WinSet, Attribute, Value [, WinTitle, WinText, ExcludeTitle, ExcludeText].
Пример из документации:

WinSet, Style, -0xC00000, A ; Удаляет полосу заголовка у активного окна (WS_CAPTION)

На практике это будет выглядеть как-то так:

WinSet, Style, +0xC00000, Opera

25

Re: AHK: Отображение полного заголовка вверху браузера

ypppu, попробовал, на других программах срабатывает, но на Опере никак не хочет.

26

Re: AHK: Отображение полного заголовка вверху браузера

Вот что у меня получилось на данный момент:


#NoTrayIcon ; не отображать иконку скрипта в трее

Global Win := "ahk_class Chrome_WidgetWin_1"
    , tWin := WinExist(Win)
    , WinTitle

OnExit, Exit
DllCall("RegisterShellHookWindow", "UInt", A_ScriptHwnd)
OnMessage(DllCall("RegisterWindowMessage", "str", "SHELLHOOK"), "ShellProc")

SetWinEventHook(0x800B, 0x800B, 0, RegisterCallback("WinEventHook", "F"),0,0,0)
; BrowserTitle()
Return

Exit:
    DllCall("DeregisterShellHookWindow", "UInt", A_ScriptHwnd)
    ExitApp

ShellProc(nCode, wParam)  {
    If (nCode = 2 && wParam = tWin && !(tWin := 0)) ; HSHELL_WINDOWDESTROYED (Когда браузер закрывается)
        Gui, 1: Destroy
    Else If (nCode = 1 && !tWin && (tWin := WinExist(Win))) ; HSHELL_WINDOWCREATED (Когда браузер открывается)
        BrowserTitle()
    Else If (nCode = 6 && wParam = tWin) ; HSHELL_REDRAW (Когда переключается вкладка)
        BrowserTitle()
    ; Else If (nCode = 4 && wParam = tWin) ; HSHELL_WINDOWACTIVATED (Когда окно браузера получает фокус)
        ; BrowserTitle()
    Else ; (Когда окно браузера теряет фокус)
        Gui, 1: Destroy
}

SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags) {
    Return DllCall("SetWinEventHook" , "UInt", eventMin, "UInt", eventMax, "Ptr", hmodWinEventProc
        , "Ptr", lpfnWinEventProc, "UInt", idProcess, "UInt", idThread, "UInt", dwFlags, "Ptr")
}

BrowserTitle()  {
    WinGetTitle, WinTitle, ahk_id %tWin%
    ; WinTitle := Rtrim(WinTitle, " — Opera")
    Gui, 1: Destroy
    Gui, 1: +AlwaysOnTop +ToolWindow -Caption +LastFound
    Gui, Margin, 0, 0
    Gui, Color, 63B8DF
    WinSet, TransColor, 63B8DF
    Gui, Font, s10 cFFFFFF bold, Trebuchet MS
    Gui, Add, Text,, %WinTitle%
    Gui, Show, NoActivate x170 y4 w1400 h18
}

Никак не получается сделать появление GUI, когда окно браузера получает фокус, "nCode = 4" почему-то не срабатывает.

27 (изменено: serzh82saratov, 2014-08-13 15:19:53)

Re: AHK: Отображение полного заголовка вверху браузера


#SingleInstance Force     
#Persistent
#NoEnv
ListLines Off
SetBatchLines -1 

Gui, +AlwaysOnTop -Caption -DPIScale +E0x08000020 +LastFound
Gui, Margin, 0, 0
Gui, Color, 63B8DF
Gui, Font, s10 cffffff bold, Trebuchet MS
Gui, Add, Text, vText +0x4000, % " "  ; 0x4000 = SS_ENDELLIPSIS 
WinSet, TransColor, 63B8DF 
Global tWin  
OnExit, Exit
DllCall("RegisterShellHookWindow", "UInt", A_ScriptHwnd)
OnMessage(DllCall("RegisterWindowMessage", "str", "SHELLHOOK"), "ShellProc") 
SetWinEventHook(0x800B, 0x800B, 0, RegisterCallback("WinEventHook", "F"),0,0,0)    ;    EVENT_OBJECT_LOCATIONCHANGE 

Loop  {
    WinWaitActive ahk_exe opera.exe
    tWin := WinExist(), OSD()
    WinWaitNotActive, ahk_id %tWin% 
    Gui, Show, Hide
} 

ShellProc(nCode, wParam)  {  
    If (nCode = 6 && wParam = tWin) ; HSHELL_REDRAW
        OSD() 
}

WinEventHook(hWinEventHook, event, hwnd, idObject, idChild, dwEventThread, dwmsEventTime)   {    
    if (hwnd = tWin)
        OSD()
}

OSD()  {
    WinGetPos, WinX, WinY, WinW, WinH, ahk_id %tWin%
    Gui, Show, % "NA x" WinX+20 " y" WinY+9 " w" WinW-40
    GuiControl, Move, Text, % "w" WinW-40
    WinGetTitle, WinTitle, ahk_id %tWin%
    GuiControl, , Text, % WinTitle
}
 
SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags) {
    Return DllCall("SetWinEventHook" , "UInt", eventMin, "UInt", eventMax, "Ptr", hmodWinEventProc
            , "Ptr", lpfnWinEventProc, "UInt", idProcess, "UInt", idThread, "UInt", dwFlags, "Ptr")
}

Exit: 
    DllCall("DeregisterShellHookWindow", "UInt", A_ScriptHwnd)
    ExitApp

Также поддерживается изменение позиции и размеров окна.

когда окно браузера получает фокус, "nCode = 4" почему-то не срабатывает.

Хмм... Почему таки, да. Не знаю что сломалось, для самого загадка.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

28

Re: AHK: Отображение полного заголовка вверху браузера

serzh82saratov, большущее вам спасибо! Теперь все так, как я хотел.