Skryde

MonitorInfo

Aug 9th, 2016
604
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

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×