Как я могу гарантировать, что GetDC () всегда работает на фоновых окнах? - PullRequest
0 голосов
/ 28 октября 2018

У меня есть скрипт в AHK, который использует функцию PixelColorSimple.

PixelColorSimple(pc_x, pc_y, pc_wID) {
    if pc_wID
    {
    pc_hDC := DllCall("GetDC", "UInt", pc_wID)
    pc_fmtI := A_FormatInteger
    SetFormat, IntegerFast, Hex
    pc_c := DllCall("GetPixel", "UInt", pc_hDC, "Int", pc_x, "Int", pc_y, "UInt")
    pc_c := pc_c >> 16 & 0xff | pc_c & 0xff00 | (pc_c & 0xff) << 16
    pc_c .= ""
    SetFormat, IntegerFast, %pc_fmtI%
    DllCall("ReleaseDC", "UInt", pc_wID, "UInt", pc_hDC)
    return pc_c
    }
}

Он извлекает цвет пикселя из не минимизированного фона / переднего плана, даже если пиксель находится за другим окном.Мне нужно, чтобы мой скрипт запускался в фоновом окне, пока я работаю над другим окном, которое находится перед ним.Он отлично работает до тех пор, пока примерно через 6-10 минут он не закроется в цикле с этой функцией, и мне придется вывести окно на передний план, чтобы оно возобновило работу, как и должно.Я думаю, что мой компьютер не позволяет GetDC() работать с фоновыми окнами по прошествии некоторого времени, поэтому любые идеи о том, как я могу убедиться, что он этого не делает?Или проблема здесь не в GetDC()?Спасибо.

...