1 (изменено: Real Root, 2013-03-06 11:29:11)

Тема: AHK: Отключение меню Пуск, при видимости определенного окна.

Друзья, есть следующая задача:
Хочу блокировать меню Пуск, если есть видимое окно, к примеру Notepad. Но блокировка меню пуск производится следующим методом:

DetectHiddenWindows, ON
SetWinDelay, -1

Winhide, ahk_class Button
WinMove, ahk_class Button, , 0, 0, 0, 0,

Return

Как видите скрипт начинает искать скрытые окна. Мне нужно чтобы окно с заголовком Notepad искалось только в списке видимых, а для кнопки Пуск - в числе скрытых.

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

Для удобства понимания привожу полный скрипт:

#NoTrayIcon
Loop
{
IfWinExist, Notepad
{
    VA_SetMasterMute(True, 1)

    Winhide, ahk_class Button
    WinMove, ahk_class Button, , 0, 0, 0, 0,
}
else
{
    VA_SetMasterMute(false, 1)

    WinShow, ahk_class Button
    WinMove, ahk_class Button, , 10, 10, 50, 50,
}
Sleep 500
}

Если использовать DetectHiddenWindows, ON то тогда и окно notepad обнаруживается когда не нужно. А без его использования не блокируется меню пуск.

И второе:
Можно ли как-нибудь дополнительно блокировать нажатие клавиши Rwin только в момент видимости того-же Notepad? Т.е. если окно есть, переназначем Rwin на пустое действие, если окно исчезло, то Rwin тоже приобретает свой обычный функционал. Очень желательно все это в одном скрипте.

Выручайте!

2 (изменено: YMP, 2013-03-06 11:56:02)

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Real Root пишет:

Как видите скрипт начинает искать скрытые окна. Мне нужно чтобы окно с заголовком Notepad искалось только в списке видимых, а для кнопки Пуск - в числе скрытых.

Что "для кнопки Пуск"?

Дело в том что, если при заблокированном компе нажать на пуск, прога его сворачивает

Кого его?

, и после, при открытом счете оно отображается криво и косо - очень не хотелось бы этого.

Каком таком счёте и какое "оно" отображается криво?

Если использовать DetectHiddenWindows, ON то тогда и окно notepad обнаруживается когда не нужно.

В смысле? Окно Блокнота у вас невидимое?

Короче, ничего не понятно.

3 (изменено: Real Root, 2013-03-06 12:04:06)

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Что "для кнопки Пуск"?

Я забыл уточнить, в Windows 7 кнопка Пуск реализована в виде отдельного окна. Т.е. чтоб ее скрыть нужно искать ее среди скрытых окон.

Кого его?

меню "Пуск" сворачивает.

Каком таком счёте и какое "оно" отображается криво?

Программа для управления компьютерным клубом. Когда она сворачивает раскрывшееся меню "Пуск", оно после отображается криво, т.е. теряет свою функциональность.

В смысле? Окно Блокнота у вас невидимое?

Смотрите, там так:
Когда счет на компе не открыт поверх всех окон стоит окно с заголовком Notepad. И при опытке активации других окон, программа их сворачивает. Когда счет открывается, программа делает свое окно (Notepad) не видимым, и ничего не сворачивает.
Т.е. окно Notepad есть всегда, но скрывать меню пуск нужно только тогда когда оно не видимое.

4

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

По-сути, мне нужно DetectHiddenWindows, On только в теле цикла, но не для него самого (т.е. не для его условия).

5

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Можно проверять окно Notepad на видимость. Как-нибудь так:


#NoTrayIcon
DetectHiddenWindows, On
WS_VISIBLE = 0x10000000 

Loop
{
    WinGet, Style, Style, Notepad

    If (Style & WS_VISIBLE) {
        VA_SetMasterMute(True, 1)

        Winhide, ahk_class Button
        WinMove, ahk_class Button, , 0, 0, 0, 0,
        Hotkey, RWin, DisableRWin
    }
    else
    {
        VA_SetMasterMute(false, 1)

        WinShow, ahk_class Button
        WinMove, ahk_class Button, , 10, 10, 50, 50,
        Hotkey, RWin, Off
    }
    Sleep 500
}

DisableRWin:
Return

6

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Речь идёт о компьютере администратора клуба или компьютере пользователя-посетителя? Что там делает окно Блокнота, зачем блокировать "Пуск"?

7 (изменено: Real Root, 2013-03-06 18:50:05)

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

YMP
Большое спасибо!
Основная часть решена.
Только вот теперь на Rwin ругается:

Error: Nonexistent Hotkey.
Specifically:Rwin
..
022:Hotkey, Rwin
..

Пытался разобраться со справкой по команде Hotkey, но так и не понял что ее не нравится.

8 (изменено: Real Root, 2013-03-06 18:51:53)

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

ypppu пишет:

Речь идёт о компьютере администратора клуба или компьютере пользователя-посетителя? Что там делает окно Блокнота, зачем блокировать "Пуск"?

Речь идет о компьютере пользователя.
Если во время блокировки нажать кнопку Пуск, то оно до перезагрузки будет отображаться в "рассыпаном" виде. Т.е. и не красиво, и пользоваться нельзя будет. Впринципе ничего страшного, но хотелось бы по-уму сделать.
Окно блокнота ничего не делает. Просто у оригинальной проги название окна из набора символов. Notepad тут для удобства.

9

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Real Root
Тогда в начало добавьте объявление этого хоткея:


#NoTrayIcon
DetectHiddenWindows, On
WS_VISIBLE = 0x10000000 
Hotkey, RWin, DisableRWin

и т.д.

10

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Real Root пишет:
ypppu пишет:

Речь идёт о компьютере администратора клуба или компьютере пользователя-посетителя? Что там делает окно Блокнота, зачем блокировать "Пуск"?

Речь идет о компьютере пользователя.
Если во время блокировки нажать кнопку Пуск, то оно до перезагрузки будет отображаться в "рассыпаном" виде. Т.е. и не красиво, и пользоваться нельзя будет. Впринципе ничего страшного, но хотелось бы по-уму сделать.
Окно блокнота ничего не делает. Просто у оригинальной проги название окна из набора символов. Notepad тут для удобства.

Зачем блокировать (прятать) кнопку "Пуск" на рабочем столе?

11

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

ypppu пишет:

Зачем блокировать (прятать) кнопку "Пуск" на рабочем столе?

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

12

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

YMP пишет:

Real Root
Тогда в начало добавьте объявление этого хоткея:


#NoTrayIcon
DetectHiddenWindows, On
WS_VISIBLE = 0x10000000 
Hotkey, RWin, DisableRWin

и т.д.

Благодарю!!!
Только ваш код оказался не совем рабочим, но справка помогла. В любом случае, без Вас бы ничего не вышло.
Вот для всякого готовое решение:

#NoTrayIcon
DetectHiddenWindows, On
WS_VISIBLE = 0x10000000 
Hotkey, RWin, DisableRWin
SetWinDelay, -1
Loop
{
    WinGet, Style, Style, Notepad

    If (Style & WS_VISIBLE) {
        VA_SetMasterMute(True, 1)

        Winhide, ahk_class Button
        WinMove, ahk_class Button, , 0, 0, 0, 0,
        Hotkey, RWin, On
    }
    else
    {
        VA_SetMasterMute(false, 1)

        WinShow, ahk_class Button
        WinMove, ahk_class Button, , 10, 10, 50, 50,
        Hotkey, RWin, Off
    }
    Sleep 500
}

DisableRWin:
Return

Только вот незадача - несмотря на отсутствие самой кнопки "Пуск" на панели задач, ее место свободно. И по клику по этому месту, все равно открывается Пуск.
Не могли бы вы подсказать, как сделать на это место прозрачную невидимую кнопку/панельку , чтоб это место перестало быть кликабельным. Хотя, если даже не сможите помочь, то ничего страшного. Я сниму скриншот с пустой панелью задач и впечатаю его в обои При блокированом счете буду блокировать не только меню "Пуск" но и панель задач. т.е. как бы не будет но изображение от нее останется (для красоты).

13

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Real Root пишет:

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

Так это... Чем строить костыли и подпорки, не лучше ли сменить "программу-шел"? На том же AutoHotkey без труда можно сделать такую программу, чтобы по истечению времени (или выполнению других условий) блокировались клавиатура и мышь.

14

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

ypppu пишет:

Так это... Чем строить костыли и подпорки, не лучше ли сменить "программу-шел"? На том же AutoHotkey без труда можно сделать такую программу, чтобы по истечению времени (или выполнению других условий) блокировались клавиатура и мышь.

А с биллингом как быть?
Там же клиент-серверная технология. На серверной части куча настроек с биллингом, различными тарифами и много чего еще. На клиенте - программа-шел, выполнающая запросы с сервера. Просто написана была для XP. В Seven все работает, есть только эстетические косяки, как крушение меню пуск. Да и не смертельно это. Стабильность дороже всего.

15

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Ну, раз работает, лучше не трогать.

16 (изменено: Real Root, 2013-03-06 22:34:53)

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

YMP
Не могли бы еще подсказать как блокировать комбинацию Ctrl+Esc

Пробовал определить на примере Rwin:
Hotkey, Ctrl, DisableCtrl или Hotkey, LCtrl, DisableLCtrl
Но не проходит.
В спарвке по команде Hotkey написано, что там можно определять не отдельную клавишу, а именно сочетание. Например ctrl+Esc будет ^Esc - было бы замечательно заблокировать именно Ctrl+Esc, хотя опять-таки не принципиально. Я лишь за возможные глюки боюсь - вдруг Ctrl не отпустится на оплаченом компе, это маловероятно, но все же лучше избежать такой ситуации на корню.

17

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

С Ctrl-ом сам разобрался. То-ли до этого регистр не соблюдал, то ли  в конце DisableLCtrl: не указывал - так и не понял. Но теперь работает. Так что если есть решение именно на комбинацию Ctrl+Esc - буду благодарен.

18

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Real Root
Просто в качестве имени хоткея указать ^Esc. У вас это не работает?

19

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Real Root пишет:

Только вот незадача - несмотря на отсутствие самой кнопки "Пуск" на панели задач, ее место свободно. И по клику по этому месту, все равно открывается Пуск.
Не могли бы вы подсказать, как сделать на это место прозрачную невидимую кнопку/панельку , чтоб это место перестало быть кликабельным.

Можно поместить туда окошко со стилем AlwaysOnTop, которое закроет кнопку, но стоит щёлкнуть по Панели задач, как кнопка опять вылезет поверх. Очевидно, у неё тоже стиль AlwaysOnTop.

Кстати, у меня на W7 кнопка Пуск не подчиняется ни команде WinHide, ни WinMove. Только круглый рисунок немного обрезается сверху по границе Панели задач, вот и весь эффект.

20

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

YMP пишет:

Real Root
Просто в качестве имени хоткея указать ^Esc. У вас это не работает?

Рабоатет!
Блин, вчера с самого утра очень сильно болела голова. Так и мучался до вечера. Вроде бы казалось что соображаю хорошо. Да и реально помню что все это пробовал. Причем сейчас и с любым именем (DiableABBABABBA) работает. А вчера не получалось! Чуть что - ошибка. Мистика.
Вывод: С головной болью лучше прилечь и не мучить ни себя, ни людей, ни клавиатуру.
Большое Вам спасибо!

21

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

YMP пишет:

Кстати, у меня на W7 кнопка Пуск не подчиняется ни команде WinHide, ни WinMove. Только круглый рисунок немного обрезается сверху по границе Панели задач, вот и весь эффект.

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

22

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

А как насчёт WinSet, Disable ?

23

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

ypppu пишет:

А как насчёт WinSet, Disable ?

Не могли бы вы подсказать как ею пользоваться?
Я пробовал так:

WinSet, Disable, , ahk_class, DV2ControlHost

Но это никак не влияло на появление меню Пуск.
Я вообще по WinSet,Disable ничего толкового не нашел.

24

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

По WinSet есть русский перевод документации.

1:: WinSet, Disable,  , ahk_class Shell_TrayWnd
2:: WinSet, Enable,  , ahk_class Shell_TrayWnd

Проверено на XP.

25

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

ypppu пишет:

По WinSet есть русский перевод документации.

1:: WinSet, Disable,  , ahk_class Shell_TrayWnd
2:: WinSet, Enable,  , ahk_class Shell_TrayWnd

Проверено на XP.

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

Всем спасибо за помощь!

26

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Если в Win7 кнопка "Пуск" является отдельным окном, нужно просто подставить его класс в код скрипта.

27 (изменено: Real Root, 2013-03-08 21:23:47)

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

ypppu пишет:

Если в Win7 кнопка "Пуск" является отдельным окном, нужно просто подставить его класс в код скрипта.

Ну так я так и пробовал: WinSet, Disable, , ahk_class DV2ControlHost
Но не помогает. Видать оно каждый раз заного создается. Можно конечно бесконечный поиск такого окна сделать и глушить его - возможно так и попробую.

28

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Что-то я потерял суть всей темы. Что Вы хотите добиться?

1. Чтобы меню "Пуск" не появлялось вообще
а) по нажатию клавиши Win
б) при щелчке мыши по кнопке "Пуск"

2. Чтобы меню "Пуск" не появлялось только при заблокированном компьютере
а) по нажатию клавиши Win
б) при щелчке мыши по кнопке "Пуск"

Как Ваша программа-биллинг взаимодействует со скриптом?

29 (изменено: serzh82saratov, 2013-03-08 23:44:57)

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Real Root пишет:

Я сниму скриншот с пустой панелью задач и впечатаю его в обои  При блокированом счете буду блокировать не только меню "Пуск" но и панель задач. т.е. как бы не будет но изображение от нее останется (для красоты).


Gui, Margin , 0, 0           
Gui, Add, Picture, , C:\Users\sergey\Desktop\Image 001,2013,03,0822,55.jpg
Gui, -Border +ToolWindow -Caption +AlwaysOnTop
Gui, Show, NoActivate x0 y1002
Return

Ну а чтобы непарится со скриншотом, и видеть время, то проще так:


WinGetPos , X, Y, W, H, ahk_class Shell_TrayWnd
Gui, -Border +ToolWindow -Caption +AlwaysOnTop +HWNDguiHWND
Gui, Show, NoActivate x%X% y%Y% w%W% h%H%
WinSet, Transparent, 1, ahk_id %guiHWND%
Return 

1::
    Gui, Show
    Return
2::
    Gui, Hide
    Return

А можно и на весь экран
WinGetPos , X, Y, W, H, Program Manager

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

30

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

ypppu

ААА! Спасибо Вам! Я догнал
Я пытался через WinSet, Disable, , ahk_class DV2ControlHost зарубить само меню пуск. Т.е. уже появившееся окно, так сказать следствие, а не причину.
А при помощи WinSet, Disable, , ahk_class Shell_TrayWnd отключается панель задач, причем она становится просто некликабельной, но при этом все события в трее видны! Спасибо за казалось бы очевидную подсказку!
РЕСПЕКТ!

31

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

serzh82saratov пишет:

Ну а чтобы непарится со скриншотом, и видеть время, то проще так:

Спасибо большое и Вам!
Тоже очень элегантное решение, но всеже оказалось проще дисеблить панель задач. Но ваше решение мне будет хорошим примером на будущее.

Всем, всем, всем БОЛЬШОЕ СПАСИБО. Я Добился того чего хотел!

32

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Real Root пишет:

А при помощи WinSet, Disable, , ahk_class Shell_TrayWnd отключается панель задач, причем она становится просто некликабельной, но при этом все события в трее видны!

Я так сразу попробовал, но у меня пуск всё равно мышкой кликается на Win-7... Или вы ещё что-то "делаете"?

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

33

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

serzh82saratov пишет:
Real Root пишет:

А при помощи WinSet, Disable, , ahk_class Shell_TrayWnd отключается панель задач, причем она становится просто некликабельной, но при этом все события в трее видны!

Я так сразу попробовал, но у меня пуск всё равно мышкой кликается на Win-7... Или вы ещё что-то "делаете"?

Да, еще нужно WinSet, Disable, , ahk_class Button

34 (изменено: serzh82saratov, 2013-03-09 02:39:01)

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Да, еще нужно WinSet, Disable, , ahk_class Button

Ага, теперь работает.
Т.е. не работает

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

35

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Появился вопрос: как вы блокируете Alt+Ctrl+Del, чтобы пользователь не пришибил процесс АНК?

OFF:
И вообще как это лучше сделать, сейчас самому понадобилось.

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

36

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Никак, насколько мне известно.

37

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

А с помощью "RegWrite" с этим ничего нельзя сделать?

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

38

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Если погуглить, то как-то так:

regPath:="Software\Microsoft\Windows\CurrentVersion\Policies\System"
subKey:="DisableTaskMgr"

RegDelete, HKCU, % regPath

Space::
   RegWrite, REG_DWORD, HKCU, % regPath, % subKey, % isState:=!isState
   KeyWait, Space
   RegRead, outVar, HKCU, % regPath, % subKey
   TrayTip,, % "taskmgr is: "(outVar ? "dis":"en")"able"
   Return

39 (изменено: serzh82saratov, 2013-03-13 15:11:47)

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Grey
Спасибо.

А это для всех версий виндовс? По ссылке не понял.

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

40

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Ну речь идёт об WinXP, по части реестра (права администратора) и Редактора Политики Групп ("gpedit.msc") тоже работает в моей W7 x64.

41

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

serzh82saratov пишет:

Появился вопрос: как вы блокируете Alt+Ctrl+Del, чтобы пользователь не пришибил процесс АНК?

Тоже интересно. Плюс Ctrl+Shift+Esc  и win+L.
И какая оболочка используется, если не секрет?

serzh82saratov пишет:

OFF:
И вообще как это лучше сделать, сейчас самому понадобилось.

Я нашел такой вариант для Ctrl+Shift+Esc http://www.online-it-support.co.uk/?p=1339
1) Access the registry
2) Go to HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System
3) Create a new DWORD DisableTaskMgr with a value of 1

Еще можно просто заблокировать одну из кнопок в комбинации

42

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

И какая оболочка используется, если не секрет?

Не понял вопрос. Какая такая оболочка?

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

43

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

serzh82saratov пишет:

Не понял вопрос. Какая такая оболочка?

Ну, вопрос, наверное, Real Root. Интересно, что за программа-шел используется.

Real Root пишет:

На клиенте - программа-шел, выполнающая запросы с сервера. Просто написана была для XP. В Seven все работает, есть только эстетические косяки, как крушение меню пуск. Да и не смертельно это. Стабильность дороже всего.

44

Re: AHK: Отключение меню Пуск, при видимости определенного окна.

Xwansu пишет:
serzh82saratov пишет:

Не понял вопрос. Какая такая оболочка?

Ну, вопрос, наверное, Real Root. Интересно, что за программа-шел используется.

Real Root пишет:

На клиенте - программа-шел, выполнающая запросы с сервера. Просто написана была для XP. В Seven все работает, есть только эстетические косяки, как крушение меню пуск. Да и не смертельно это. Стабильность дороже всего.

Самопал JustAdmin - писался еще во времена XP. Исходники потеряны + большая часть писалась братом, поэтому проще адаптировать чем переписывать.