Как нажать клавишу для полноэкранного приложения?

Discussion in 'Python' started by namak, 22 Jan 2019.

  1. namak

    namak Member

    Joined:
    29 Jan 2009
    Messages:
    66
    Likes Received:
    8
    Reputations:
    0
    Как на питоне нажать клавишу для полноэкранного приложения(например, игра некая)?
    можно ли это вообще?

    При развёрнутом полноэкранном приложении когда наступит некое событие чтоб скрипт (или может служба) нажали клавишу.
     
  2. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
  3. namak

    namak Member

    Joined:
    29 Jan 2009
    Messages:
    66
    Likes Received:
    8
    Reputations:
    0
    Че ты несёшь?
    Цель сего упражнения что бы при запущенном полноэкранном приложении(уточню - игре) нажать на 1 клавишу, это событие словить на питоне и сэмулировать нажатие определенной последовательности клавиш.
    А тебе поменьше курить советую:)
     
  4. namak

    namak Member

    Joined:
    29 Jan 2009
    Messages:
    66
    Likes Received:
    8
    Reputations:
    0
    см предыдущее сообщение
     
  5. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    637
    Likes Received:
    246
    Reputations:
    42
    PHP:
    import ctypes
    import time

    SendInput 
    ctypes.windll.user32.SendInput

    # C struct redefinitions
    PUL ctypes.POINTER(ctypes.c_ulong)
    class 
    KeyBdInput(ctypes.Structure):
        
    _fields_ = [("wVk"ctypes.c_ushort),
                    (
    "wScan"ctypes.c_ushort),
                    (
    "dwFlags"ctypes.c_ulong),
                    (
    "time"ctypes.c_ulong),
                    (
    "dwExtraInfo"PUL)]

    class 
    HardwareInput(ctypes.Structure):
        
    _fields_ = [("uMsg"ctypes.c_ulong),
                    (
    "wParamL"ctypes.c_short),
                    (
    "wParamH"ctypes.c_ushort)]

    class 
    MouseInput(ctypes.Structure):
        
    _fields_ = [("dx"ctypes.c_long),
                    (
    "dy"ctypes.c_long),
                    (
    "mouseData"ctypes.c_ulong),
                    (
    "dwFlags"ctypes.c_ulong),
                    (
    "time",ctypes.c_ulong),
                    (
    "dwExtraInfo"PUL)]

    class 
    Input_I(ctypes.Union):
        
    _fields_ = [("ki"KeyBdInput),
                     (
    "mi"MouseInput),
                     (
    "hi"HardwareInput)]

    class 
    Input(ctypes.Structure):
        
    _fields_ = [("type"ctypes.c_ulong),
                    (
    "ii"Input_I)]

    # Actuals Functions

    def PressKey(hexKeyCode):
        
    extra ctypes.c_ulong(0)
        
    ii_ Input_I()
        
    ii_.ki KeyBdInput0hexKeyCode0x00080ctypes.pointer(extra) )
        
    Inputctypes.c_ulong(1), ii_ )
        
    ctypes.windll.user32.SendInput(1ctypes.pointer(x), ctypes.sizeof(x))

    def ReleaseKey(hexKeyCode):
        
    extra ctypes.c_ulong(0)
        
    ii_ Input_I()
        
    ii_.ki KeyBdInput0hexKeyCode0x0008 0x00020ctypes.pointer(extra) )
        
    Inputctypes.c_ulong(1), ii_ )
        
    ctypes.windll.user32.SendInput(1ctypes.pointer(x), ctypes.sizeof(x))

    # directx scan codes http://www.gamespp.com/directx/directInputKeyboardScanCodes.html
    while (True):
        
    PressKey(0x11)
        
    time.sleep(1)
        
    ReleaseKey(0x11)
        
    time.sleep(1)
     
    namak likes this.
  6. namak

    namak Member

    Joined:
    29 Jan 2009
    Messages:
    66
    Likes Received:
    8
    Reputations:
    0
    Спасибо! То что и искал! Немножко допилить напильников, запихнуть словарь с кодами подпихну и рабочая версия на 100%.