def getConsoleVisibleLines(): consoleScreenBufferInfo=wincon.GetConsoleScreenBufferInfo(consoleOutputHandle) topLine=consoleScreenBufferInfo.srWindow.Top lineCount=(consoleScreenBufferInfo.srWindow.Bottom-topLine)+1 lineLength=consoleScreenBufferInfo.dwSize.x text=wincon.ReadConsoleOutputCharacter(consoleOutputHandle,lineCount*lineLength,0,topLine) newLines=[text[x:x+lineLength] for x in range(0,len(text),lineLength)] return newLines
def consoleWinEventHook(handle,eventID,window,objectID,childID,threadID,timestamp): #We don't want to do anything with the event if the event is not for the window this console is in if window!=consoleObject.windowHandle: return if eventID==winUser.EVENT_CONSOLE_CARET and not eventHandler.isPendingEvents("caret",consoleObject): eventHandler.queueEvent("caret",consoleObject) # It is safe to call this event from this callback. # This avoids an extra core cycle. consoleObject.event_textChange() if eventID==winUser.EVENT_CONSOLE_UPDATE_SIMPLE: x=winUser.LOWORD(objectID) y=winUser.HIWORD(objectID) consoleScreenBufferInfo=wincon.GetConsoleScreenBufferInfo(consoleOutputHandle) if x<consoleScreenBufferInfo.dwCursorPosition.x and (y==consoleScreenBufferInfo.dwCursorPosition.y or y==consoleScreenBufferInfo.dwCursorPosition.y+1): eventHandler.queueEvent("typedCharacter",consoleObject,ch=unichr(winUser.LOWORD(childID)))
def _get_consoleScreenBufferInfo(self): return wincon.GetConsoleScreenBufferInfo(consoleOutputHandle)