1

Тема: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

Задача: при появлении msgbox запретить закрывание его с клавиатуры.
Такой код срабатывает не всегда (можно успеть нажать space и закрыть.)

SetTimer, DisableMsg, 10
MsgBox, 262148, test
return

DisableMsg:
WinWait, test ahk_class #32770
WinActivate, ahk_class Shell_TrayWnd
SetTimer, DisableMsg, Off
Return

2 (изменено: Alectric, 2015-10-30 11:50:00)

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

Вариант с собственным гуи не подойдет? Думаю, можно даже функцию сделать...
Например сделать нерабочий элемент (dummy), который будет поумолчанию нажиматься с клавиатуры.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

3

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

Подойдет, но не хотелось бы усложнять.

4 (изменено: Irbis, 2015-10-30 12:11:25)

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

А так?

BlockInput On
SetTimer, DisableMsg, -30
MsgBox, 262148, test
Return

DisableMsg:
   WinWait, test ahk_class #32770
   WinActivate, ahk_class Shell_TrayWnd
   BlockInput Off
Return 

5

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

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

6

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

SetTimer, DisableMsg, 10
MsgBox, 262148, test,test
return

DisableMsg:
WinActivate, ahk_class Shell_TrayWnd
SetTimer, DisableMsg, Off
Return
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

7

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

Не подходит:

SetTimer, DisableMsg, 10
sleep 1000
MsgBox, 262148, test,test
return

DisableMsg:
WinActivate, ahk_class Shell_TrayWnd
SetTimer, DisableMsg, Off
Return

8 (изменено: Alectric, 2015-10-30 12:43:20)

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

Неужели бывают такие задержки в работе скрипта? Хотя впринципе если и будут, то само появление msgbox задержится.


Тогда так для надежности:


SetTimer, DisableMsg, 10
sleep,1000
MsgBox, 262148, test,% c
return

DisableMsg:
c++
WinActivate, ahk_class Shell_TrayWnd
if c>10
{
  SetTimer, DisableMsg, Off
  c=
}
Return




#6 при загрузке в 100% на одноядерном компе работает корректно. А комп ужасный тормоз, поверьте мне...

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

9 (изменено: Malcev, 2015-10-30 12:54:06)

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

Хотя, все-равно пропускает.
Попробуйте запустить скрипт и быстро нажимать на space.

sleep,1000
SetTimer, DisableMsg, 10
MsgBox, 262148, test,test
return

DisableMsg:
WinActivate, ahk_class Shell_TrayWnd
SetTimer, DisableMsg, Off
Return

10 (изменено: Alectric, 2015-10-30 18:12:30)

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

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

...

Набросал функцию:

sleep,1000
tooltip,start
msg:=msgbox("test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test ")
tooltip,done msg = %msg%
sleep,1000


msgbox(text="")
{
  gui,99:-sysmenu
  gui,99:add,button,x0 y0 w1 h1,Dummy
  gui,99:add,text,xm ym w300,% text
  gui,99:add,button,xm+130 y+10 w70 h20 g99Ok,Ok
  gui,99:add,button,x+10 yp w70 h20 g99Cencel,Cencel
  gui,99:show

  loop
    sleep,100
    until msg
  gui,99:destroy

  return msg
;  if msg=1
;    return "Ok"
;  else if msg=2
;    return "Cencel"

  99Ok:
  msg=1
  return

  99Cencel:
  msg=2
  return
}


Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

11

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

Malcev пишет:

Задача: при появлении msgbox запретить закрывание его с клавиатуры.

Пропускать клавиатуру через хук, отслеживая активность MsgBox.

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

12

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

Задача: при появлении msgbox запретить закрывание его с клавиатуры.

Почему нельзя использовать своё окно GUI? Как раз с ним всё проще.

13 (изменено: Malcev, 2015-10-30 18:38:16)

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

Привык к дизайну msgbox.

Пропускать клавиатуру через хук, отслеживая активность MsgBox.

Вроде можно без хука:

sleep 1000
MsgBox, 262148, test
return

#IfWinActive, test ahk_class #32770
space::
enter::
return
#IfWinActive

14

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

Так можно закрыть через Ctrl + Enter или Ctrl + Space. Лучше тогда

sleep 1000
MsgBox, 262148, test
return

#IfWinActive, test ahk_class #32770
*space::
*enter::
return
#IfWinActive
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Запретить закрывание msgbox с клавиатуры в момент его появления

Кроме того, по хорошему в условии ещё нужно проверять, твой ли это MsgBox.

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