1 (изменено: kolotilov256, 2020-03-29 05:26:25)

Тема: AHK: Подсветка окна по pid

Здравствуйте. Подскажите пожалуйста, каким образом можно подсветить окно по pid процесса.

Вот к примеру открыто большое количество одноимённых окон. Хочется по определённому pid процесса сделать подсветку окна, чтобы впоследствии его открыть. Подсветка нужна именно windows'овская, жёлтая такая, наверняка понимаете о чём я говорю.

Вопрос как сделать такую подсветку? :c

https://i.imgur.com/i0n16GZ.png

2

Re: AHK: Подсветка окна по pid

Программа может мигать кнопкой на панели задач, когда она выдаёт диалоговое окно при том, что на переднем плане находится окно другой программы. Такое же поведение бывает при использовании команды GUI, flash.
Возможно, такого эффекта получится добиться оконными сообщениями или стилями. Можно попытаться отследить программой Winspector Spy.

3

Re: AHK: Подсветка окна по pid

Я и говорю про подсветку кнопки в панели задач. Значок в панели задач является кнопкой, не так ли?

4

Re: AHK: Подсветка окна по pid

stealzy, нашёл только под windows 7
Хотя может не там искал... не знаю. Если ты разбираешься, понимаешь что искать, можешь найти? Тебе это куда легче будет.

5 (изменено: teadrinker, 2020-07-28 20:09:46)

Re: AHK: Подсветка окна по pid

У меня такой код работает под Windows 10:

Gui, +hwndhGui
Gui, Font, s12 q5, Calibri
Gui, Add, Text,, Кнопка на панели задач будет мигать,`nпока окно не станет активным
Gui, Show, NA w300 h200

FlashTaskBarButton(hGui)
Return

GuiClose:
   ExitApp

FlashTaskBarButton(hGui, count := 0)  {
   static FLASHW_TRAY := 0x2, FLASHW_TIMERNOFG := 0xC
   VarSetCapacity(FLASHWINFO, size := A_PtrSize*3 + 4*2, 0)
   NumPut(count, NumPut(FLASHW_TRAY|(count ? 0 : FLASHW_TIMERNOFG), NumPut(hGui, NumPut(size, FLASHWINFO)), "UInt"))
   DllCall("FlashWindowEx", Ptr, &FLASHWINFO)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Подсветка окна по pid

Кстати в классической теме в Win7 кнопки на панели задач не мигают. В классической на WinXP тоже вроде не мигали.

7 (изменено: kolotilov256, 2020-03-30 00:21:58)

Re: AHK: Подсветка окна по pid

teadrinker, а что делает этот код? Я запустил, и ничего нигде не замигало.
И не совсем понятно, можно ли настроить эту функцию на мигание определённого процесса (определяемого по id или pid или hwnd, как удобнее) ?

8 (изменено: kolotilov256, 2020-03-30 00:32:11)

Re: AHK: Подсветка окна по pid

ypppu, мне нужно под windows 10. Мигать должны не только окна autohotkey скриптов, но и окна любого другого запущенного процесса (В моём случае процесса игры gta samp)

9

Re: AHK: Подсветка окна по pid

kolotilov256 пишет:

а что делает этот код?

Обращается к WinAPI:
https://docs.microsoft.com/en-us/window … shwindowex

10 (изменено: kolotilov256, 2020-03-30 02:57:47)

Re: AHK: Подсветка окна по pid

Malcev, ну хорошо, обращается. Обычно при обращении выходит какой-то ответ. При запуске же этого кода ничего не происходит.

11

Re: AHK: Подсветка окна по pid

В смысле, ничего не происходит? Окно появляется?

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

12 (изменено: kolotilov256, 2020-03-30 03:28:33)

Re: AHK: Подсветка окна по pid

teadrinker, окно то появляется. Только при этом ничего не мигает.
Cделал вот ещё код для проверки, будут ли мигать текущие открытые окна или нет. Также ничего не мигало...

#SingleInstance Force
#Persistent
#NoEnv

text := ""
WinGet, id, list,,, Program Manager
Loop % id
{
	this_id := id%A_Index%
	WinGetClass, this_class, ahk_id %this_id%
	WinGet, pid, PID, ahk_id %this_id%
	text .= this_class "`n" pid "`n" this_id "`n`n"
	FlashTaskBarButton(this_id)
}
msgbox % text
Return

FlashTaskBarButton(hGui, count := 0)  {
   static FLASHW_TRAY := 0x2, FLASHW_TIMERNOFG := 0xC
   VarSetCapacity(FLASHWINFO, size := A_PtrSize*2 + 4*4, 0)
   NumPut(count, NumPut(FLASHW_TRAY|(count ? 0 : FLASHW_TIMERNOFG), NumPut(hGui, NumPut(size, FLASHWINFO)), "UInt"))
   DllCall("FlashWindowEx", Ptr, &FLASHWINFO)
}

13

Re: AHK: Подсветка окна по pid

А сама кнопка на панели задач появляется? И не мигает?

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

14

Re: AHK: Подсветка окна по pid

Тут ошибка:

VarSetCapacity(FLASHWINFO, size := A_PtrSize*2 + 4*4, 0)

Надо так:

VarSetCapacity(FLASHWINFO, size := A_PtrSize*3 + 4*2, 0)

15

Re: AHK: Подсветка окна по pid

Да, точно.

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

16 (изменено: kolotilov256, 2020-03-30 03:50:36)

Re: AHK: Подсветка окна по pid

Во! Сейчас работает. А резонный вопрос, какой манипуляцией кода можно остановить это мигание?))) (Кроме как переключиться к мигающему окну)

17 (изменено: Malcev, 2020-03-30 03:59:05)

Re: AHK: Подсветка окна по pid

Ответ на свой вопрос получите, почитав ссылку из 10 поста.

18

Re: AHK: Подсветка окна по pid

kolotilov256 пишет:

Во! Сейчас работает.

Неужели 32-битные Windows 10 бывают?

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

19 (изменено: kolotilov256, 2020-03-30 04:42:05)

Re: AHK: Подсветка окна по pid

Malcev, конкретно в той ссылке нет информации, как это мигание останавливать.
Нашёл на вот этой странице https://docs.microsoft.com/ru-ru/window … flashwinfo
похожий на правду параметр. Только как его в коде то применить? Пробовал FLASHWINFO := 0 делать, не помогло.

https://imgur.com/SFQF1lJ.png

20

Re: AHK: Подсветка окна по pid

Вот так удалось порешать.

FlashTaskBarButton(hGui)
sleep 3000
FlashTaskBarButton(hGui,0,0,0)
Return

FlashTaskBarButton(hGui, count := 0, FLASHW_TRAY := 0x2, FLASHW_TIMERNOFG := 0xC)  {

   VarSetCapacity(FLASHWINFO, size := A_PtrSize*3 + 4*2, 0)
   NumPut(count, NumPut(FLASHW_TRAY|(count ? 0 : FLASHW_TIMERNOFG), NumPut(hGui, NumPut(size, FLASHWINFO)), "UInt"))
   DllCall("FlashWindowEx", Ptr, &FLASHWINFO)
}

21

Re: AHK: Подсветка окна по pid

FLASHW_TRAY и FLASHW_TIMERNOFG — это константы, им не надо другие значения присваивать.
Лучше так:

Gui, +hwndhGui
Gui, Font, s12 q5, Calibri
Gui, Add, Text,, Кнопка на панели задач мигнёт 3 раза`nпотом будет подсвечена`nпока не пройдёт 5 секунд`nили пока окно не станет активным
Gui, Show, NA w300 h200

FlashTaskBarButton(hGui, 3)
Sleep, 5000
FlashTaskBarButton(hGui,, 1)
Return

GuiClose:
   ExitApp

FlashTaskBarButton(hGui, count := 0, stop := 0)  {
   static FLASHW_TRAY := 0x2, FLASHW_TIMERNOFG := 0xC
   VarSetCapacity(FLASHWINFO, size := A_PtrSize*3 + 4*2, 0)
   NumPut(size, FLASHWINFO)
   NumPut(hGui, FLASHWINFO, A_PtrSize)
   NumPut(stop ? 0 : FLASHW_TRAY|(count ? 0 : FLASHW_TIMERNOFG), FLASHWINFO, A_PtrSize*2)
   NumPut(count, FLASHWINFO, A_PtrSize*2 + 4)
   DllCall("FlashWindowEx", Ptr, &FLASHWINFO)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

22

Re: AHK: Подсветка окна по pid

teadrinker пишет:
kolotilov256 пишет:

Во! Сейчас работает.

Неужели 32-битные Windows 10 бывают?

У меня не работало на Win10 64bit, Ahk 32bit.