daily pastebin goal
35%
SHARE
TWEET

MonitorInfo

Skryde Aug 9th, 2016 315 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import sys
  2. import winreg
  3. import binascii
  4. from winreg import HKEY_LOCAL_MACHINE, ConnectRegistry
  5. from platform import node
  6.  
  7.  
  8. def show_help():
  9.     print()
  10.     print("   Uso: MonitorInfo [-l] [-r pcName] [-h]\n")
  11.     print("   Opciones:\n")
  12.     print("      -l           Se obtiene la informacion de los monitores")
  13.     print("                   del PC que ejecuta el programa.\n\n")
  14.     print("      -r pcName    Se obtiene la informacion de los monitores")
  15.     print("                   del PC indicado (pcName).\n\n")
  16.     print("      -h           Se muestra esta ayuda.\n")
  17.  
  18.  
  19. def check_parameters():
  20.     p = sys.argv[1:]
  21.     sub_key = 'SYSTEM\CurrentControlSet\Enum\DISPLAY'
  22.  
  23.     # Si no hay parametros, se muestra la ayuda del comando
  24.     if len(p) < 1:
  25.         show_help()
  26.         sys.exit()
  27.  
  28.     # Si existe un solo parametro
  29.     elif len(p) == 1:
  30.         if p[0] == "-l":
  31.             print("\nObteniendo los datos de los monitores del PC actual...\n")
  32.             try:
  33.                 key = winreg.OpenKey(HKEY_LOCAL_MACHINE, sub_key)
  34.                 tmp_k = winreg.OpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion")
  35.                 i = 0
  36.                 os_name = ""
  37.                 while True:
  38.                     if winreg.EnumValue(tmp_k, i)[0] == "ProductName":
  39.                         os_name = winreg.EnumValue(tmp_k, i)[1]
  40.                         break
  41.  
  42.                     i += 1
  43.             except OSError:
  44.                 print("Error al abrir el registro")
  45.                 sys.exit()
  46.  
  47.             return True, os_name, node(), key
  48.  
  49.         elif p[0] == "-r":
  50.             print("\n   [ERROR] Falta el nombre del PC")
  51.             show_help()
  52.             sys.exit()
  53.  
  54.         elif p[0] == "-h":
  55.             show_help()
  56.             sys.exit()
  57.  
  58.         else:
  59.             print("\n   [ERROR] Parametro desconocido")
  60.             show_help()
  61.             sys.exit()
  62.  
  63.     # Si existen mas de un parametro
  64.     else:
  65.         if p[0] == "-r":
  66.             print("\nObteniendo los datos de los monitores del PC " + p[1] + "...\n")
  67.             try:
  68.                 key = ConnectRegistry(r"\\" + p[1], HKEY_LOCAL_MACHINE)
  69.                 tmp_k = winreg.OpenKey(key, "SOFTWARE\Microsoft\Windows NT\CurrentVersion")
  70.                 i = 0
  71.                 os_name = ""
  72.                 while True:
  73.                     if winreg.EnumValue(tmp_k, i)[0] == "ProductName":
  74.                         os_name = winreg.EnumValue(tmp_k, i)[1]
  75.                         break
  76.  
  77.                     i += 1
  78.  
  79.                 key = winreg.OpenKey(key, sub_key)
  80.  
  81.             except FileNotFoundError:
  82.                 print("No se puede conectar al equipo", p[1])
  83.                 sys.exit()
  84.  
  85.             return True, os_name, p[1], key
  86.  
  87.         else:
  88.             print("\n   [ERROR] Parametro desconocido")
  89.             show_help()
  90.             sys.exit()
  91.  
  92.  
  93. if __name__ == '__main__':
  94.     res, os_version, pc_name, k = check_parameters()
  95.     if res:
  96.         # Si el parametro es inexistente, o cumple con las especificaciones
  97.  
  98.         acer = ["AL1716", "V193W"]
  99.  
  100.         i = 0
  101.         while True:
  102.             try:
  103.                 with winreg.OpenKey(k, winreg.EnumKey(k, i)) as sk:
  104.                     j = 0
  105.                     while True:
  106.                         try:
  107.                             with winreg.OpenKey(sk, winreg.EnumKey(sk, j)) as ssk:
  108.                                 l = 0
  109.                                 while True:
  110.                                     try:
  111.                                         if winreg.EnumKey(ssk, l) == "Control" or os_version == "Windows 10 Pro":
  112.                                             try:
  113.                                                 with winreg.OpenKey(ssk, "Device Parameters") as sssk:
  114.                                                     try:
  115.                                                         EDID = winreg.EnumValue(sssk, 0)[1]
  116.                                                         strEDID = str(EDID)
  117.                                                         modelo = strEDID[strEDID.index("\\x00\\x00\\x00\\xfc") + len("\\x00\\x00\\x00\\xfc\\x00"):].split("\\")[0]
  118.  
  119.                                                         if modelo in acer:
  120.                                                             binEDID = binascii.hexlify(EDID)
  121.                                                             try:
  122.                                                                 serie = "ET"
  123.                                                                 tmpSerie = strEDID[strEDID.index("\\x00\\x00\\x00\\xff") + len("\\x00\\x00\\x00\\xff\\x00"):].split("\\")[0]
  124.                                                                 serie += tmpSerie[:8]
  125.                                                                 serie += str(binEDID)[32:34]
  126.                                                                 serie += str(binEDID)[30:32]
  127.                                                                 serie += str(binEDID)[28:30]
  128.                                                                 serie += str(binEDID)[26:28]
  129.                                                                 serie += tmpSerie[8:]
  130.  
  131.                                                                 serie = serie.upper()
  132.  
  133.                                                             except:
  134.                                                                 modelo = "Not Found"
  135.                                                                 serie = "Not Found"
  136.  
  137.                                                         else:
  138.                                                             serie = strEDID[strEDID.index("\\x00\\x00\\x00\\xff") + len("\\x00\\x00\\x00\\xff\\x00"):].split("\\")[0]
  139.  
  140.                                                     except:
  141.                                                         modelo = "Not Found"
  142.                                                         serie = "Not Found"
  143.  
  144.                                                     print ("   Modelo:", modelo)
  145.                                                     print ("   Serie:", serie, "\n")
  146.  
  147.                                                     fo = open("InfoMonitor." + pc_name + ".txt", "a")
  148.                                                     fo.write(modelo + "\n")
  149.                                                     fo.write(serie + "\n\n")
  150.                                                     fo.close()
  151.  
  152.                                             except OSError:
  153.                                                 print ("Error")
  154.                                             break
  155.  
  156.                                         else:
  157.                                             l += 1
  158.  
  159.                                     except OSError:
  160.                                         break
  161.  
  162.                             j += 1
  163.                         except OSError:
  164.                             break
  165.                 i += 1
  166.             except OSError:
  167.                 break
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top