Program that types using Windows DLL won't run when called over SSH

Viewed 50

I have a program that runs perfectly fine on my local computer and types a few characters using the windows dll virtual keyboard thing using a code snippet I found on here. Here is a small example of what might happen:

from ctypes import wintypes
user32 = ctypes.WinDLL('user32', use_last_error=True)

class KEYBDINPUT(ctypes.Structure):
    _fields_ = (("wVk",         wintypes.WORD),
                ("wScan",       wintypes.WORD),
                ("dwFlags",     wintypes.DWORD),
                ("time",        wintypes.DWORD),
                ("dwExtraInfo", wintypes.ULONG_PTR))

    def __init__(self, *args, **kwds):
        super(KEYBDINPUT, self).__init__(*args, **kwds)
        # some programs use the scan code even if KEYEVENTF_SCANCODE
        # isn't set in dwFflags, so attempt to map the correct code.
        if not self.dwFlags & KEYEVENTF_UNICODE:
            self.wScan = user32.MapVirtualKeyExW(self.wVk,
                                                 MAPVK_VK_TO_VSC, 0)

class INPUT(ctypes.Structure):
    class _INPUT(ctypes.Union):
        _fields_ = (("ki", KEYBDINPUT),
                    ("mi", MOUSEINPUT),
                    ("hi", HARDWAREINPUT))
    _anonymous_ = ("_input",)
    _fields_ = (("type",   wintypes.DWORD),
                ("_input", _INPUT))

def PressKey(hexKeyCode):
    x = INPUT(type=INPUT_KEYBOARD,
              ki=KEYBDINPUT(wVk=hexKeyCode))
    user32.SendInput(1, ctypes.byref(x), ctypes.sizeof(x))

PressKey(0x39)

Now this works perfectly on my computer however if I put the .py file on a remote Windows computer and I use ssh to run the file nothing will be typed. I have confirmation that it is running because I have some print statements in the real thing. Is this something to do with Windows or python? Is there any way to make this work?

0 Answers
Related