Макрос кнопки ds4windows в программе, запущенной из скрипта Python - PullRequest
0 голосов
/ 29 января 2019

Я пишу программу pyqt5 для управления ромами и запуска их из соответствующего эмулятора, и у меня возникают проблемы с использованием контроллера для выхода из эмуляции после его запуска.

Я использую ds4windows сdinput выключен, поэтому он отображается только как контроллер Xbox.Я использовал модуль джойстика pygame, чтобы контролировать выбор меню, созданного из папок, в которых я храню свои диски.Я назначил макросу alt-f4 кнопку ps в ds4windows, и когда я открываю эмулятор и нажимаю кнопку ps, он выходит так же, как если бы я нажал alt-f4.Когда я запускаю игру из моей программы, используя модуль подпроцесса, или если я вызываю путь к его .exe в командной строке, я все равно могу выйти из нее, нажав alt-f4 на клавиатуре, и сразу же возвращаюсь обратно в свою программу, какЯ хотел, но кнопка ps ничего не делает.

Я пытался использовать pygame.quit (), когда я запускаю эмулятор, чтобы отключить цикл while, который у меня есть для обнаружения ввода с геймпада, запуска эмуляторов.с subprocess.run (), subprocess.Popen () и subprocess.Popen () с shell = True, но это все тот же результат: клавиатура работает, кнопка ps ничего не делает.Я тестировал его на нескольких разных эмуляторах, но не думаю, что это проблема, потому что, как я уже сказал, он работает, если я запускаю эмулятор из папки Program Files, а не когда он запускается из моего приложения или еслиЯ называю его путь из командной строки.

Кроме того, когда я запускаю из своей программы, контроллер все еще работает, как и ожидалось с эмуляцией.это просто любая кнопка, назначенная чему-то другому, кроме профиля контроллера xbox, который ничего не делает

Пример кода, используемого для запуска изнутри программы (mpath - это путь к файлу rom):

    def launch(selection):
        global mpath
        ext = selection[-4:]
        emupath = 'C:\\Program Files\\emulators\\'
        if ext in launchtypes:
            if ext in  ['.exe', '.lnk']:
                Popen(mpath, shell=True)
            elif ext == '.smc':
            run([emupath + 'snes9x\\snes9x-x64.exe', mpath])

Редактировать: Решено

Я запускал свою программу из эмулятора консоли cmder.Когда я запускал его из cmd.exe или powershell, он работал нормально.

...