Advertisement
Skryde

MonitorInfo

Aug 9th, 2016
896
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
Advertisement
RAW Paste Data Copied
Advertisement