• Как запустить .bat файл через pywinauto?

    Vindicar
    @Vindicar
    RTFM!
    С командной строкой взаимодействуй через стандартный модуль subprocess. pywinauto ТОЛЬКО для графических приложений.
    Ответ написан
    Комментировать
  • Какие компиляторы "принято" использовать в клиентских приложениях для разных платформ (Windows, MacOS etc)?

    vabka
    @vabka
    Токсичный шарпист
    Кажется, что всё-таки чаще Clang/LLVM, тк он под капотом умеет компилировать под MSVC ABI, если компилируешь под винду, и GNU ABI, когда компилируешь под Linux.
    Ответ написан
    Комментировать
  • Почему еще не состыкованы технологии Python(Rust, Go, JavaScript) -> LLVM -> Asm -> STM32 ?

    soshnikov
    @soshnikov
    Мне кажется, это Неуловимый Джо.
    Если вам необходима компактная платформа общего назначения для прикладного решения на питоне, к примеру, возьмите малину, кубик или любую подобную плату. Валом их.
    Ембеддед это несколько другие задачи и соответственно инструменты. Это работа на уровне железа, таймингов, прерываний. Зачастую сложно понять, почему что-то не работает, хотя должно. Хотя код на си или асме, и вроде как все прозрачно и понятно и на одном экране умещается.
    А вы представьте в какой ад превратится отладка, если туда впихнуть рантайм или виртуальную машину?
    Ответ написан
    1 комментарий
  • Как реализовать какое-либо действия скрипта при открытии пользователем определённое программы?

    exibite777
    @exibite777
    Ведущий системный аналитик
    Попробуйте модуль pywinauto отлично работает с интерфейсом Windows, позволяет его автоматизировать
    Например, вот код инсталлера 7-zip
    wizard=app['7-Zip 19.00 (x64) Setup']
    wizard.Install.Click()
    time.sleep(5)
    wizard.CloseButton.Click()
    time.sleep(2)
    app=pywinauto.Application().start(r'C:\Program Files\7-Zip\7zFM.exe')
    main=app['7-Zip']
    main.MenuSelect('Сервис->Настройки...')
    settings=app['Настройки']
    settings.Button.Click()
    settings.ОКButton.Click()
    main.Close()
    Имена кнопок и компонентов на которые надо нажимать можно узнать утилитой swapy, она же автомтически генерит код для pywinauto

    Модуль позволяет создавать свои собственные дочерние процессы, а может подключаться к процессам уже ранее запущенных приложений. Ну а раз скрипт уже запущен, то можете в нем хоть print() хоть все что угодно писать. Например я делал сервис киллер notepad
    Киллер Notepad
    import pywinauto, datetime, threading, time
    pid_list=[]; log_list=[]
    
    with open("kill-notepad.log", "a") as log:
        log.write(f"{datetime.datetime.now()} | service started, I'am kill all notepad appliction\n")
    
    def logger():
        global log_list
        if len(log_list)>0:
            log_copy=log_list.copy(); log_list=[]
            with open("kill-notepad.log", "a") as log:
                for i in range(len(log_copy)):
                    log.write(log_copy.pop(0))
    
    def disabler(main,count):
         for i in range(count-count//255):
                main.set_transparency(alpha=255-i//(count//255))
    def alarm(main):
        for i in range(10):
                main.Edit.send_keystrokes("НЕЛЬЗЯ ЗАПУСКАТЬ ЭТУ ПРОГРАММУ\n")
    
    def killer():
        global pid_list
        try:
            app=pywinauto.Application().connect(path=r"c:\windows\system32\notepad.exe")
            main=app.top_window(); count=10000
            if main.process_id() not in pid_list:
                pid_list.append(main.process_id())
            else:
                return
            main.set_transparency(alpha=255)
            threading.Thread(target=alarm(main)).start()
            threading.Thread(target=disabler(main,count)).start()
            log_list.append(f'{datetime.datetime.now()} | destroy {main.element_info}\n')
            app.kill()
        except:
            pass
    count=0
    while True:
        if count==10:count=0
        time.sleep(1); count+=1
        shout=threading.Thread(target=killer)
        shout.start()
        if count==10:
            report=threading.Thread(target=logger)
            report.start()

    Потом можно скрипт упаковать в exe-файл при помощи cx-Freeze
    упаковываем скрипт
    Файл setup.py
    from cx_Freeze import setup, Executable
    packages = ['win32serviceutil','win32service','win32event','servicemanager','socket','win32timezone','pywinauto', 'sys', 'datetime', 'not-notepad-service']
    build_exe_options = {"packages": packages}
    executable = [Executable("not-notepad-service.py")]
    setup(name = "StopNotepadService",
            version = "1.0",
            description = "Stop NotepadApp and Log",
            options = {"build_exe": build_exe_options},
            executables = executable)

    Запускаем сборку python setup.py build

    И можно даже потом повесить готовый exe-файл как службу Windows
    при помощи nssm-2.24-101-g897c7ad
    Ответ написан
    2 комментария
  • Почему у C# программистов по статистике зарплата сильно меньше чем у JS, Java, Python?

    Тут есть очень простое объяснение:

    1) Это Unity, которая сильно снижает планку зп по рынку.
    2) Студенты. Майкрософт хорошо лоббирует .net в универах, поэтому большая часть студентов (которые готовы работать за еду), идут со знанием .net
    3) В США большая часть .net работы — это компании в области гос/финтех-сектора. У нас же по историческим причинам, в этом секторе основной игрок Java. Следовательно и деньги в .net не идут.
    4) .Net — дорогой стек, поэтому все стартапы, которые вынуждены большой зп конкурировать с более «стабильными» компаниями за разработчиков, выбирают python/java/php, а не .net. Хостинг на .net — крайне разорителен (сейчас, конечно, появился .net core — но он еще слишком молод, чтобы поменять ситуацию).
    5) .net часто используется во всяких тендерных проектах, где руководство использует принцип «совка». Разработчик должен быть голодным и «уставшим».

    ___

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

    Реально открываешь вакансии, там middle .net разраб — 90-120к тысяч. Хотя проекты такой же сложности на Java — идут уже 120-150к. В общем, так сложилось, что .net платят меньше, и работодатели не шибко хотят поднимать эту планку.
    Ответ написан
    Комментировать
  • Какую библиотеку Python использовать для управления приложениями?

    frendri, используй pywinauto или более высокоуровневый pyautogui

    Вот статья с Хабра на русском.
    Будут сложности, пиши в комментарии, отвечу. Прежде чем задавать вопросы, прочтие статьи
    в интернете и конечно официальный сайт библиотеки, попробуйте написать что нибудь.
    Если будете использовать pywinauto, то неизбежно придется по минимуму изучить
    устройство Windows программ. pyautogui должен быть менее требователен по квалификации,
    но так скажем "более толстая" библиотека.

    P.S. Со своего опыта могу сказать: нужно было автоматизировать нажатие в программе написаной
    на FoxPro для создания отчетов. Использовал pywinauto. Большинство действии без проблем сделал,
    но некоторые действия не давались из за того, что не мог узнать идентификаторы некоторых кнопок.
    Выкрутился отправляя нужное количество нажатии на TAB для переключения на нужную кнопку и
    SPACE для нажатие. Есть и более хипстерский способ, использовать распознавание по контрольной
    картинке элемента окна (pyautogui), но его не приходилось использовать
    Ответ написан
    3 комментария
  • Почему в Google Chrome и в Opera не открывается xml-файл с подключённым к нему xsl-стилями?

    @Roman-Fov
    Всё он работает. Только нужно предварительно закрыть все другие окна хрома. Если он работает в фоне, то убить все его процессы. Только тогда запускать его с флагом --allow-file-access-from-files.
    Работает во всех браузерах основанных на Chromium.
    Или создать сервер (денвер или что там сейчас на винде) и обращаться к файлам через http. Тогда этой ошибки возникать не будет вообще без флагов всяких.
    Ответ написан
    3 комментария
  • Как отследить состояние программы?

    DDDsa
    @DDDsa
    Может быть overkill, конечно, но можете посмотреть в сторону pywinauto. Это библиотека для автоматизации взаимодействия с Windows GUI. С ее помощью можно отследить появление, например, определенного окна программы.

    Вот фрагмент кода из одного моего скрипта, должно стать понятно:
    tw = app.window_(title_re="Выбор подразделения")
    while not tw.Exists():
        sleep(.1)
        tw = app.window_(title_re="Выбор подразделения")
    #окно появилось - выполняем следующие действия
    Ответ написан
    1 комментарий
  • Какие есть инструменты для программного управления окнами?

    ApeCoder
    @ApeCoder
    Есть приблуды для автоматизации работы типа AutoHotkey, AutoIT со своим языком
    Есть либы для ЯП типа PyWinAuto
    Есть тестовые фреймворки типа coded ui tests
    Ответ написан
    Комментировать
  • Как из питона взаимодействовать с окнами?

    TomasHuk
    @TomasHuk
    Ответ написан
    Комментировать
  • Модули для доступа к разным функция компьютера?

    TomasHuk
    @TomasHuk
    В довесок для Windows можете посмотреть pywinauto, для автоматизации действий с GUI.
    Ответ написан
    Комментировать
  • Как автоматизировать повторяющиеся действия в windows?

    TomasHuk
    @TomasHuk
    Getautoma похоже на какую-то обертку над pywinauto на python.
    Еще можно посмотреть на AutoIt, функции ControlClick, ControlSend и пр., но не проверял.
    Ответ написан
    Комментировать
  • Можно ли узнать информацию о всех доступных для нажатия областях на активном окне приложения в Windows?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Инспектор из SDK Майкрософта https://docs.microsoft.com/de-de/windows/desktop/W...
    Инспектор AutoIt https://www.autoitscript.com/autoit3/docs/intro/au...
    Библиотека на питоне позволяющая манипулировать приложениями Windows https://pywinauto.readthedocs.io/en/latest/getting...
    Ответ написан
    Комментировать
  • Как запустить расширение в Selenium?

    @GeneD88
    QA
    Простите, что понимается под 'запустить'?
    Вы добавили плагин через указанные расширения для хрома и необходимо "нажать" на кнопку этого плагина? Если так, то средствами селениума этого уже не сделать, тк эта кнопка не является частью веб страницы, а является частью приложения. Для этого случая необходимо будет подключиться к этому приложению с помощью Pywinauto (тк, Вы не указали язык, то я выбрал знакомый мне=) )

    Что то типа:
    chrm = Application().connect(title='Chrome browser')

    (с) https://pywinauto.readthedocs.io/en/latest/HowTo.h...

    А дальше уже указать кнопку и нажать ее...
    Ответ написан
    1 комментарий
  • Куда пойти работать тестестировщиком ПО?

    @sisn
    Мой уровень технический знаний - написание простых тестов на C++.

    Никому не надо.

    Простые тесты пишут сами разработчики.
    Ваши представления о том, что существуют отдельно пишущие простые тесты тестировщики - устарели лет на 10.

    Хотя.
    В больших фирма есть выделенные тестировщики, которые сами пишут тесты.
    Но это вовсе не "простые" тесты.
    Ответ написан
    Комментировать
  • Ответственность за баги при нетривиальном поведении?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Для понимания:
    Бизнес-адвокаты-финансисты - это сферы которые __играют__ со словами "хорошо-плохо-правильно-неправильно"
    Программисты-инженеры-слесари - это сферы которые делают и у них есть только "работает-в-моменте/не-работает-в-моменте"
    Врачи-преподаватели - посередине, но современная тенденция они стараются побыстрее перейти в первую группу

    Чтобы тебе легче жилось, тебе придется ВОЗНЕНАВИДЕТЬ первую группу, а не полюбить её.
    Только так можно самому начать переходить в эту группу.

    Система сломана самим фактом наличия денег и не будет чиниться, т.к. более 50% имеющих ресурсы умеют в нее играть (даже 92%), а так им пришлось бы переучиваться. Не пытайся оправдаться и что-то доказать. "Пока ты оправдываешься - ты не ведешь переговоры" (с) Профессия бизнесмена-финансиста-адвоката в том чтобы любыми способами получить или сэкономить деньги. А поскольку именно адвокаты будут доказывать виновность-невиновность... то выиграет не тот, кто прав, а тот у кого больше финансов.

    Чтобы не возникало таких ситуаций, тебе нужно оставлять в договоре бэкдор, через который ты сможешь сбежать. Это не честно, это плохо и это вообще ужасно. Но так все делают. Только молчат.

    Пока система не изменится на всеобщую ответственность - это так и будет работать. Тебя будут пытаться заставить работнуть бесплатно любыми способами, потому что это никем не запрещается, а понятие совесть бизнесмены засунули глубоко и надолго. Ты улыбаешься и отвечаешь, что "согласно ТЗ все сделано хорошо". Если второй раз - отвечаешь еще раз. Если третий раз - на выбор - либо удаляешь его и вешаешь в игнор, а сам не признаешься, что это делал, либо устраиваешь гневную тираду на тему того, что он не собирается тебя уважать и именно поэтому ты не собираешься ему помогать.

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

    Так что же получается - теперь если тебе плохо сделали, нужно молча стерпеть? Ответ - Да. Но не совсем. Тебе не нужно мстить за то что с тобой плохо обошлись. Тебе нужно заказывать строго там, где у тебя подготовлена поляна и тебе сделают хорошо, пусть и дороже. Вот основное правило. Ты заботишься о тех, кто на тебя работает. А они заботятся о тебе. Если ты видишь что они подставили тебя уже третий раз - поругай себя что не увидел этого раньше и уходи оттуда, под клятвой не возвращаться. Друзья-не_друзья не важно. Ты можешь увидеть, что тебе сделали херово и дать немного денег на исправление. Сверх того, что вы договаривались. Если он и со второго раза сделает херово - есть все основания уходить, а не начинать преследование. Вот где место принятия решения.

    Никакого правильного тестирования и т.д. не существует в бизнес-мире.
    Существуют стороны, которые не сделали задний выход и которые не прикрыли тыл. Они играют. Либо ты победишь, либо тебя сожрут. Это так работает.
    Кроме всего прочего существует еще одна сторона - сторонний наблюдатель. Вся работа адвоката отталкивается от произведения впечатления на третью сторону с позиции общенавязанных ценностей.

    Таким образом - если дети голодают это плохо, если ты слишком сильный - это плохо, если у тебя слишком много денег - это плохо - сторонний наблюдатель любит героев голливуда и чем больше у тебя тезисов, доказывающих, что ты и есть герой - тем больше ты побеждаешь. Понимаешь, ведь если то что я перечислил выше происходит из-за тебя, то это ты получаешься сволочью. А вот с точки зрения буддизма, например, сам процесс поиска виноватого лишен смысла, т.к. ведет к войне.

    А еще у героев есть право опубликовывать удары в спину, тогда как у неизвестных людей такого права нет. Если о тебе никто не знает и ты бьешь в спину - ты трус. А если ты герой и бьешь в спину - то ты "бич божий" и вообще молодец.

    Высокое качество существует в компании, где хорошая атмосфера и тобой дорожат. Таких действительно очень мало, и там все эти терки остаются в пределах стен. Но даже там нельзя расслабляться, потому что человечество, воспитанное в тех условиях, что ты видишь вокруг, страдает одними и те ми же проблемами. И одна из них - авторитет важнее качества. Отсюда существуют глупые начальники, а еще бомжи-лауреты нобелевских премий.

    Ведь сама надежда на то, что уже достаточно много людей это понимает и в общем-то готовы к переменам, осознав весь окружающий движ - убивается о то, что те, кто сегодня владеет ресурсами, не имеет ни единой причины раздавать их всем. Ну то есть мы как специалисты очень бы хотели, чтобы люди начинали переходить на осознание общей ответственности за нашу планету. Но современные лидеры не просто не перейдут, они сделают, чтобы никто не переходил и будут удерживать текущий порядок так долго, как только им удастся.
    Ответ написан
    1 комментарий
  • Как с помощью python перехвать управление над другим приложением?

    @Beltoev
    Живу в своё удовольствие
    Вам нужно использовать pywinauto для манипуляции приложениями
    Ответ написан
    Комментировать
  • Какой язык выбрать для автоматизации тестирования?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все зависит от того что вы будете тестить. Если вы будете писать E2E тесты то лучше взять простенький динамический язык, и не PHP, хотя конечно можно и его.

    Я бы рекомендовал вам посмотреть в сторону python или javascript (ruby тоже можно, с капибарой какой, просто python универсальнее).

    Так же немаловажно учитывать на чем написан проект который вы собираетесь покрывать тестами. Если у вас есть люди в команде которые помогут вам с программированием то это несомненнно будет плюсом.
    Ответ написан
    Комментировать
  • Некорректная работа Sublime Text 3 и Python3. Как победить?

    @andrey_ado Автор вопроса
    Вывод в консоль не работал из-за кириллицы в выводимом списке.
    Добавил в sublime-build "env": {"PYTHONIOENCODING": "UTF-8"}
    Весь он теперь выглядит так:
    {
       "cmd": "c:/Python34/python.exe -u \"$file\"",
        "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
        "selector": "source.python",
        "env": {"PYTHONIOENCODING": "UTF-8"}  
    }
    Ответ написан
    Комментировать