def start(self): win32gui.PumpMessages()
None) print "Python listening for WM_COPYDATA on hwnd = %d" % self.hwnd def OnCopyData(self, hwnd, msg, wparam, lparam): print "Copy data msg received! hwnd=%d msg=0x%x wparam=0x%x lparam=0x%x" % ( hwnd, msg, wparam, lparam) pCDS = ctypes.cast(lparam, PCOPYDATASTRUCT) if pCDS.contents.dwData != WM_DISPLAY_TEXT: print "Not WM_DISPLAY_TEXT dwData=%d cbData=0x%x lpData=0x%x" % ( pCDS.contents.dwData, pCDS.contents.cbData, pCDS.contents.lpData) return print "WM_DISPLAY_TEXT received cbData=0x%x lpData=0x%x" % ( pCDS.contents.cbData, pCDS.contents.lpData) msg = ctypes.string_at(pCDS.contents.lpData) recvCommand(msg) return 1 if len(sys.argv) == 1: l = Listener() win32gui.PumpMessages() else: if len(sys.argv) != 3: help() else: h = sys.argv[1] msg = sys.argv[2] sendCommand(h, msg)
def run(self): def wnd_proc(h_wnd, message, w_param, l_param): """Displays a transparent window with some graphic elements Displays a transparent window with some graphic elements :param h_wnd: an input argument :returns: nothing """ if message == win32con.WM_QUIT: # print("Closing the window overlay") win32gui.PostQuitMessage(0) return 0 if message == win32con.WM_PAINT: hdc, paint_struct = win32gui.BeginPaint(h_wnd) win32gui.SetGraphicsMode(hdc, win32con.GM_ADVANCED) win32gui.BringWindowToTop(h_wnd) for r in self.graphical_elements: if 'geometry' in r: geometry = r['geometry'] else: geometry = None if 'x' in r: x = r['x'] - self.x_min else: x = 0 if 'y' in r: y = r['y'] - self.y_min else: y = 0 if 'width' in r: width = r['width'] else: width = 100 if 'height' in r: height = r['height'] else: height = 100 if 'xyrgb_array' in r: xyrgb_array = r['xyrgb_array'] else: xyrgb_array = ((15, 15, 255, 0, 0), (15, 45, 0, 255, 0), (45, 30, 0, 0, 255)) if 'color' in r: color_r = r['color'][0] color_g = r['color'][1] color_b = r['color'][2] else: color_r = 255 color_g = 0 color_b = 0 if 'thickness' in r: thickness = r['thickness'] else: thickness = 0 if 'angle' in r: angle = r['angle'] else: angle = 0 if 'geometry' in r and r['geometry'] is Shape.triangle: vertices = () for xyrgb in xyrgb_array: vertices = vertices + ( { 'x': int(round(xyrgb[0])) - self.x_min, 'y': int(round(xyrgb[1])) - self.y_min, 'Red': xyrgb[2] * 256, 'Green': xyrgb[3] * 256, 'Blue': xyrgb[4] * 256, 'Alpha': 0 }, ) mesh = ((0, 1, 2), ) win32gui.GradientFill(hdc, vertices, mesh, win32con.GRADIENT_FILL_TRIANGLE) if 'brush_color' in r: brush_color_r = r['brush_color'][0] brush_color_g = r['brush_color'][1] brush_color_b = r['brush_color'][2] else: brush_color_r = 255 brush_color_g = 255 brush_color_b = 255 if thickness == 0: color_r = brush_color_r color_g = brush_color_g color_b = brush_color_b if 'font_size' in r: font_size = r['font_size'] else: font_size = 18 if 'font_name' in r: font_name = r['font_name'] else: font_name = "Arial" my_brush = None if 'brush' in r and width > 1 and height > 1: brush = r['brush'] brush_color = win32api.RGB(brush_color_r, brush_color_g, brush_color_b) if brush is Brush.solid: my_brush = win32gui.CreateSolidBrush(brush_color) elif brush is Brush.b_diagonal: my_brush = win32gui.CreateHatchBrush( win32con.HS_BDIAGONAL, brush_color) elif brush is Brush.cross: my_brush = win32gui.CreateHatchBrush( win32con.HS_CROSS, brush_color) elif brush is Brush.diag_cross: my_brush = win32gui.CreateHatchBrush( win32con.HS_DIAGCROSS, brush_color) elif brush is Brush.f_diagonal: my_brush = win32gui.CreateHatchBrush( win32con.HS_FDIAGONAL, brush_color) elif brush is Brush.horizontal: my_brush = win32gui.CreateHatchBrush( win32con.HS_HORIZONTAL, brush_color) elif brush is Brush.vertical: my_brush = win32gui.CreateHatchBrush( win32con.HS_VERTICAL, brush_color) old_brush = win32gui.SelectObject(hdc, my_brush) pen = win32gui.CreatePen( win32con.PS_GEOMETRIC, thickness, win32api.RGB(color_r, color_g, color_b)) old_pen = win32gui.SelectObject(hdc, pen) if 'center_of_rotation' in r: center_of_rotation_x = r['center_of_rotation'][0] center_of_rotation_y = r['center_of_rotation'][1] else: center_of_rotation_x = 0 center_of_rotation_y = 0 if angle != 0: r_angle = angle * (math.pi / 180) Py_XFORM = win32gui.GetWorldTransform(hdc) win32gui.SetWorldTransform( hdc, { 'M11': math.cos(r_angle), 'M12': math.sin(r_angle), 'M21': math.sin(r_angle) * -1, 'M22': math.cos(r_angle), 'Dx': x, 'Dy': y }) x, y = -center_of_rotation_x, -center_of_rotation_y if 'text_format' in r: text_format = eval(r['text_format']) else: text_format = win32con.DT_CENTER | win32con.DT_SINGLELINE | win32con.DT_VCENTER if 'geometry' in r: if r['geometry'] is Shape.rectangle: win32gui.Rectangle(hdc, int(round(x)), int(round(y)), int(round(x + width)), int(round(y + height))) elif r['geometry'] is Shape.ellipse: win32gui.Ellipse(hdc, int(round(x)), int(round(y)), int(round(x + width)), int(round(y + height))) elif r['geometry'] is Shape.arrow: a = thickness t = ((x - int(a * 1.4), y), (x - a * 4, y + a * 3), (x, y), (x - a * 4, y - a * 3), (x - int(a * 1.4), y), (x - a * 9, y)) win32gui.Polyline(hdc, t) elif r['geometry'] is Shape.image: hicon = r['hicon'] win32gui.DrawIconEx(hdc, x, y, hicon, 0, 0, 0, None, 0x0003) elif r['geometry'] is Shape.triangle and thickness > 0: t = () for xyrgb in xyrgb_array: t = t + ((int(round( xyrgb[0])), +int(round(xyrgb[1]))), ) t = t + ((int(round(xyrgb_array[0][0])), int(round(xyrgb_array[0][1]))), ) win32gui.Polyline(hdc, t) if angle != 0: win32gui.SetWorldTransform(hdc, Py_XFORM) win32gui.SelectObject(hdc, old_pen) if 'brush' in r and width > 1 and height > 1: win32gui.SelectObject(hdc, old_brush) if 'text' in r: text = r['text'] lf = win32gui.LOGFONT() lf.lfFaceName = font_name lf.lfHeight = font_size lf.lfWeight = win32con.FW_NORMAL lf.lfQuality = win32con.ANTIALIASED_QUALITY hf = win32gui.CreateFontIndirect(lf) old_font = win32gui.SelectObject(hdc, hf) if 'text_color' in r: text_color_r = r['text_color'][0] text_color_g = r['text_color'][1] text_color_b = r['text_color'][2] else: text_color_r = 0 text_color_g = 0 text_color_b = 0 win32gui.SetTextColor( hdc, win32api.RGB(text_color_r, text_color_g, text_color_b)) if 'text_bg_color' in r: text_bg_color_r = r['text_bg_color'][0] text_bg_color_g = r['text_bg_color'][1] text_bg_color_b = r['text_bg_color'][2] else: text_bg_color_r = brush_color_r text_bg_color_g = brush_color_g text_bg_color_b = brush_color_b win32gui.SetBkMode(hdc, win32con.TRANSPARENT) win32gui.SetBkColor( hdc, win32api.RGB(text_bg_color_r, text_bg_color_g, text_bg_color_b)) tuple_r = tuple([ int(round(x)), int(round(y)), int(round(x + width)), int(round(y + height)) ]) win32gui.DrawTextW(hdc, text, -1, tuple_r, text_format) win32gui.SelectObject(hdc, old_font) win32gui.EndPaint(h_wnd, paint_struct) return 0 else: return win32gui.DefWindowProc(h_wnd, message, w_param, l_param) h_instance = win32api.GetModuleHandle() wnd_class = win32gui.WNDCLASS() wnd_class.style = win32con.CS_HREDRAW | win32con.CS_VREDRAW wnd_class.lpfnWndProc = wnd_proc wnd_class.hInstance = h_instance wnd_class.hCursor = win32gui.LoadCursor(None, win32con.IDC_ARROW) wnd_class.hbrBackground = win32gui.GetStockObject(win32con.WHITE_BRUSH) wnd_class.lpszClassName = self.class_name wnd_class_atom = win32gui.RegisterClass(wnd_class) ex_style = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_NOACTIVATE | \ win32con.WS_EX_TOPMOST | win32con.WS_EX_TRANSPARENT style = win32con.WS_DISABLED | win32con.WS_POPUP | win32con.WS_VISIBLE self.h_window = win32gui.CreateWindowEx( ex_style, wnd_class_atom, 'OverlayWindow', style, win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN), # x win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN), # y win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN), # width win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN), # height None, # hWndParent None, # hMenu h_instance, None # lpParam ) monitors = win32api.EnumDisplayMonitors() self.x_min = min([ win32api.GetMonitorInfo(monitor[0])['Work'][0] for monitor in monitors ]) self.y_min = min([ win32api.GetMonitorInfo(monitor[0])['Work'][1] for monitor in monitors ]) win32gui.SetLayeredWindowAttributes( self.h_window, 0x00ffffff, self.transparency, win32con.LWA_COLORKEY | win32con.LWA_ALPHA) win32gui.SetWindowPos( self.h_window, win32con.HWND_TOPMOST, 0, 0, 0, 0, win32con.SWP_NOACTIVATE | win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW) if self.period > 0: self.auto_refresh() #print("PumpMessages start") win32gui.PumpMessages()
def complete(self): """Flag the progress as being complete - closes the dialog.""" win32gui.DestroyWindow(self.window_handle) win32gui.PumpMessages()
def listen(self): """Run the tray program.""" self.logger.info('Started listening for callbacks...') win32gui.PumpMessages()
def winmain(): w=MainWindow() win32gui.PumpMessages()
elif message == con.WM_CLOSE: gui.DestroyWindow(hWnd) elif message == con.WM_DESTROY: gui.PostQuitMessage(0) elif message == con.WM_QUERYENDSESSION: return True def OnSession(self, event, sessionID): print("event 0x%x on session %d" % (event, sessionID)) #if sessionID == ts.ProcessIdToSessionId(os.getpid()): # Since you already have a Python script, you can use it here directly. # Otherwise, replace this with something involving subprocess.Popen() #raise NotImplemented if WTS_SESSION_LOCK == event: self.sessionLock(sessionID) elif WTS_SESSION_UNLOCK == event: self.sessionUnlock(sessionID) def sessionLock(self, sessionID): print("Заблокировал экран") def sessionUnlock(self, sessionID): print("Разблокировал экран") Monitor() gui.PumpMessages()
def main(): """Invoke GUI application.""" logging.basicConfig(level=logging.INFO) dll = BeamOptikDLL() dll.GetInterfaceInstance() win32gui.PumpMessages()
def main_thread(self): win32gui.PumpMessages() # vim:set tabstop=4 shiftwidth=4 expandtab:
def run_notify(): global w w = Notification () print "pre PumpMessages" win32gui.PumpMessages () print "post PumpMessages"
def DemoCreateWindow(): w = DemoWindow() w.CreateWindow() # PumpMessages runs until PostQuitMessage() is called by someone. win32gui.PumpMessages()
def msgMainLoop(self): win32gui.PumpMessages()
def show_agent_status(window, gui): import win32api import win32con import win32gui import win32ts import win32ui class AgentStatus: def __init__(self, agent_status, salt_status, check_status, mesh_status): self.agent_status = agent_status self.salt_status = salt_status self.check_status = check_status self.mesh_status = mesh_status self.icon = os.path.join(os.getcwd(), "onit.ico") win32gui.InitCommonControls() self.hinst = win32api.GetModuleHandle(None) className = "AgentStatus" message_map = { win32con.WM_DESTROY: self.OnDestroy, } wc = win32gui.WNDCLASS() wc.style = win32con.CS_HREDRAW | win32con.CS_VREDRAW try: wc.hIcon = win32gui.LoadImage( self.hinst, self.icon, win32con.IMAGE_ICON, 0, 0, win32con.LR_LOADFROMFILE, ) except Exception: pass wc.lpfnWndProc = message_map wc.lpszClassName = className win32gui.RegisterClass(wc) style = win32con.WS_OVERLAPPEDWINDOW self.hwnd = win32gui.CreateWindow( className, "Tactical RMM", style, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, 400, 300, 0, 0, self.hinst, None, ) win32gui.ShowWindow(self.hwnd, win32con.SW_SHOW) hDC, paintStruct = win32gui.BeginPaint(self.hwnd) rect = win32gui.GetClientRect(self.hwnd) win32gui.DrawText( hDC, f"Agent: {self.agent_status}", -1, (0, 0, 384, 201), win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER, ) win32gui.DrawText( hDC, f"Check Runner: {self.check_status}", -1, (0, 0, 384, 241), win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER, ) win32gui.DrawText( hDC, f"Salt Minion: {self.salt_status}", -1, (0, 0, 384, 281), win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER, ) win32gui.DrawText( hDC, f"Mesh Agent: {self.mesh_status}", -1, (0, 0, 384, 321), win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER, ) win32gui.EndPaint(self.hwnd, paintStruct) win32gui.UpdateWindow(self.hwnd) def OnDestroy(self, hwnd, message, wparam, lparam): win32gui.PostQuitMessage(0) return True try: agent_status = psutil.win_service_get("tacticalagent").status() except psutil.NoSuchProcess: agent_status = "Not Installed" try: salt_status = psutil.win_service_get("salt-minion").status() except psutil.NoSuchProcess: salt_status = "Not Installed" try: check_status = psutil.win_service_get("checkrunner").status() except psutil.NoSuchProcess: check_status = "Not Installed" try: mesh_status = psutil.win_service_get("Mesh Agent").status() except psutil.NoSuchProcess: mesh_status = "Not Installed" if gui: win32gui.ShowWindow(window, win32con.SW_HIDE) w = AgentStatus(agent_status, salt_status, check_status, mesh_status) win32gui.PumpMessages() win32gui.CloseWindow(window) else: print("Agent: ", agent_status) print("Check Runner: ", check_status) print("Salt Minion: ", salt_status) print("Mesh Agent: ", mesh_status)
def run(self): self.logger.info('run') win32gui.PumpMessages() return
def run_forever(self): win32gui.PumpMessages()