def init_console(self): """Sets up connection to console.""" try: win32console.AttachConsole(-1) # pythonw.exe from console atexit.register(lambda: ConsoleWriter.realwrite("\n")) except Exception: pass # Okay if fails: can be python.exe from console try: handle = win32console.GetStdHandle( win32console.STD_OUTPUT_HANDLE) handle.WriteConsole("\n") ConsoleWriter.handle = handle ConsoleWriter.realwrite = handle.WriteConsole except Exception: # Fails if GUI program: make new console try: win32console.FreeConsole() except Exception: pass try: win32console.AllocConsole() handle = open("CONOUT$", "w") argv = [util.longpath(sys.argv[0])] + sys.argv[1:] handle.write(" ".join(argv) + "\n\n") handle.flush() ConsoleWriter.handle = handle ConsoleWriter.realwrite = handle.write sys.stdin = open("CONIN$", "r") atexit.register(self.on_exe_exit) except Exception: try: win32console.FreeConsole() except Exception: pass ConsoleWriter.realwrite = self.stream.write ConsoleWriter.is_loaded = True
def write(self, text): """ Prints text to console window. GUI application will need to attach to the calling console, or launch a new console if not available. """ global window if not window and win32console: if not ConsoleWriter.is_loaded and not ConsoleWriter.handle: try: win32console.AttachConsole(-1) # pythonw.exe from console atexit.register(lambda: ConsoleWriter.realwrite("\n")) except Exception: pass # Okay if fails: can be python.exe from console try: handle = win32console.GetStdHandle( win32console.STD_OUTPUT_HANDLE) handle.WriteConsole("\n" + text) ConsoleWriter.handle = handle ConsoleWriter.realwrite = handle.WriteConsole except Exception: # Fails if GUI program: make new console try: win32console.FreeConsole() except Exception: pass try: win32console.AllocConsole() handle = open("CONOUT$", "w") argv = [util.longpath(sys.argv[0])] + sys.argv[1:] handle.write(" ".join(argv) + "\n\n" + text) handle.flush() ConsoleWriter.handle = handle ConsoleWriter.realwrite = handle.write sys.stdin = open("CONIN$", "r") exitfunc = lambda s: (handle.write(s), handle.flush(), raw_input()) atexit.register(exitfunc, "\nPress ENTER to exit.") except Exception: try: win32console.FreeConsole() except Exception: pass ConsoleWriter.realwrite = self.stream.write ConsoleWriter.is_loaded = True else: try: self.realwrite(text) self.flush() except Exception: self.stream.write(text) else: self.stream.write(text)
def run(self): self.init_console_input() self.console_output.SetConsoleActiveScreenBuffer() try: # self.window_resize_listener.daemon = True self.window_resize_listener.start() self._event_loop() finally: self.window_resize_listener.stop() self.console_output.Close() self.console_input.SetConsoleMode(self.default_conin_mode) if self.free_console: win32console.FreeConsole()
def __init__(self, parent_pid, lst_cmd_line): try: _ConsoleProcessBase.__init__(self, parent_pid) self.parent_pid = parent_pid self._start_parent_monitor() self.cmd_line = ' '.join(lst_cmd_line) self.echo = eval(os.environ.get('pyconsole_echo', 'True')) self.child_handle = None self.child_pid = None self.paused = False self.x_max = 0 self.y_max = 0 self.y_buffer_max = 0 self.y_last = 0 self.y_adjust = 0 self.y_current = 0 self.last_event_time = 0 self._initialize() self._initialize_events() win32console.FreeConsole() # alloc 2000 lines ? win32console.AllocConsole() self.con_stdout = win32console.GetStdHandle( win32console.STD_OUTPUT_HANDLE) self.con_stdin = win32console.GetStdHandle( win32console.STD_INPUT_HANDLE) win32console.SetConsoleTitle('console process pid:%s ppid:%s' % ( os.getpid(), parent_pid, )) # size = win32console.PyCOORDType (X=1000, Y=30) # self.con_stdout.SetConsoleScreenBufferSize (size) dct_info = self.con_stdout.GetConsoleScreenBufferInfo() self.y_buffer_max = dct_info['Size'].Y - 1 self.con_window = win32console.GetConsoleWindow().handle self.set_console_event_hook() self._start_paused_monitor() self._child_create() self._start_remote_input() self.message_pump() except: logging.exception('fatal error')
def SvcStop(self): self.running = False self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) try: pids = win32console.GetConsoleProcessList() except: pids = tuple() try: pid = self.process.pid if not pid in pids: win32console.AttachConsole(self.process.pid) win32console.GenerateConsoleCtrlEvent(win32console.CTRL_C_EVENT, self.process.pid) if not pid in pids: win32console.FreeConsole() except: servicemanager.LogErrorMsg(traceback.format_exc())
elif input_record.EventType==win32console.MOUSE_EVENT: if input_record.EventFlags==0: ## 0 indicates a button event if input_record.ButtonState!=0: ## exclude button releases pos=input_record.MousePosition # switch the foreground and background colors of the character that was clicked attr=newbuffer.ReadConsoleOutputAttribute(Length=1, ReadCoord=pos)[0] new_attr=attr if attr&win32console.FOREGROUND_BLUE: new_attr=(new_attr&~win32console.FOREGROUND_BLUE)|win32console.BACKGROUND_BLUE if attr&win32console.FOREGROUND_RED: new_attr=(new_attr&~win32console.FOREGROUND_RED)|win32console.BACKGROUND_RED if attr&win32console.FOREGROUND_GREEN: new_attr=(new_attr&~win32console.FOREGROUND_GREEN)|win32console.BACKGROUND_GREEN if attr&win32console.BACKGROUND_BLUE: new_attr=(new_attr&~win32console.BACKGROUND_BLUE)|win32console.FOREGROUND_BLUE if attr&win32console.BACKGROUND_RED: new_attr=(new_attr&~win32console.BACKGROUND_RED)|win32console.FOREGROUND_RED if attr&win32console.BACKGROUND_GREEN: new_attr=(new_attr&~win32console.BACKGROUND_GREEN)|win32console.FOREGROUND_GREEN newbuffer.WriteConsoleOutputAttribute((new_attr,),pos) else: newbuffer.WriteConsole(str(input_record)) time.sleep(0.1) stdout.SetConsoleActiveScreenBuffer() newbuffer.Close() if free_console: win32console.FreeConsole()
def closeCMD(self): WCS.FreeConsole() def displaySwitch(self, tipo=0):
def Main(): default_checksum = '0x3fff8' default_romsize = 256 parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) subparsers = parser.add_subparsers(metavar='mode',dest='mode') parser_read = subparsers.add_parser('read', help='read ecu to binfile') parser_read.add_argument('binfile', help="name of output binfile") parser_read.add_argument('--rom-size', default=-1, type=int, help="size of ecu rom in kilobytes") parser_read.add_argument('--offset', help="read offset", type=Hex()) parser_write = subparsers.add_parser('write', help='write ecu from binfile') parser_write.add_argument('binfile', help="name of input binfile") parser_write.add_argument('--rom-size', default=default_romsize, type=int, help="size of ecu rom in kilobytes") parser_write.add_argument('--fix-checksum', type=Hex(), help="hex location to fix binfile checksum") parser_write.add_argument('--offset', help="write offset", type=Hex()) parser_recover = subparsers.add_parser('recover', help='recover ecu from binfile') parser_recover.add_argument('binfile', help="name of input binfile") parser_recover.add_argument('--rom-size', default=default_romsize, type=int, help="size of ecu rom in kilobytes") parser_recover.add_argument('--fix-checksum', type=Hex(), help="hex location to fix binfile checksum") parser_recover.add_argument('--offset', help="write offset", type=Hex()) parser_checksum = subparsers.add_parser('checksum', help='validate binfile checksum') parser_checksum.add_argument('binfile', help="name of input binfile") parser_checksum.add_argument('--fix-checksum', type=Hex(), help="hex location to fix binfile checksum") parser_scan = subparsers.add_parser('scan', help='scan engine data') parser_upload = subparsers.add_parser('upload', help='upload unknown binfile') parser_upload.add_argument('binfile', help="name of input binfile") parser_faults = subparsers.add_parser('faults', help='read fault codes') parser_faults.add_argument('--clear', action='store_true', help="clear fault codes") parser_log = subparsers.add_parser('log', help='log engine data') parser_log.add_argument('--output', default=None, help="log output file") parser_recover = subparsers.add_parser('kline', help='kline tests') parser_recover.add_argument('--type', default=0, type=int, choices=[0,1,2,3], help="kline test type") db_grp = parser.add_argument_group('debugging options') db_grp.add_argument('--debug', action='store_true', help="turn on debugging output") db_grp.add_argument('--verbose', action='store_true', help="turn on verbose output") db_grp.add_argument('--noredirect', action='store_true', help="dont redirect stdout/stderr") db_grp.add_argument('--latency', type=int, help="latency timer") db_grp.add_argument('--baudrate', type=int, default=10400, help="baudrate") db_grp.add_argument('--skip-power-check', action='store_true', help="skip power check") args = parser.parse_args() known_bins = {} try: r = urllib.request.urlopen(binsdb_url) for l in r.readlines(): md5, file = l.decode("ascii").split() known_bins[md5] = os.path.split(file)[-1] except: pass if args.mode == None: import wx from gui import HondaECU_GUI if getattr(sys, 'frozen', False) and not (args.debug or args.verbose): sys.__stdout__.close() sys.__stderr__.close() sys.__stdin__.close() os.close(0) os.close(1) os.close(2) import win32console as con con.FreeConsole() app = wx.App() gui = HondaECU_GUI(args, __VERSION__, known_bins) app.MainLoop() else: from cmd import HondaECU_CmdLine HondaECU_CmdLine(args, __VERSION__, known_bins)