• Как привязать скрипт python к окну игры?

    @Aress9
    Задача не такая уж и простая, но реализовать возможно.

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

    Первое что понадобиться сделать, это получить идентификатор окна для дальнейшего с ним взаимодействия. Используем функцию FindWindow передавая первым параметром None, а вторым заголовок окна, его можно посмотреть используя Spy++ или WinSpy++.
    hwnd = win32gui.FindWindow(None, "Безымянный – Блокнот")

    Второе, найти класс окна, куда требуется отсылать сообщения (вам возможно не понадобится). Для этого используем функцию FindWindowEx. В моём случае требуется подкласс "Edit", его название также можно получить с помощью WinSpy++.
    editClass = win32gui.FindWindowEx(hwnd, None, "Edit", None)

    Чтобы отправить сообщение о каком-либо действии в окно, используйте функцию SendMessage. Передавая ему идентификатор класса, само действие, и дополнительные к нему параметры(подробнее смотрите в документации к WinApi). Просто отправить команду может не сработать, в таком случае проследите сообщения вводимые вами в окно с помощью Spy++.
    win32gui.SendMessage(editClass, win32con.WM_CHAR, 0x7A, 0) #Ввод символа 'z' в класс "Edit"


    Весь мой код:
    import win32gui
    import win32con
    
    hwnd = win32gui.FindWindow(None, "Безымянный – Блокнот")
    editClass = win32gui.FindWindowEx(hwnd, None, "Edit", None)
    win32gui.SendMessage(editClass, win32con.WM_CHAR, 0x7A, 0)
    Ответ написан
    Комментировать
  • Как удалить все строки-дубликаты из txt файла?

    Прочитать файл, поместить строки в список, удалить из списка дубликаты, записать строки из списка в файл.

    UPD: можно использовать OrderedDict для быстрого поиска дубликатов без потери порядка следования
    from collections import OrderedDict
    
    lines = ["GL", "gL", "aa", "bb"]
    print("Before:")
    print(lines)
    
    unique_lines = OrderedDict()
    for line in lines:
        normalized_line = line.capitalize()
        if (normalized_line not in unique_lines.keys()):
            unique_lines[normalized_line] = line
    
    print("\nAfter:")
    print(unique_lines.values())

    В моём варианте оригинальной строкой будет считаться первая попавшаяся, а сравниваться строки будут без учёта регистра
    Ответ написан
    2 комментария