muchas veces cuando hago diseño o programación me apoyo en otros archivos o videos, el tema es que me gusta tener maximizada la aplicación principal que esté usando y me molesta tener que andar cambiando entre aplicaciones o usar alt tab, etc, así que pongo los visores o reproductores ontop, no todos traen esa función(notepad por ejemplo) y aunque la traigan hay que configurarla cada vez que quiero cambiar esa modalidad. Hay muchos programas de terceros,pero ¿cuál es el chiste?así que programé con python y pyqt5 un visor de procesos y la posibilidad de ponerlos ontop, es más que obvio que no se puede con todos los procesos, pero es simple y cumple su función.
Además usé otras bibliotecas y el uso de apis para que los más nuevos vean como puede hacerse.
Son dos códigos:1) El archivo .ui que es el entorno y 2)el archivo.pyw
código del ui:
Código
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>frmprincipal</class> <widget class="QDialog" name="frmprincipal"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>447</width> <height>307</height> </rect> </property> <property name="windowTitle"> <string>Procesos</string> </property> <widget class="QPushButton" name="btntop"> <property name="geometry"> <rect> <x>360</x> <y>30</y> <width>75</width> <height>23</height> </rect> </property> <property name="text"> <string>Arriba</string> </property> </widget> <widget class="QPushButton" name="btnsalir"> <property name="geometry"> <rect> <x>360</x> <y>280</y> <width>75</width> <height>23</height> </rect> </property> <property name="text"> <string>Salir</string> </property> </widget> <widget class="QLabel" name="lblnombre"> <property name="geometry"> <rect> <x>20</x> <y>10</y> <width>161</width> <height>16</height> </rect> </property> <property name="font"> <font> <pointsize>10</pointsize> </font> </property> <property name="text"> <string>Nombre del proceso</string> </property> </widget> <widget class="QListWidget" name="lstprocesos"> <property name="geometry"> <rect> <x>10</x> <y>30</y> <width>341</width> <height>271</height> </rect> </property> </widget> <widget class="QPushButton" name="btnactualizar"> <property name="geometry"> <rect> <x>360</x> <y>60</y> <width>75</width> <height>23</height> </rect> </property> <property name="text"> <string>Actualizar</string> </property> </widget> </widget> <resources/> <connections/> </ui>
código del pyw:
Código
Saludos
#-*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import QApplication,QDialog,QMessageBox from PyQt5 import uic import psutil from ctypes import c_void_p, windll import win32gui SWP_NOMOVE = 2 SWP_NOSIZE = 1 VEN_TOP = -1 VEN_NOTOP = -2 class Form(QDialog): def __init__(self): QDialog.__init__(self) uic.loadUi("principal.ui",self) self.btnactualizar.clicked.connect(self.TomarProcesos) self.btntop.clicked.connect(self.PonerTop) self.btnsalir.clicked.connect(self.Terminar) def Actualizar(self): for proc in psutil.process_iter(): try: procesos=proc.as_dict(attrs=['name']) except psutil.NoSuchProcess: pass else: nombre= procesos["name"] self.lstprocesos.addItem(nombre) def TomarProcesos(self): uno= self.lstprocesos.count() if uno !=0 : self.lstprocesos.clear() self.Actualizar() else: self.Actualizar() def PonerTop(self): item=self.lstprocesos.selectedItems() seleccionado=[] for x in range(len(item)): seleccionado.append(self.lstprocesos.selectedItems()[x].text()) proceso=''.join(seleccionado) proceso=proceso[:-4] ventana= win32gui.FindWindow(proceso,None) if ventana != 0: win32gui.SetForegroundWindow(ventana) windll.user32.SetWindowPos(ventana, VEN_TOP, 0, 0, 0, 0,SWP_NOMOVE | SWP_NOSIZE) def closeEvent(self,event): respuesta=QMessageBox.question(self,"Terminar","¿Desea Salir?",QMessageBox.Yes|QMessageBox.No) if respuesta == QMessageBox.Yes: event.accept() else: event.ignore() def Terminar(self): respuesta=QMessageBox.question(self,"Terminar","¿Desea Salir?",QMessageBox.Yes|QMessageBox.No) if respuesta == QMessageBox.Yes: exit() aplicacion=QApplication(sys.argv) ventana=Form() ventana.show() aplicacion.exec_()
Edito: Asunto modificado.