def send(self): keys = [] for vk, ext in self.generalizedModifiers: if vk == VK_WIN: if winUser.getKeyState( winUser.VK_LWIN) & 32768 or winUser.getKeyState( winUser.VK_RWIN) & 32768: # Already down. continue vk = winUser.VK_LWIN elif winUser.getKeyState(vk) & 32768: # Already down. continue keys.append((vk, 0, ext)) keys.append((self.vkCode, self.scanCode, self.isExtended)) with ignoreInjection(): if winUser.getKeyState(self.vkCode) & 32768: # This key is already down, so send a key up for it first. winUser.keybd_event(self.vkCode, self.scanCode, self.isExtended + 2, 0) # Send key down events for these keys. for vk, scan, ext in keys: winUser.keybd_event(vk, scan, ext, 0) # Send key up events for the keys in reverse order. for vk, scan, ext in reversed(keys): winUser.keybd_event(vk, scan, ext + 2, 0) if not queueHandler.isPendingItems(queueHandler.eventQueue): # We want to guarantee that by the time that # this function returns,the keyboard input generated # has been injected and NVDA has received and processed it. time.sleep(0.01) wx.Yield()
def send(self): keys = [] for vk, ext in self.generalizedModifiers: if vk == VK_WIN: if winUser.getKeyState(winUser.VK_LWIN) & 32768 or winUser.getKeyState(winUser.VK_RWIN) & 32768: # Already down. continue vk = winUser.VK_LWIN elif winUser.getKeyState(vk) & 32768: # Already down. continue keys.append((vk, ext)) keys.append((self.vkCode, self.isExtended)) if winUser.getKeyState(self.vkCode) & 32768: # This key is already down, so send a key up for it first. winUser.keybd_event(self.vkCode, 0, self.isExtended + 2, 0) # Send key down events for these keys. for vk, ext in keys: winUser.keybd_event(vk, 0, ext, 0) # Send key up events for the keys in reverse order. for vk, ext in reversed(keys): winUser.keybd_event(vk, 0, ext + 2, 0) if not queueHandler.isPendingItems(queueHandler.eventQueue): time.sleep(0.01) wx.Yield()
def send(self): global ignoreInjected keys = [] for vk, ext in self.generalizedModifiers: if vk == VK_WIN: if winUser.getKeyState(winUser.VK_LWIN) & 32768 or winUser.getKeyState(winUser.VK_RWIN) & 32768: # Already down. continue vk = winUser.VK_LWIN elif winUser.getKeyState(vk) & 32768: # Already down. continue keys.append((vk, 0, ext)) keys.append((self.vkCode, self.scanCode, self.isExtended)) try: ignoreInjected=True if winUser.getKeyState(self.vkCode) & 32768: # This key is already down, so send a key up for it first. winUser.keybd_event(self.vkCode, self.scanCode, self.isExtended + 2, 0) # Send key down events for these keys. for vk, scan, ext in keys: winUser.keybd_event(vk, scan, ext, 0) # Send key up events for the keys in reverse order. for vk, scan, ext in reversed(keys): winUser.keybd_event(vk, scan, ext + 2, 0) if not queueHandler.isPendingItems(queueHandler.eventQueue): time.sleep(0.01) wx.Yield() finally: ignoreInjected=False