1 (изменено: Ядрён, 2014-02-19 02:10:40)

Тема: AHK: Дезактивация работы скрипта в поле своего окна

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

OS: Win7x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

2

Re: AHK: Дезактивация работы скрипта в поле своего окна

Androgen Belkin пишет:
#IfWinActive / #IfWinExist

[v1.0.41/42+]
Создает контекстно-чувствительные горячие клавиши [hotkeys] и строки автозамены [hotstrings]. Такие горячие клавиши выполняют различные действия (или не делают ничего) в зависимости от окна, которое является активным или существует.

#IfWinActive [, WinTitle, WinText]
#IfWinExist [, WinTitle, WinText]
#IfWinNotActive [, WinTitle, WinText]
#IfWinNotExist [, WinTitle, WinText]

3

Re: AHK: Дезактивация работы скрипта в поле своего окна

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

#IfWinActive Notepad
SetTitleMatchMode, 2
OS: Win7x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

4 (изменено: Ядрён, 2014-02-18 21:53:57)

Re: AHK: Дезактивация работы скрипта в поле своего окна

Вот так скрипт не работает , но только на заголовке окна.А как сделать что бы внутри окна скрипт не работал.

#IfWinNotExist ahk_class AutoHotkeyGUI 
SetTitleMatchMode, 2
OS: Win7x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

5

Re: AHK: Дезактивация работы скрипта в поле своего окна

#IfWinNotActive, ЗаголовокОкнаGUI
Далее код скрипта, который будет работать везде, кроме окна AutoHotkey GUI.

6

Re: AHK: Дезактивация работы скрипта в поле своего окна

ypppu пишет:

#IfWinNotActive, ЗаголовокОкнаGUI
Далее код скрипта, который будет работать везде, кроме окна AutoHotkey GUI.

Нет, это только для горячих клавиш.

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

7

Re: AHK: Дезактивация работы скрипта в поле своего окна

Работает, но ка то не правильно, происходит задержка в 2 секунды ,прежде чем скрипт перестаёт работать в окне, и также наоборот вне окна ждёшь 2 секунды что бы скрипт заработал.

#IfWinNotActive, ahk_class AutoHotkeyGUI 
SetTitleMatchMode, 2
OS: Win7x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

8

Re: AHK: Дезактивация работы скрипта в поле своего окна

Доброго времени суток. Сделал скрипт на индикацию раскладки клавиатуры. Нужно что бы он показывал раскладку клавиатуры только в "Google Chrome". Использовал функцию (IfWinActive) , работает но как то неправильно . Окно "Gui " показывается только в "Google Chrome" , работает исправно но при сворачивании "Google Chrome" остаётся висеть на рабочем столе. Помогите исправить.

DetectHiddenWindows, on

Gui, +hwndhGui +AlwaysOnTop -Caption +ToolWindow +LastFound
;WinGet, ID
;WinSet TransColor, EEAA99
;Gui, Color, EEAA99
gui, font, s12 
Gui, Add, Text , cFF8000 vStatic1 x0 y0, Ru
Gui, Add, Text , cFF8000 vStatic2 x0 y0, En

loop

IfWinActive ahk_class Chrome_WidgetWin_1
{
oldlang:=lang
   lang:=InputLayout()
if (oldlang!=lang)
   If (lang = "Russian")
   {
GuiControl, hide, static2
    GuiControl, Show, static1 
Gui, Show, x95 y39 w20 h20 NA, lang053
   }
   Else If (lang = "English")
   {
GuiControl, hide, static1
      GuiControl, Show, static2
Gui, Show, x95 y39 w20 h20 NA, lang053
}
sleep, 50
}

InputLayout()
{
    WinGetClass, Class, % "ahk_id" hID := WinExist("A")
     if !id := DllCall("GetWindow", Ptr, hid, UInt, GW_OWNER := 4, Ptr)
      id:=hID
    ThreadID := DllCall("GetWindowThreadProcessId", "Int", id, "Int", 0)
    HKL := DllCall("GetKeyboardLayout", "uint", ThreadID, "UShort")
    VarSetCapacity(sKbd, 260, 0)
    DllCall("GetLocaleInfo", "uint", HKL
                           , "uint", 0x1001
                           , "str",  sKbd
                           , "uint", 260)
    Return sKbd
}
OS: Win7x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

9

Re: AHK: Дезактивация работы скрипта в поле своего окна

Почему неправильно? Окно остается активным при сворачивании.
Добавьте условие на состояние окна - WinGet State.

10

Re: AHK: Дезактивация работы скрипта в поле своего окна

stealzy пишет:

Окно остается активным при сворачивании.

А разве такое возможно?

DetectHiddenWindows, on
loop
{
   IfWinActive ahk_class Chrome_WidgetWin_1
      tooltip active
   else
      tooltip noactive
   sleep, 50
}

11 (изменено: stealzy, 2017-08-23 22:43:44)

Re: AHK: Дезактивация работы скрипта в поле своего окна

Malcev, взято из опыта, сам спотыкался, но сейчас проверил основательнее.
Если имеем на столе только одно несвернутое окно, то при его сворачивании оно может остаться активным, если есть тултип.
Иначе активной становится Start ahk_class Button.

loop {
  sleep 500
  wingettitle t, A
  tooltip % t
  ; outputdebug % t
}

12

Re: AHK: Дезактивация работы скрипта в поле своего окна

Активным становится другое окно, просто название его не меняется, а хендл и класс да.

f11::
;  wingettitle t, A
  WinGetclass ,t, A
; WinGet, t ,id, A
  tooltip %t%

13 (изменено: Ядрён, 2017-08-24 00:58:18)

Re: AHK: Дезактивация работы скрипта в поле своего окна

Спасибо большое  Malcev , то что нужно. Вот так это выглядит.

Gui, +hwndhGui +AlwaysOnTop -Caption +ToolWindow +LastFound
;WinGet, ID
;WinSet TransColor, EEAA99
;Gui, Color, EEAA99
gui, font, s12 
Gui, Add, Text , cFF8000 vStatic1 x0 y0, Ru
Gui, Add, Text , cFF8000 vStatic2 x0 y0, En

DetectHiddenWindows, on
loop
{
oldlang:=lang
   lang:=InputLayout()
if (oldlang!=lang)
   If (lang = "Russian")
   {
GuiControl, hide, static2
    GuiControl, Show, static1 
}
   Else If (lang = "English")
   {
GuiControl, hide, static1
      GuiControl, Show, static2
}
   IfWinActive ahk_class Chrome_WidgetWin_1
      Gui, Show, x95 y39 w20 h20 NA, lang053
   else
Gui Submit, Hide
    ;  WinHide lang053 
   sleep, 50
}


InputLayout()
{
    WinGetClass, Class, % "ahk_id" hID := WinExist("A")
     if !id := DllCall("GetWindow", Ptr, hid, UInt, GW_OWNER := 4, Ptr)
      id:=hID
    ThreadID := DllCall("GetWindowThreadProcessId", "Int", id, "Int", 0)
    HKL := DllCall("GetKeyboardLayout", "uint", ThreadID, "UShort")
    VarSetCapacity(sKbd, 260, 0)
    DllCall("GetLocaleInfo", "uint", HKL
                           , "uint", 0x1001
                           , "str",  sKbd
                           , "uint", 260)
    Return sKbd
}
OS: Win7x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

14

Re: AHK: Дезактивация работы скрипта в поле своего окна

Malcev пишет:

Активным становится другое окно, просто название его не меняется, а хендл и класс да.

Не до конца понял, ты утверждаешь что свёрнутое окно не может быть активным?

WinMinimizeAll
run notepad
Sleep 2222
Send {LAlt Down}{Escape}{LAlt Up}
Sleep 1111
Wingettitle t, A
WinGetclass,c, A
WinGet, h ,id, A
tooltip % t "`n" c "`n" h
Sleep 2222
Send {LWin Down}{Up}{LWin Up}
Return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

15

Re: AHK: Дезактивация работы скрипта в поле своего окна

Я имел в виду, то что при сворачивании окна активным становится другое окно - его иконка.

For a typical application, the system draws an icon, called the class icon, when the window is minimized, labeling the icon with the name of the window. The class icon, a static image that represents the application, is specified by the application when it registers the window class. The application assigns a handle to the class icon to the hIcon member of WNDCLASS before calling RegisterClass. The application can use the LoadIcon function to retrieve the icon handle.

https://msdn.microsoft.com/en-us/librar … s.85).aspx

16 (изменено: serzh82saratov, 2017-08-24 23:05:54)

Re: AHK: Дезактивация работы скрипта в поле своего окна

Как другое, если WinGet, h ,id, A возвращает хэндл окна.

WinMinimizeAll
run notepad
Sleep 2222
Send {LAlt Down}{Escape}{LAlt Up}
Sleep 1111
Wingettitle t, A
WinGetclass,c, A
WinGet, h ,id, A
tooltip % t "`n" c "`n" h
Sleep 1111
Send {LWin Down}{Up}{LWin Up}
Sleep 1111
Wingettitle t, A
WinGetclass,c, A
WinGet, h ,id, A
tooltip % t "`n" c "`n" h
Return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

17 (изменено: Malcev, 2017-08-24 23:10:24)

Re: AHK: Дезактивация работы скрипта в поле своего окна

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

f11::
WinGet, t ,id, A
tooltip %t%

18

Re: AHK: Дезактивация работы скрипта в поле своего окна

Показывает что окно хоть и свёрнуто но считается активным, ввод {LWin Down}{Up}{LWin Up} идёт опять же в это окно.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

19

Re: AHK: Дезактивация работы скрипта в поле своего окна

У меня твой код открывает блокнот, потом показываеи его хендл, потом максимизирует.
Проверь с помощью 17 кода хендлы разные или нет.
Если разные, то и окна разные.

20

Re: AHK: Дезактивация работы скрипта в поле своего окна

Сворачиваешь несколько окон, ативируешь одно из них, нажимаешь {LAlt Down}{Escape}{LAlt Up}, смотришь хэндл, нажимаешь {LWin Down}{Up}{LWin Up}, смотришь хэндл. Хэндлы одинаковые.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

21

Re: AHK: Дезактивация работы скрипта в поле своего окна

нажимаешь {LAlt Down}{Escape}{LAlt Up}

Окно должно деактивироватся.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

22

Re: AHK: Дезактивация работы скрипта в поле своего окна

Да, действительно, так оно и есть.
Тогда на этот случай надо еще, как писал stealzy проверять состояние окна.