Тема: AHK: Развернуть любое окно.
Есть скрипт разворачивания любого окна, но он работает только по нажатию клавиши. Как сделать чтобы работал без нажатия, и в фоне не светился в трее? Вот сам скрипт.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Есть скрипт разворачивания любого окна, но он работает только по нажатию клавиши. Как сделать чтобы работал без нажатия, и в фоне не светился в трее? Вот сам скрипт.
А что мешает разместить здесь исходный код?
Чтобы не "светился" в трее - для этого директива #NoTrayIcon есть. А насчет, чтобы работал без нажатия, а какой смысл разворачивать автоматически все окна на весь экран?
teadrinker
/*
* BoD winsupermaximize v1.01.
*
* This program and its source are in the public domain.
* Contact BoD@JRAF.org for more information.
*
* Version history:
* 2008-05-12: v1.01
* 2008-05-10: v1.00
*/
#SingleInstance ignore
/*
* Tray menu.
*/
Menu, tray, NoStandard
Menu, tray, Add, Super maximize window, menuSuperMaximize
Menu, tray, Add, About..., menuAbout
Menu, tray, Add, Exit, menuExit
Menu, tray, Default, Super maximize window
/*
* Bind to Win-F11.
*/
#F11::superMaximize()
menuAbout:
MsgBox, 8256, About, BoD winsupermaximize v1.01.`n`nThis program and its source are in the public domain.`nContact BoD@JRAF.org for more information.
return
menuExit:
ExitApp
return
menuSuperMaximize:
Send !{Tab} ; go to previously active window (the currently active window is the taskbar !)
Sleep, 200
superMaximize()
return
/*
* Super Maximizes the currently active window.
*/
superMaximize() {
global
WinActive("A")
WinGet, winId, ID
if (isSuperMaximized_%winId% = 1) {
; already supermaximized: we restore the window
WinSet, Style, +0x800000
WinMove, , , orig_%winId%_x, orig_%winId%_y, orig_%winId%_width, orig_%winId%_height
if (orig_%winId%_wasMaximized) {
WinMaximize
}
isSuperMaximized_%winId% = 0
} else {
; not supermaximized: we supermaximize it
WinGet, orig_%winId%_wasMaximized, MinMax
if (orig_%winId%_wasMaximized = 1) {
WinRestore
}
WinGetPos, orig_%winId%_x, orig_%winId%_y, orig_%winId%_width, orig_%winId%_height ; store the old bounds
WinSet, Style, -0x800000
WinMove, , , 0, -4, A_ScreenWidth, A_ScreenHeight + 4 - 1 ; 1 pixel less, to be able to use the auto-hide taskbar
isSuperMaximized_%winId% = 1
}
}
svoboden За директиву Спасибо. Приведение окна к статичной позиции. Нужно это для создания скриптов доступности для программ чтения экрана. nvda jaws.
Как сделать чтобы работал без нажатия
А как должен работать-то?
Я так понимаю только по факту создания окна. Типа HSHELL_WINDOWCREATED для SHELLHOOK, и проверка на то что окно родительское.
В смысле, по факту создания? Сразу разворачивать любое окно?
Ну да, если оно "новое".
Не знаю, наверно, для всех окон это не нужно. Другое дело, если окно создаётся уже максимизированным. Но и то, не для любого это будет хорошо, нужно тогда список нужных окон создавать, либо список исключений.
наверно, для всех окон это не нужно.
Ну я задачу минимум пытался сформулировать,
новичков часто тяжело понять.
разворачивания любого окна
teadrinker Нужно это для всех окон чтобы наверняка зафиксировать позиции на экране. Этот скрипт то что нужно. Надо только убрать клавишу. чтобы он висел в фоне, и разворачивал любое окно. В конце концов если можете помочь, то помогите, а обсуждать зачем и почему нет смысла. Этот скрипт писался же зачем-то, а раз написан, значит нужен. Или предложите альтернативу. прошу заметить что этот скрипт умеет разворачивать окна в которых вообще нет такой возможности.
Тогда подойдёт, как предложил serzh82saratov, ему и карты в руки.
обсуждать зачем и почему нет смысла.
Это вы зря, написать код мы наверное сможем, но если вы так настроены, то переписывать его 10 раз ни у кого вероятно не возникнет желания...
serzh82saratovЯ то чайник пока в AHK. поэтому спасибо. Мне казалось что проще убрать там клавишу, чем переписывать все. Тем более как вы понимаете скрипт не мой.
Viruzober, вот окна типа разных уведомлений или подсказок, ToolTip, например. Вам нужно, чтобы они разворачивались на весь экран?
teadrinker Да. Потому что с тем чем я собираюсь это использовать, разворачивать надо все. я думаю никто не захочет собирать данные о паре сотен окон. проще развернуть все. к тому же конечным пользователям того что должно получится вообще не важно что там и как разворачивается. Ибо они этого все равно не увидят в силу физических ограничений.
Мне казалось что проще убрать там клавишу, чем переписывать все
Вам про то и говорят, вы её что нажимаете каждый раз как только какое то окно выйдет на передний план, или появится диалог в котором надо нажать да, и вы нажимаете сначала кнопку, а потом жмёте да, или когда сам уменьшил окно чтоб не мешало, а когда оно стало активно опять его на весь экран жмёте а потом уменьшаете. Надо типа исскусственный интелект написать чтобы как вы привыкли, или вообще всё всегда на весь экран?
Всё и всегда проще сделать, только использовать такое никто не будет, даже тот кто об этом просит.
serzh82saratov Нужно просто убрать нажатие клавиши. запустил скрипт, и любое окно которое оказалось в фокусе, развернулось. не важно какое, хоть предупреждение, хоть уведомление, хоть пластиковое со звукоизоляцией.
#SingleInstance Force
#NoEnv
#NoTrayIcon
DllCall("RegisterShellHookWindow", "Ptr", A_ScriptHwnd)
OnMessage(DllCall("RegisterWindowMessage", "Str", "SHELLHOOK"), "ShellProc")
ShellProc(nCode, wParam) {
Static HSHELL_WINDOWACTIVATED := 4
If (nCode = HSHELL_WINDOWACTIVATED)
{
WinMaximize, A ; можно заменить на свой алгоритм разворачивания
}
}
Про пластиковое вы всё же зря. У нас тут в основном про всякие коды.
serzh82saratov Похоже у меня руки не из того места. потому что не работает. запускаю, и ничего не разворачивается. Причем даже те окна в которых это предусмотрено. а как бы алгоритм из того скрипта перенести в ваш?
Наверняка руки не причём. Просто в этот раз не получится. ОС может другая, или ещё другая фигня, которую мужики нормальные не обсуждают.
Пишу с телефона, увы, но по памяти, я использовал также nCode = 2 (created, им можно и ограничиться), также использовать в команде обращение А сразу после хука иногда рано. Лучше зайдет таймер -200 и обращение по хендлу.
loop
{
WinExist("A")
WinMaximize
WinWaitNotActive
}
Malcev Вот за это спасибо. Все работает как надо. А насчет того что я говорил про фиксацию позиций, есть еще одно решение. При появлении окна переместить его в координаты 0, и позиции наверняка никуда не денутся. еще раз спасибо.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться