1

Тема: AHK: При вызове Gui перестает работать переназначенная клавиша

Пытаюсь сделать следующее:
При нажатии Enter & F:

  • вызывается Gui

  • я ввожу данные

  • и подтверждаю по нажатию Enter

Но Enter перестает работать пока Gui активно, при этом при вызове gui через нажатие любой другой клавиши - все работает как обычно.


#SingleInstance, force
single_press_time := 300

; Enter посылается только при одиночном зажатии менее чем на 300мс
$SC1C::
    KeyWait, Enter
    if (A_PriorKey == "Enter" && A_TimeSinceThisHotkey < single_press_time)
        Send {Enter}
return

; Enter & F вызывают Gui, и после этого Enter не работает
#if GetKeyState("Enter", "P")
    SC12::MyGuiFunction()
#if

; Но при вызове Gui по нажатию z Enter работает
z::MyGuiFunction()


MyGuiFunction()  {

  Global MyEdit
  Gui, +LastFound
  GuiHWND := WinExist()           ;--get handle to this gui..

  Gui, Add , Text  ,        , Enter value
  Gui, Add , Edit  , vMyEdit,
  Gui, Add , Button, Default, OK
  Gui, Show
  WinWaitClose, ahk_id %GuiHWND%  ;--waiting for gui to close
  return ReturnCode               ;--returning value

  ButtonOK:
    GuiControlGet, ReturnCode, , MyEdit
    Gui, Destroy
  return

  GuiEscape:
  GuiClose:
    ReturnCode = -1
    Gui, Destroy
  return
}

2

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

KeyWait прерывается WinWaitClose, пока окно не закрыто, программа хоткея не завершена, и не может быть вызвана снова.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

3 (изменено: teadrinker, 2020-07-26 15:29:04)

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

Можно без KeyWait, например:


#SingleInstance, force
single_press_time := 300

info := {}, timer := Func("WaitEnter").Bind(info)
; Enter посылается только при одиночном зажатии менее чем на 300мс
$Enter::
    if !info.start {
        info.start := A_TickCount
        SetTimer, % timer, 10
    }
return

; Enter & F вызывают Gui, и после этого Enter не работает
#if GetKeyState("Enter", "P")
    SC21::MyGuiFunction()
#if

; Но при вызове Gui по нажатию z Enter работает
z::MyGuiFunction()

WaitEnter(info) {
    global single_press_time
    if !GetKeyState("Enter", "P") {
        SetTimer,, Delete
        if (A_TickCount - info.start < single_press_time)
            Send {Enter}
        info.start := ""
    }
}

MyGuiFunction()  {

  Global MyEdit
  Gui, +LastFound
  GuiHWND := WinExist()           ;--get handle to this gui..

  Gui, Add , Text  ,        , Enter value
  Gui, Add , Edit  , vMyEdit,
  Gui, Add , Button, Default, OK
  Gui, Show
  WinWaitClose, ahk_id %GuiHWND%  ;--waiting for gui to close
  return ReturnCode               ;--returning value

  ButtonOK:
    GuiControlGet, ReturnCode, , MyEdit
    Gui, Destroy
  return

  GuiEscape:
  GuiClose:
    ReturnCode = -1
    Gui, Destroy
  return
}

f — это не SC12, это sc21.

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

4

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

Так не проще?


#SingleInstance, force 

Enter:: Enter
Enter & SC21::MyGuiFunction() 

z::MyGuiFunction()

MyGuiFunction()  {

  Global MyEdit
  Gui, +LastFound
  GuiHWND := WinExist()           ;--get handle to this gui..

  Gui, Add , Text  ,        , Enter value
  Gui, Add , Edit  , vMyEdit,
  Gui, Add , Button, Default, OK
  Gui, Show
  WinWaitClose, ahk_id %GuiHWND%  ;--waiting for gui to close
  return ReturnCode               ;--returning value

  ButtonOK:
    GuiControlGet, ReturnCode, , MyEdit
    Gui, Destroy
  return

  GuiEscape:
  GuiClose:
    ReturnCode = -1
    Gui, Destroy
  return
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

5

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

Интересный приём, не знал такого.

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

6

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

Хотя в справке он упоминается.

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

7

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

teadrinker пишет:

f — это не SC12, это sc21.

У меня Colemak

8

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

serzh82saratov пишет:

Так не проще?

По идее это:

Enter:: Enter

Не эквивалентно этому:

$SC1C::
    KeyWait, Enter
    if (A_PriorKey == "Enter" && A_TimeSinceThisHotkey < 300)
        Send {Enter}
return

9

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

mkone112 пишет:

Не эквивалентно этому:

Так вы объясните в чём для вас это функционально выражается, я тоже вижу что отличается.

teadrinker пишет:

Интересный приём, не знал такого.

Он периодически всплывает на форуме, но запоминается плохо из за своей неочивидности.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

10

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

teadrinker пишет:

Можно без KeyWait, например:

Если несколько раз нажать Enter & f то посылается Enter.

11

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

serzh82saratov пишет:

Так вы объясните в чём для вас это функционально выражается, я тоже вижу что отличается.

В первом варианте, при зажатии Enter более чем на 0.3сек - Enter не посылается.
Во втором - Enter посылается при сколь угодно долгом удержании.

12

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

serzh82saratov
Я немного доработал ваше решение и все вроде-бы работает. Большое спасибо!


#SingleInstance, force 

$Enter::
    ; остальной код
    KeyWait, Enter
    if (A_PriorKey == "Enter" && A_TimeSinceThisHotkey < 300)
            Send {Enter}
    ; остальной код
return
Enter & SC12::MyGuiFunction() 

z::MyGuiFunction()

MyGuiFunction()  {

  Global MyEdit
  Gui, +LastFound
  GuiHWND := WinExist()           ;--get handle to this gui..

  Gui, Add , Text  ,        , Enter value
  Gui, Add , Edit  , vMyEdit,
  Gui, Add , Button, Default, OK
  Gui, Show
  WinWaitClose, ahk_id %GuiHWND%  ;--waiting for gui to close
  return ReturnCode               ;--returning value

  ButtonOK:
    GuiControlGet, ReturnCode, , MyEdit
    Gui, Destroy
  return

  GuiEscape:
  GuiClose:
    ReturnCode = -1
    Gui, Destroy
  return
}

13

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

Так ещё попробуйте.


#if EnterTime
SC21:: MyGuiFunction() 

Enter Up::
	if A_TickCount - EnterTime - (EnterTime := 0) < 300 
		Send {Enter}
	Return 
#if !EnterTime
Enter:: EnterTime := A_TickCount 
#if 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

14 (изменено: mkone112, 2020-07-27 19:19:38)

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

serzh82saratov
Я что-то поторопился, этот вариант тоже посылает Enter при отпускании после удержания более 0.3с


#SingleInstance, force 

$Enter::
    ; остальной код
    KeyWait, Enter
    if (A_PriorKey == "Enter" && A_TimeSinceThisHotkey < 300)
            Send {Enter}
    ; остальной код
return
Enter & SC12::MyGuiFunction() 

z::MyGuiFunction()

MyGuiFunction()  {

  Global MyEdit
  Gui, +LastFound
  GuiHWND := WinExist()           ;--get handle to this gui..

  Gui, Add , Text  ,        , Enter value
  Gui, Add , Edit  , vMyEdit,
  Gui, Add , Button, Default, OK
  Gui, Show
  WinWaitClose, ahk_id %GuiHWND%  ;--waiting for gui to close
  return ReturnCode               ;--returning value

  ButtonOK:
    GuiControlGet, ReturnCode, , MyEdit
    Gui, Destroy
  return

  GuiEscape:
  GuiClose:
    ReturnCode = -1
    Gui, Destroy
  return
}

А этот вариант периодически посылает Enter при нажатии Enter & F

Так ещё попробуйте.


#if EnterTime
SC21:: MyGuiFunction() 

Enter Up::
	if A_TickCount - EnterTime - (EnterTime := 0) < 300 
		Send {Enter}
	Return 
#if !EnterTime
Enter:: EnterTime := A_TickCount 
#if 
#SingleInstance, force 

#if EnterTime
SC21:: MyGuiFunction() 

Enter Up::
  if A_TickCount - EnterTime - (EnterTime := 0) < 300 
    Send {Enter}
  Return 
#if !EnterTime
Enter:: EnterTime := A_TickCount 
#if 

MyGuiFunction()  {

  Global MyEdit
  Gui, +LastFound
  GuiHWND := WinExist()           ;--get handle to this gui..

  Gui, Add , Text  ,        , Enter value
  Gui, Add , Edit  , vMyEdit,
  Gui, Add , Button, Default, OK
  Gui, Show
  WinWaitClose, ahk_id %GuiHWND%  ;--waiting for gui to close
  return ReturnCode               ;--returning value

  ButtonOK:
    GuiControlGet, ReturnCode, , MyEdit
    Gui, Destroy
  return

  GuiEscape:
  GuiClose:
    ReturnCode = -1
    Gui, Destroy
  return
}

15

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

mkone112 пишет:

А этот вариант периодически посылает Enter при нажатии Enter & F

У меня такого нет.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

16

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

serzh82saratov
Происходит при быстром нажатии несколько раз. Это еще более заметно, если добавить другие клавиши в блок

#if EnterTime

Пример:


;если зажать Enter и понажимать SC24-27 - будет периодически проскакивать enter
#if EnterTime
SC21:: MyGuiFunction() 
SC24::Left
SC25::Up
SC26::Down
SC27::Right
Enter Up::
	if A_TickCount - EnterTime - (EnterTime := 0) < 300 
		Send {Enter}
	Return 
#if !EnterTime
Enter:: EnterTime := A_TickCount 
#if 

Вот так вроде работает:


#if GetKeyState("Enter", "P")
    SC12:: MyGuiFunction()
#if


#if EnterTime
Enter Up::
  if (A_TickCount - EnterTime - (EnterTime := 0) < 300 && A_PriorKey == "Enter")
    Send {Enter}
  return
#if


#if !EnterTime
Enter:: EnterTime := A_TickCount 
#if

17

Re: AHK: При вызове Gui перестает работать переназначенная клавиша

mkone112 пишет:

если зажать Enter и понажимать SC24-27 - будет периодически проскакивать enter

У меня такого нет.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui