Моя программа get pixel python через некоторое время возвращает -1 - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь обнаружить некоторые точки на экране, если любое из этих изменений цвета получит уведомление о телеграмме, все это прекрасно работает, но у меня ошибка, которую я не знаю, как исправить, через некоторое время я установил 1 сек.задержка между каждой проверкой, но через 20-25 минут я получаю телеграмму с уведомлением о том, что пиксель изменился, но это не так, и когда я проверяю, какие цвета его чтения, он говорит "-1", я должен закрыть и снова открыть приложениепоэтому он будет снова нормально читать цвета, у меня нет никакого антивируса

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

так я сохраняю каждую точку, которую хочу проверить

def do_setup():

work_queue = list()

print("[!] Entering setup mode")
print("[!] Move your mouse and press p to add the point to the work queue")
print("[!] press q to finish setup")
while True:

    k = check_keys()
    if k:
        if k.lower() == b"q":
            # quit setup already
            print(f"Finishing setup with {len(work_queue)} points")
            CONFIG["last_work"] = work_queue
            break

        if k.lower() == b"p":

            x, y = get_cursor()

            color = get_color(x, y)
            work_queue.append({
                "abcissa": x,
                "ordinate": y,
                "index": len(work_queue),
                "last_color": color,

            })

            print(f"Point({x},{y}) {color} added, {len(work_queue)} points")

CONFIG["last_work"] = work_queue

save_config(work_queue)
return work_queue

def get_color(x, y):
"""
"""
# return win32gui.GetPixel(win32gui.GetDC(win32gui.GetActiveWindow()), x, y)
color = windll.gdi32.GetPixel(
    windll.user32.GetDC(0), x, y
)

if color == -1:
    print(f"get_color returned -1, coordinates ({x}, {y})")
    color = 9000000

return color

и это мой главный

def main():
if len(CONFIG["last_work"]) == 0 and not check_config():
    setup_telegram()
    do_setup()

COUNTER = 0

print("[!] Entering main loop, press s for setup or esc to exit")
while True:
    time.sleep(1)
    tick = time.time()

    for i, item in enumerate(CONFIG["last_work"]):

        color = get_color(item["abcissa"], item["ordinate"])

        if check_color(color, item["last_color"]):
            alert_telegram(item)

            item["last_color"] = color

    k = check_keys()

    if k:
        # ESC key
        if k == b"\x1b":
            print("Exit")
            break

        elif k.lower() == b"s":
            print("Entering setup mode")
            do_setup()

    # loop limit counter, 5 times, disable later
    COUNTER += 1

    if COUNTER == COUNTER_LIMIT:
        break

    tock = time.time()

    print(f"Looped in {tock - tick:.4f}")

if name == " main ": main ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...