Aporte en python(pone ontop algunos procesos)

Iniciado por tincopasan, 18 Junio 2016, 19:06 PM

0 Miembros y 1 Visitante están viendo este tema.

tincopasan

Hola:
        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) [Seleccionar]
<?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 (python) [Seleccionar]

#-*- 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_()
   

Saludos  


Edito: Asunto modificado.

engel lex

si es aporte lo mas apropiado es que el título fuera sobre lo que va (reglas del foro, los títulos deben ser descriptivos al tema )
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.