elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 224
1  Programación / .NET (C#, VB.NET, ASP) / Re: Tiene que haber otra forma de hacer este código. en: Hoy a las 01:57
Concuerdo con EdePC. La explicación está muy bien, pero desde el inicio parece lógico y claro que no es necesario poner un if con una condición sobre cuando acabar el while, si dicha condición se puede poner en la condición misma del while.

Creo que lo ideal sería que el programa no esté mirando a cada milisegundo si se tocó Enter o no, sino que quede detenido hasta que se presione Enter, pero eso parece imposible. Por ejemplo, el sistema de una linterna, supongo, no es que esté chequeando a cada milisegundo si se está presionando un botón o no, nada hace, pero cuando se apreta eso activa algo. Pero un programa creo que no funciona así...

Código
  1. while (Console.ReadKey(true).Key != ConsoleKey.Enter);

Console.ReadKey detiene la ejecución del programa y espera a que el usuario presione una tecla, solo cuando el usuario presiona la tecla esta se comprueba si es Enter, si no es, el bucle se vuelve a repetir, pero en todo momento siempre se queda pausado esperando que el usuario teclee algo.

Si otro fuera el caso si que hay que poner una pequeña pausa para no saturar al sistema con un bucle pesado.
2  Programación / .NET (C#, VB.NET, ASP) / Re: Tiene que haber otra forma de hacer este código. en: Ayer a las 16:20
Eres libre de usar la forma que veas por conveniente, pero a simple vista para tu caso sencillo donde quieres que no se salga del programa hasta que se presione Enter debería bastar con:

Código
  1. while (Console.ReadKey(true).Key != ConsoleKey.Enter);

Lo que dice Daniel es cierto cuando el  bucle es infinito por diseño: while(true), Así que ahí dependes del cuerpo del while para salir del bucle.

Si nos vamos a las entrañas de una aplicación en .net descompilándolo a IL tenemos:

Caso 1:
Código
  1. while (Console.ReadKey(true).Key != ConsoleKey.Enter);

Código
  1. .method private hidebysig static void  Main() cil managed
  2. {
  3.  .entrypoint
  4.  // Code size       29 (0x1d)
  5.  .maxstack  2
  6.  .locals init ([0] valuetype [mscorlib]System.ConsoleKeyInfo CS$0$0000,
  7.           [1] bool CS$4$0001)
  8.  IL_0000:  nop
  9.  IL_0001:  br.s       IL_0003
  10.  IL_0003:  ldc.i4.1
  11.  IL_0004:  call       valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey(bool)
  12.  IL_0009:  stloc.0
  13.  IL_000a:  ldloca.s   CS$0$0000
  14.  IL_000c:  call       instance valuetype [mscorlib]System.ConsoleKey [mscorlib]System.ConsoleKeyInfo::get_Key()
  15.  IL_0011:  ldc.i4.s   13
  16.  IL_0013:  ceq
  17.  IL_0015:  ldc.i4.0
  18.  IL_0016:  ceq
  19.  IL_0018:  stloc.1
  20.  IL_0019:  ldloc.1
  21.  IL_001a:  brtrue.s   IL_0003
  22.  IL_001c:  ret
  23. } // end of method Program::Main

Caso 2:

Código
  1. while (true) {
  2.  if (Console.ReadKey(true).Key == ConsoleKey.Enter) { break; }
  3. }

Código
  1. .method private hidebysig static void  Main() cil managed
  2. {
  3.  .entrypoint
  4.  // Code size       38 (0x26)
  5.  .maxstack  2
  6.  .locals init ([0] valuetype [mscorlib]System.ConsoleKeyInfo CS$0$0000,
  7.           [1] bool CS$4$0001)
  8.  IL_0000:  nop
  9.  IL_0001:  br.s       IL_0021
  10.  IL_0003:  nop
  11.  IL_0004:  ldc.i4.1
  12.  IL_0005:  call       valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey(bool)
  13.  IL_000a:  stloc.0
  14.  IL_000b:  ldloca.s   CS$0$0000
  15.  IL_000d:  call       instance valuetype [mscorlib]System.ConsoleKey [mscorlib]System.ConsoleKeyInfo::get_Key()
  16.  IL_0012:  ldc.i4.s   13
  17.  IL_0014:  ceq
  18.  IL_0016:  ldc.i4.0
  19.  IL_0017:  ceq
  20.  IL_0019:  stloc.1
  21.  IL_001a:  ldloc.1
  22.  IL_001b:  brtrue.s   IL_0020
  23.  IL_001d:  nop
  24.  IL_001e:  br.s       IL_0025
  25.  IL_0020:  nop
  26.  IL_0021:  ldc.i4.1
  27.  IL_0022:  stloc.1
  28.  IL_0023:  br.s       IL_0003
  29.  IL_0025:  ret
  30. } // end of method Program::Main
  31.  

- He resaltado la parte que es idéntica en ambos casos (los nop se ignoran porque no hacen nada (NOP = No Operation)), solo queda analizar que hace la parte no resaltada del segundo caso:

En la línea 21 del primer caso y 22 del segundo caso hacen el salto si la tecla presionada es Enter, es decir, eso debería de hacer que se salga del bucle

- En el primer caso salta a IL_0003 que es el inicio del bucle así que es muy sencillo entender que el bucle se volverá a ejecutar, si no salta, simplemente hace un RET para salir del bucle

- En el segundo caso salta a IL_0020 que es un NOP, este no hace nada, así que pasamos a la siguiente instrucción IL_0021,  IL_0022 y IL_0023 donde ponen en la memoria (stack) 1, luego recuperan ese 1, y finalmente saltan incondicionalmente (si o si porque no comprueban nada) a IL_003 que es el inicio del bucle.

-- Si la tecla no fue Enter ejecutamos IL_001d que nuevamente es un NOP así que pasamos a IL_001e el cual es un salto incondicional a IL_0025, ahora bien, en IL_0025 está el RET para salir del bucle

Conclusión: El caso 1 es exactamente igual al caso dos, el caso dos es lo mismo salvo que hace otras otras inútiles, como NOP, poner valores en el stack, recuperarlas pero no hace absolutamente nada con ellas, salta a otros sitios que tampoco hacen nada, es decir, solo tiene código extra de relleno.

Por cierto he utilizado ildasm.exe para abrir el .exe generado y obtener su código IL que es al final lo que interpreta .NET, en mi caso lo tengo en C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ildasm.exe

Si todo lo anterior resulta un poquito complicado de entender se puede usar una herramienta más amigable para obtener el código IL que va a interpretar finalmente .NET, por ejemplo ILSpy: https://github.com/icsharpcode/ILSpy para mi siguiente ejemplo usaré una versión más viejita: https://github.com/icsharpcode/ILSpy/releases/download/v7.2.1/ILSpy_binaries_7.2.1.6856.zip que es compatible con .NET 4.7, las nuevas versiones requieren .NET 8

Los siguientes casos son como interpreta ILSpy el .exe generado, para estos casos obviare el IL puro porque ya lo expliqué antes, solo me centraré a la decompilación C# que obtiene ILSpy:

Caso 1 por ILSpy:

Código
  1. // cprb.Program
  2. using System;
  3.  
  4. private static void Main()
  5. {
  6. while (Console.ReadKey(intercept: true).Key != ConsoleKey.Enter)
  7. {
  8. }
  9. }
  10.  

Caso 2 por ILSpy:

Código
  1. // cprb.Program
  2. using System;
  3.  
  4. private static void Main()
  5. {
  6. do
  7. {
  8. bool flag = true;
  9. }
  10. while (Console.ReadKey(intercept: true).Key != ConsoleKey.Enter);
  11. }
  12.  

- Bueno, es obvio que el primer caso se parece más al ejemplo que entrega Microsoft con las {} al final, aunque el código original del caso uno no los tiene y en su lugar le puse ;

- El segundo caso, se interpreta como un do while, PERO el cuerpo de este no hace nada, es decir, crea una variable flag que pone a true pero no hace nada con ella, luego está la condicional del do while que es exáctamente igual al Caso 1.

---
Como extra también pongo las instrucciones finales C# interpretado y IL para el aporte que acaba de por Aincrad:

Original:

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace cprb {
  7.  class Program {
  8.    static void Main() {
  9.      Menu();
  10.    }
  11.  
  12.    private static bool Menu() {
  13.      if (Console.ReadKey(true).Key == ConsoleKey.Enter) {
  14.        return true;
  15.      } else {
  16.        return Menu();
  17.      }
  18.    }
  19.  
  20.  }
  21. }
  22.  

Interpretación C# por ILSpy:

Código
  1. using System;
  2.  
  3. internal class Program
  4. {
  5. private static void Main()
  6. {
  7. Menu();
  8. }
  9.  
  10. private static bool Menu()
  11. {
  12. if (Console.ReadKey(intercept: true).Key == ConsoleKey.Enter)
  13. {
  14. return true;
  15. }
  16. return Menu();
  17. }
  18. }
  19.  

Decompilación IL por ILSpy:

Código
  1. .class private auto ansi beforefieldinit cprb.Program
  2. extends [mscorlib]System.Object
  3. {
  4. // Methods
  5. .method private hidebysig static
  6. void Main () cil managed
  7. {
  8. // Method begins at RVA 0x2050
  9. // Header size: 1
  10. // Code size: 8 (0x8)
  11. .maxstack 8
  12. .entrypoint
  13.  
  14. IL_0000: nop
  15. IL_0001: call bool cprb.Program::Menu()
  16. IL_0006: pop
  17. IL_0007: ret
  18. } // end of method Program::Main
  19.  
  20. .method private hidebysig static
  21. bool Menu () cil managed
  22. {
  23. // Method begins at RVA 0x205c
  24. // Header size: 12
  25. // Code size: 42 (0x2a)
  26. .maxstack 2
  27. .locals init (
  28. [0] bool,
  29. [1] valuetype [mscorlib]System.ConsoleKeyInfo,
  30. [2] bool
  31. )
  32.  
  33. IL_0000: nop
  34. IL_0001: ldc.i4.1
  35. IL_0002: call valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey(bool)
  36. IL_0007: stloc.1
  37. IL_0008: ldloca.s 1
  38. IL_000a: call instance valuetype [mscorlib]System.ConsoleKey [mscorlib]System.ConsoleKeyInfo::get_Key()
  39. IL_000f: ldc.i4.s 13
  40. IL_0011: ceq
  41. IL_0013: ldc.i4.0
  42. IL_0014: ceq
  43. IL_0016: stloc.2
  44. IL_0017: ldloc.2
  45. IL_0018: brtrue.s IL_001f
  46.  
  47. IL_001a: nop
  48. IL_001b: ldc.i4.1
  49. IL_001c: stloc.0
  50. IL_001d: br.s IL_0028
  51.  
  52. IL_001f: nop
  53. IL_0020: call bool cprb.Program::Menu()
  54. IL_0025: stloc.0
  55. IL_0026: br.s IL_0028
  56.  
  57. IL_0028: ldloc.0
  58. IL_0029: ret
  59. } // end of method Program::Menu
  60.  
  61. .method public hidebysig specialname rtspecialname
  62. instance void .ctor () cil managed
  63. {
  64. // Method begins at RVA 0x2092
  65. // Header size: 1
  66. // Code size: 7 (0x7)
  67. .maxstack 8
  68.  
  69. IL_0000: ldarg.0
  70. IL_0001: call instance void [mscorlib]System.Object::.ctor()
  71. IL_0006: ret
  72. } // end of method Program::.ctor
  73.  
  74. } // end of class cprb.Program

---
Una vez Tachikomaia preguntó sobre la optimización de su código o porque no le funcionaban bien algunas instrucciones que requieren redondeo, en su caso el usa Flash 5 y yo comenté que podría usar JPEXS Free Flash Decompiler https://github.com/jindrapetrik/jpexs-decompiler para obtener el código final interpretado y el P-Code de sus .swf, esto es lo mismo que usar ILSpy para los .exe de .NET, con estos programas se puede ver que es lo que se ejecuta finalmente
3  Programación / .NET (C#, VB.NET, ASP) / Re: Tiene que haber otra forma de hacer este código. en: Ayer a las 01:00
El While usa una condición, es decir,  ya tiene un "if" incluido, al menos yo no creo que haya problemas con eso.

Si lo que quieres es tal cual han entendido Daniel y Tachikomaia te debería bastar con:

Código
  1. while (Console.ReadKey(true).Key != ConsoleKey.Enter);

- Nótese que no lleva cuerpo ({...}) y directamente termina con ;
- Ese es el ejemplo que muestra la ayuda de mi viejo Visual Studio 2008

En la Ayuda actual https://learn.microsoft.com/es-es/dotnet/api/system.console.readkey?view=net-8.0 muestra como ejemplo:

Código
  1. while (Console.ReadKey(true).Key != ConsoleKey.Enter) {}

- De todas maneras también utiliza la forma que yo comenté un poquito más abajo, en otro ejemplo muestra:

Código
  1. do {
  2.  // ...
  3. } while (cki.Key != ConsoleKey.Escape);

Así que yo estimo que ambas formas están bien, yo me quedo con el ; al final en lugar de las dos llaves, porque siempre debe haber una u otra, sino interpretará como cuerpo del while la siguiente línea. Los siguientes ejemplo son válido y se usa cuando el cuerpo de la estructura (while, do while, for, if, etc) solo consta de una sola instrucción/línea:

Ejemplo 1:
Código
  1. while (Console.ReadKey(true).Key != ConsoleKey.Enter) Console.Write("No has tecleado Enter");
  2. Console.Write("Ya estás fuera del While");

- Lo anterior se ve bastante en if sencillos como si fuera el operador ternario, estas dos líneas hacen exactamente lo mismo:

Código
  1. if(x != 0.0) s = Math.Sin(x)/x; else s = 1.0;
  2.  
  3. s = x != 0.0 ? Math.Sin(x)/x : 1.0;

Ejemplo 2:
Código
  1. while (Console.ReadKey(true).Key != ConsoleKey.Enter)
  2.  Console.Write("No has tecleado Enter");
  3. Console.Write("Ya estás fuera del While");

- Lo anterior se ve bastante en for anidados como los típicos para aplicar fuerza bruta, recorrer arrays dentro de arrays,

Código
  1. public static void Main() {
  2.  
  3.  int tabla, numero;
  4.  
  5.  for (tabla = 1; tabla <= 5; tabla++)
  6.    for (numero = 1; numero <= 10; numero++)
  7.      Console.WriteLine("{0} por {1} es {2}", tabla, numero, tabla*numero);
  8. }
4  Programación / Scripting / Re: como hacer un vbs generador de batch en: 23 Julio 2024, 20:36 pm
Muy buenos los PDF.

¿Los hay también de PowerShell?

PowerShell dicen que es más potente que Bach y VBS.


Claro, pero siempre depende de lo que se vaya a hacer, algunas cosas son más simples de hacer en Batch, otras con VBS y otras PowerShell, igualmente se pueden crear interfaces gráficas con VBS + MSHTA y ahora con PowerShell.

PowerShell tiene detrás a .Net con sintaxis C# así que se le puede sacar bastante, su única pega es que tarda unos segundos más en su primer arranque mientras que Batch o VBS inician inmediatamente.

En español no hay mucho material PowerShell que yo haya visto y pueda recomendar, videos en YouTube si hay bastante, yo recomendaría ver unos cuantos videos y seguir este buen libro en español, pero ojo que está traducido, la mayoría está bien pero hay algunas cositas que no debieron traducir como gato (cat), tipo (type), pie (ft), florida (fl), eco (echo), claro (clear), etc, jeje uno se da cuenta y/o siempre se puede aclarar con la versión en Inglés:

PowerShell libro versión en español:
https://riptutorial.com/download/powershell-es.pdf

PowerShell libro versión en inglés:
https://riptutorial.com/download/powershell.pdf
5  Programación / .NET (C#, VB.NET, ASP) / Re: Barra de progreso tuyo propio en: 22 Julio 2024, 16:06 pm
Solo tienes que hacer tu plantilla y contar cuadritos (caracteres) ya que estás trabajando con una fuente monoespaciada

Plantilla:

Citar
0 %                     50 %                    100 %
┌────────────────────────┬────────────────────────┐
███████████████████████████████████████████████████

- Los porcentajes irían desde el 0 al 100, es decir 101 valores posibles
- La barra al 100% tiene 51 caracteres

Ahora en tu diseño pones un Label para las dos primeras líneas, luego pones otro Label más para la tercera línea (la barra), los cuadras para que se vea bien y listo, ya solo queda poner el código:



Código
  1. using System;
  2. using System.Drawing;
  3. using System.Threading;
  4. using System.Windows.Forms;
  5.  
  6. namespace BarraDeProgreso {
  7.  public partial class Form1 : Form {
  8.    public Form1() {
  9.      InitializeComponent();
  10.    }
  11.  
  12.    private void Form1_Load(object sender, EventArgs e) {
  13.      label_Barra_de_progreso.Text = ""; //Vaciar la barra
  14.    }
  15.  
  16.    private void button_Enter_Click(object sender, EventArgs e) {
  17.  
  18.      int valor = int.Parse(textBox1.Text); //Valor introducido
  19.      int valor_barra = valor * 51 / 101; //Cálculo del tamaño de la barra
  20.  
  21.      if (valor <= 15) {
  22.        label_Barra_de_progreso.ForeColor = Color.Red;
  23.      } else if (valor <= 40) {
  24.        label_Barra_de_progreso.ForeColor = Color.Yellow;
  25.      } else if (valor <= 100) {
  26.        label_Barra_de_progreso.ForeColor = Color.Green;
  27.      }
  28.  
  29.      label_Barra_de_progreso.Text = "";
  30.      for (int i = 0; i <= valor_barra; i++) {
  31.        label_Barra_de_progreso.Text += "@"; //Inserta un cuadrito más a la barra
  32.        label_Barra_de_progreso.Refresh(); //Necesario refrescar para ver el cambio
  33.        Thread.Sleep(10);
  34.      }
  35.  
  36.    }
  37.  
  38.  }
  39. }
  40.  

- Reemplaza el "@" de la línea 31 por "█", GeSHi se fastidia si se le ponen caracteres raros XD
- En la línea 19 estoy utilizando los valores 51 y 101 que calculé gracias a la plantilla

6  Programación / .NET (C#, VB.NET, ASP) / Re: Cambiar de valores al imprimir textos en: 22 Julio 2024, 01:40 am
 :xD pero te lo puse en mi mensaje anterior  :xD

Para tu último mensaje sería:

Código
  1. Console.WriteLine(resultadoPorcentaje.ToString("0.##") + " %.");
7  Programación / .NET (C#, VB.NET, ASP) / Re: Cambiar de valores al imprimir textos en: 20 Julio 2024, 20:04 pm
Saludos,

Simplemente debes formatear tu texto, me parece que ya en otro mensaje solucionaste algo similar con formato: https://foro.elhacker.net/net_c_vbnet_asp/ceros_a_la_derecha-t520083.0.html;msg2277390#msg2277390

Acá muestro una pequeña implementación que hice para hacer la prueba:

Código:
using System;

namespace ConsoleApplication1 {
  class Program {
    static void Main(string[] args) {

      float fAguaTotal = 47.12f;
      float fAgua = 21.205f;
      float fPorcentaje = fAgua * 100 / fAguaTotal;

      string sPorcentaje = fPorcentaje.ToString("0.##");
      string sAgua = fAgua.ToString("0.##");
      string sAguaTotal = fAguaTotal.ToString("0.##");
     
      int barra = (int)fPorcentaje * 51 / 100;

      Console.SetWindowSize(68, 21);
      Console.SetBufferSize(68, 21);
      Console.CursorVisible = false;

      Console.WriteLine();
      Console.WriteLine("  ╔═══════════════════════════════════════════════════════════════╗");
      Console.WriteLine("  ║                 *** TOTAL LITROS DE AGUA ***                  ║");
      Console.WriteLine("  ╠═══════════════════════════════════════════════════════════════╣");
      Console.WriteLine("  ║                                                               ║");
      Console.WriteLine("  ║      0 %                    50 %                     100 %    ║");
      Console.WriteLine("  ║      ┌────────────────────────┬────────────────────────┐      ║");
      Console.WriteLine("  ║                                                               ║");
      Console.WriteLine("  ║                                                               ║");
      Console.WriteLine("  ║ Porcentaje:                                                   ║");
      Console.WriteLine("  ║                                                               ║");
      Console.WriteLine("  ║ Litros de agua:                                               ║");
      Console.WriteLine("  ║                                                               ║");
      Console.WriteLine("  ║ Cantidad de Litros en total por 8 tubos: 326.73 / 376.99 L.   ║");
      Console.WriteLine("  ║                                                               ║");
      Console.WriteLine("  ║                                                               ║");
      Console.WriteLine("  ║                                                               ║");
      Console.WriteLine("  ║                                                               ║");
      Console.WriteLine("  ║ Radio: 0.1 m.                                                 ║");
      Console.WriteLine("  ║ Altura: 1.5 m.                                                ║");
          Console.Write("  ╚═══════════════════════════════════════════════════════════════╝");

      //Imprimir la Barra
      Console.CursorLeft = 9;
      Console.CursorTop = 7;
      Console.ForegroundColor = ConsoleColor.Green;
      Console.Write(new String('█', barra));
      Console.ForegroundColor = ConsoleColor.Gray;

      //Imprimir el porcentaje
      Console.CursorLeft = 16;
      Console.CursorTop = 9;
      Console.ForegroundColor = ConsoleColor.Cyan;
      Console.Write(sPorcentaje + " %.");

      //Imprimir el Agua
      Console.CursorLeft = 20;
      Console.CursorTop = 11;
      Console.Write(sAgua);
      Console.ForegroundColor = ConsoleColor.Gray;
      Console.Write(" / {0} L. total de un tubo.", sAguaTotal);

      Console.ReadKey();
    }
  }
}





En las líneas 11 al 13 estoy utilizando Format para obtener una String que me muestre al menos un número (0), luego los decimales pueden ser dos PERO se mostraran solo si no son cero (.##)

---
GeSHi me cambia los caracteres, optaré por ponerlo como código normal
8  Sistemas Operativos / Windows / Re: ¿Cómo funciona Alt+Tab en W7? ¿se puede configurar? en: 19 Julio 2024, 16:29 pm
No he usado mucho Windows 7 pero que yo sepa siempre funcionó igual, Alt + Tab debería poder intercambiarte entre las dos ventanas vistas más recientemente. Puedes presionar Alt + Tab pero sin soltar el Alt para seguir presionando Tab e ir a otra ventana, entonces esto lo puedes hacer para tener como dos últimas ventanas las que quieras y el simple Alt + Tab debería intercambiar entre ellas.

Usa Alt + Tab, Tab, ... para avanzar a la siguiente/s ventanas, usa Alt + Shift + Tab, Tab, ... para retroceder entre las ventanas.

Una cosa que recuerdo haber visto en Windows 7 es que tenía una animación para intercambiar ventanas que salía con Win + Tab, puede que refieras a esa porque ahí permite mantener esa ventana y elegir con tu ratón la que quieras, en Windows 8 y 10 también funciona de forma similar pero sin animación. De todas maneras te puede servir para ver una primera ventana y luego otra para que Alt + Tab intercambie entre ellas al ser las dos más recientes

A veces suele ser más efectivo ir a la ventana desea con el ratón, ya sea en el listado de ventanas de Win + Tab o dando click en la barra de tareas, yo por ejemplo siempre tengo mi barra de tareas desagrupada para que que se agrupen en cuadritos tener que ir a dicho cuadrito para desplegarlo y elegir la ventana que quiero, muy molestoso.



Incluso pueden servirte los escritorios virtuales o darle más filas a tu barra de tareas para tener todo al alcance de un click
9  Foros Generales / Dudas Generales / Re: Macromedia Flash Player 5.0 reproduce algunos archivos SWF y otros no en: 19 Julio 2024, 00:26 am
Tal como dice Songoku para reproducir la mayoría de archivos swf debes usar la última versión disponible:

Reproductor Flash Player 32.0.0.465 (normal)
https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flashplayer_32_sa.exe

Reproductor Flash Player 32.0.0.465 (para depurar)
https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flashplayer_32_sa_debug.exe

También con ello te proteges de fallos de seguridad hasta ese momento que puedan explotar los swf si no confías en ellos. Aunque si la seguridad no es tan importante lo ideal es usar la misma versión con la que se construyó el swf, si tienes un editor hexadecimal como HxD puedes abrir el swf y ver el cuarto byte que indica la versión de Flash que requiere el archivo, ya que hay versiones que usan características únicas de su versión que luego las quitaron, como por ejemplo la opción de crear y cualquier tipo de archivo con Flash 5, y/o el de ejecutar cualquier programa desde Flash 5

- Lo anterior puede ser una muy grave vulnerabilidad de seguridad o una funcionalidad espectacular como bien lo usa Tachikomaia para guardar y recuperar información, eso es única y exclusívamente de Flash Player 5

Citar
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000  43 57 53 0F 93 CD 53 00 78 9C DC BC 75 58 55 CD  CWS.“ÍS.xœÜ¼uXUÍ

- 0F es el hexadecimal de 15, es decir, ese swf fue creado para Flash Player 15, lo ideal es usar esa versión para aprovechar todas las funcionalidades que pueda usar ese swf, o usar una versión superior que tiene compatibilidad para reproducir archivos de versiones anteriores PERO puede que se hayan quitado algunas características y funcionalidades seguridad, obsolescencia o malas prácticas. Si quieres reproducir archivos swf creados con versiones superiores a tu reproductor obviamente será más complicado porque es casi seguro que no soporten las nuevas funcionalidades y versiones de ActionScript
10  Informática / Hardware / Re: Selector de voltaje de fuente de PC en: 16 Julio 2024, 16:38 pm
En conclusión, si la Fuente está en posición 2 y a ti te llega 220V la fuente explota XD, yo cuando veo ese interruptor entro en pánico y le echo pegamento porque varias veces ya me ha pasado de que algún gracioso lo mueve y la fuente se transforma en una bomba lacrimógena
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 224
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines