1 (изменено: shoroh, 2011-03-11 00:35:05)

Тема: AHK: Можно ли определить цвет пикселя в свернутом окне.

Здравствуйте!
Подскажите пожалуйста, можно ли узнать цвет пикселя в свернутом окне не разворачивая его. Это мне нужно для работы, т.к. одновременно у меня может быть открыто более 10 окон, экран все их одновременно не вмещает, в каждом окне в любую минуту может прийти сообщение. Особенность прихода этого сообщения в том что, когда оно приходит, меняется цвет в правом верхнем углу окна с черного на белый.

Вот хочу спросить возможно ли осуществить чтения пикселя по определенным координатам в свернутом окне не разворачиваю его с помощью AHK. Если да, то какими функциями. Единственное, что на данный момент знаю, так это про функции - PixelGetColor, PixelSearch и PostMessage, последнее как понял не подходит для меня.

Если не трудно подскажите пожалуйста.

2

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

Была такая тема, довольно давно. Не помню, правда, о свёртутых окнах или просто о загороженных другими окнами. Решение там было найдено. Поищите.

3

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

Перекрытое окно получить можно, свёрнутое — пока способов не обнаружено.

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

4

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

teadrinker, YMP: можно ли узнать у минимизированного окна какие координаты у него были в не минимизированном, «обычном» состоянии?

5

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

Я кажется понял, как сделать. Сейчас пробую.

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

6

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

Нет, не вышло. Думал, можно получить bitmap из контекста окна, но у свёрнутого окна контекст пустой. Новая информация (как, впрочем, и можно было догадаться) пишется не непосредственно в контекст, а в совместимый контекст, дескриптор которого неизвестен. Предыдущие координаты, наверное, узнать как-то можно (в реестре где-то сохраняются?), а вот размеры — никак.

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

7

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

teadrinker пишет:

Перекрытое окно получить можно, свёрнутое — пока способов не обнаружено.

Поправьте меня, если Вас не так понял. Перекрытое окно, это когда например открываю одно окно, а затем открываю второе (например на весь экран) не сворачивая первое.
Если понял Вас правильно по поводу перекрытого окна, тогда мне такой вариант так же подходит, дело в том, что изначально не знал, что есть существенная разница.

8

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

Тогда как окно/операционная система узнают в каком положении и каких размерах нужно восстанавливать минимизированное окно?

9

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

alexii пишет:

Тогда как окно/операционная система узнают в каком положении и каких размерах нужно восстанавливать минимизированное окно?

Хотя да, размеры, возможно, тоже в реестре. Но точно не знаю.

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

10

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

shoroh пишет:

Перекрытое окно, это когда например открываю одно окно, а затем открываю второе (например на весь экран) не сворачивая первое.
Если понял Вас правильно по поводу перекрытого окна, тогда мне такой вариант так же подходит, дело в том, что изначально не знал, что есть существенная разница.

Свёрнутое окно — это когда оно существует только в виде кнопки на панели задач. Получить цвет пикселя перекрытого окна — не проблема.

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

11

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

Получить цвет пикселя перекрытого окна — не проблема.

Да мне такой вариант подходит. Подскажите в каком направлении двигаться, т.е. какими функциями это можно сделать.

12

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

teadrinker пишет:

Хотя да, размеры, возможно, тоже в реестре. Но точно не знаю.

Вопрос был задан в предположении, что если возможно определять и задавать положение/размеры не минимизированного окна (в минимизированном состоянии), то:
* получить у минимизированного окна его положение/размеры в обычном состоянии;
* задать положение/размеры для обычного состояния окна так, чтобы оно оказывалось за пределами видимости экрана;
* восстановить окно;
* получить цвет пикселя;
* свернуть окно;
* вернуть сохранённые положение/размеры окна для обычного состояния.

Насколько я понимаю — это бред.

13

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

alexii пишет:

teadrinker, YMP: можно ли узнать у минимизированного окна какие координаты у него были в не минимизированном, «обычном» состоянии?

Размеры так:

hWnd =    ; указать хэндл

NumPut(VarSetCapacity(WPT, 44), WPT)
DllCall("GetWindowPlacement", UInt, hWnd, UInt, &WPT)

x_top_left := NumGet(WPT, 28), y_top_left := NumGet(WPT, 32)
x_bottom_right := NumGet(WPT, 36), y_bottom_right := NumGet(WPT, 40)

MsgBox, % "X = " x_top_left "`nY = " y_top_left 
   . "`nW = " x_bottom_right - x_top_left "`nH = " y_bottom_right - y_top_left
Return
shoroh пишет:

Подскажите в каком направлении двигаться, т.е. какими функциями это можно сделать.

Напишу попозже.

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

14

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

alexii пишет:

Насколько я понимаю — это бред.

Почему, если эта свёртка-развёртка ни на что не повлияет (разворачивать можно, не активируя). Попробую.

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

15

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

OFF: Нашёл, что искал — старая подобная тема: AutoHotkey: Возможно ли получить цвет пикселя неактивного окна.

16

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

alexii пишет:

* задать положение/размеры для обычного состояния окна так, чтобы оно оказывалось за пределами видимости экрана;

Это оказалось невозможным, ибо

Remarks

If the information specified in WINDOWPLACEMENT would result in a window that is completely off the screen, the system will automatically adjust the coordinates so that the window is visible...

Для перекрытого окна (современный метод ):

F11::
   Title =   ; указать заголовок окна
   x =       ; указать координаты пиксела
   y =  

   pToken := Gdip_Startup()
      
   hWnd := WinExist(Title)
   pBitmap := Gdip_BitmapFromHWND(hWnd)
   SetFormat, IntegerFast, H
   ARGB := Gdip_GetPixel(pBitmap, x, y)
   Gdip_DisposeImage(pBitmap), Gdip_Shutdown(pToken)

   MsgBox, % "Red = " (ARGB & 0xffffff) >> 16
         . "`nGreen = " (ARGB & 0xffff) >> 8
         . "`nBlue = " ARGB & 0xff
   Return

Требует наличия Gdip.ahk в пользовательской библиотеке (папка Мои документы\AutoHotkey\Lib\).

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

17

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

OFF:

teadrinker пишет:

Это оказалось невозможным, ибо:

Remarks

If the information specified in WINDOWPLACEMENT would result in a window that is completely off the screen, the system will automatically adjust the coordinates so that the window is visible...

Хе-хе-хе

18

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

alexii пишет:

OFF: Нашёл, что искал — старая подобная тема: AutoHotkey: Возможно ли получить цвет пикселя неактивного окна.

Косяк… Данная ссылка битая.

19

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

CyberMage, ссылка не битая, просто ведёт в закрытый от просмотра «Архив». Я поднял тему обратно в «Разработку…». Пробуйте ссылку ещё раз.

Пишите по-русски: намеренное коверканье слов чревато последствиями.

20

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

teadrinker пишет:

Для перекрытого окна (современный метод ):

F11::
   Title =   ; указать заголовок окна
   x =       ; указать координаты пиксела
   y =  

   pToken := Gdip_Startup()
      
   hWnd := WinExist(Title)
   pBitmap := Gdip_BitmapFromHWND(hWnd)
   SetFormat, IntegerFast, H
   ARGB := Gdip_GetPixel(pBitmap, x, y)
   Gdip_DisposeImage(pBitmap), Gdip_Shutdown(pToken)

   MsgBox, % "Red = " (ARGB & 0xffffff) >> 16
         . "`nGreen = " (ARGB & 0xffff) >> 8
         . "`nBlue = " ARGB & 0xff
   Return

Требует наличия Gdip.ahk в пользовательской библиотеке (папка Мои документы\AutoHotkey\Lib\).

А поиск картинок таким путём можно осуществить?

21

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

Каким "таким"? Написать свою функцию, используя GDI+ возможно, но достаточно трудоёмко. Можно поискать на оф. форуме.

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

22

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

teadrinker пишет:

Для перекрытого окна (современный метод ):

   Спасибо, отлично работает. Но, если часто повторять это действие, то окно которое сканируется, при изменениях внутри него или при изменении его размера, покрывается артефактами. Приходится заставлять его перерисовываться сворачиванием-разворачиванием или накрытием-закрытием.

  Можно как-то избежать появления артефактов?

23

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

Можно попробовать в конце добавить:

WinSet, Redraw,, [title]   ; указать title
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

24

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

Не подходит.

25

Re: AHK: Можно ли определить цвет пикселя в свернутом окне.

Тогда не знаю, скорее всего никак.

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