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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6 7
11  Media / Multimedia / Re: Firestick, mirror, teclado y power en: 27 Diciembre 2021, 21:35 pm
Lo que has de usar es 'apps2fire': https://play.google.com/store/apps/details?id=mobi.koni.appstofiretv

Busca algún tutorial de esa app. Yo la he usado para transferir todo tipo de apps descargadas del Googleplay, al FireTV. Incluso emuladores de videojuegos como la app DIG.

Pero ten en cuenta que no todas las apps van a ser compatibles con el sistema operativo del FireTV (Fire OS), por ejemplo yo instalé la app de DMax ( https://www.discoveryplus.com/es ) que no está disponible para FireTV, y la pude instalar con el 'apps2fire' pero la interfaz de la app no funciona nada bien, ni con teclado inalámbrico, es un horror intentar usarla. Así que si una app no te va bien puede que simplemente no sea del todo compatible, ya que para empezar no está pensada para ser instalada en el Fire OS.

12  Programación / .NET (C#, VB.NET, ASP) / Re: Ayuda como integrar *.py en C# en: 27 Diciembre 2021, 02:24 am
La idea es integrar un formulario de Python dentro de otro formulario de C#, es decir, he creado un formulario de Python con extensión *.py y otro formulario de C# con extensión *.cs, quiero insertar el formulario de Python dentro de un contenedor tipo panel alojado en el formulario de C# y que se puedan entender entre ellos, que la información captura en el formulario de Python la pueda tratar el formulario de C#.

Hasta donde yo se, diría que no existe ninguna herramienta, ni integrada ni de terceros, que permita establecer ese tipo de integración en Visual Studio para alojar algo reconocible como "form de Python" en un control o form de .NET Framework. Creo que eso es lo que estás preguntando, ¿verdad?, algo así como lo haríamos para interoperar entre controles de WinForms y WPF mediante la clase / control ElementHost ( https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.integration.elementhost ) como en los siguientes ejemplos:

 - Hosting a WPF Composite Control in Windows Forms
 - Hosting a Windows Forms Control in WPF

Entonces, e insisto, hasta donde yo se, lo máximo a integración en interoperabilidad entre Python y .NET, y para Visual Studio, sería IronPython ( https://ironpython.net/ ).

Aquí tienes un ejemplo de como iniciarse con IronPython:


Por cierto, he leido que, al usar IronPython para crear una aplicación de Windows Forms, la caja de herramientas de controles y el diseñador de forms en Windows Forms no aparecen disponibles (es decir, todo el formulario lo deberías diseñar mediante Python), pero en la tecnología WPF si que está disponible, así que quizás sería más conveniente crear una aplicación WPF con IronPython. Al menos eso dicen aquí: https://developercommunity.visualstudio.com/t/usar-windows-forms-con-python/905441

Aparte de eso, y por si no lo sabías, esta extensión para Visual Studio quizás te podría servir de ayuda para mejorar la experiencia en lo relacionado al análisis y desarrollo de código de Python en Visual Studio:

- Python Tools for Visual Studio (PTVS)

PD: las características de esa extensión ya vienen integradas como parte del conjunto de paquetes 'Python development' y 'Data science and analytical applications' en el instalador de Visual Studio.

Espero haberte ayudado.
13  Programación / .NET (C#, VB.NET, ASP) / Re: ¿Cómo enviar más de 255 letras? en: 27 Diciembre 2021, 00:04 am
La función Console.ReadLine() tiene implícito ese límite de 256 caracteres (254 sin CarriageReturn + LineFeed). Ese es el límite del tamaño del búfer del que hace uso al adquirir el flujo de entrada estándar o std-in especificado en la función Console.OpenStandardInput.

Puedes incrementar dicho límite a 32.767(-2) caracteres de la siguiente manera:
Código
  1. Console.SetIn(new StreamReader(Console.OpenStandardInput(Int16.MaxValue), Console.InputEncoding, false, Int16.MaxValue));

O a 65.535(-2) caracteres si lo prefieres:
Código
  1. Console.SetIn(new StreamReader(Console.OpenStandardInput(UInt16.MaxValue), Console.InputEncoding, false, UInt16.MaxValue));

El límite máximo teórico es Int32.MaxValue ( Maximum length of byte[]? + <gcAllowVeryLargeObjects> element ), pero llegar a esos extremos para este tipo de escenario lo veo totalmente innecesario.

La llamada al método Console.SetIn() puedes acomodarlo de forma reutilizable como en el siguiente ejemplo de clase, y simplemente llamar al método SetInBufferSize() cuando sea necesario:

Código
  1. Public NotInheritable Class ConsoleUtil
  2.  
  3. #Region " Constructors "
  4.  
  5.    ''' ----------------------------------------------------------------------------------------------------
  6.    ''' <summary>
  7.    ''' Prevents a default instance of the <see cref="ConsoleUtil"/> class from being created.
  8.    ''' </summary>
  9.    ''' ----------------------------------------------------------------------------------------------------
  10.    <DebuggerNonUserCode>
  11.    Private Sub New()
  12.    End Sub
  13.  
  14. #End Region
  15.  
  16. #Region " Private Members "
  17.  
  18.    ''' <summary>
  19.    ''' The underlying standard input stream (stdin) used for <see cref="ConsoleUtil.SetInBufferSize"/> method.
  20.    ''' </summary>
  21.    Private Shared stdIn As StreamReader
  22.  
  23. #End Region
  24.  
  25. #Region " Public Methods "
  26.  
  27.    ''' ----------------------------------------------------------------------------------------------------
  28.    ''' <summary>
  29.    ''' Sets the buffer size of the standard input stream (std-in)
  30.    ''' acquired from the <see cref="System.Console.OpenStandardInput"/> function.
  31.    ''' <para></para>
  32.    ''' So the <see cref="Console.ReadLine()"/> function can benefit from a larger buffer size.
  33.    ''' <para></para>
  34.    ''' Default buffer size is 256.
  35.    ''' </summary>
  36.    ''' ----------------------------------------------------------------------------------------------------
  37.    ''' <param name="bufferSize">
  38.    ''' Minimum value is: 256.
  39.    ''' <para></para>
  40.    ''' Note that the last two characters in the buffer are reserved for
  41.    ''' <see cref="ControlChars.Cr"/> + <see cref="ControlChars.Lf"/>.
  42.    ''' </param>
  43.    ''' ----------------------------------------------------------------------------------------------------
  44.    <DebuggerStepThrough>
  45.    Public Shared Sub SetInBufferSize(bufferSize As Integer)
  46.        If bufferSize < 256 Then
  47.            Throw New ArgumentException(NameOf(bufferSize), message:="Value must be equal or greater than 256.")
  48.        End If
  49.  
  50.        ConsoleUtil.stdIn?.Close()
  51.        ConsoleUtil.stdIn = New StreamReader(Console.OpenStandardInput(bufferSize), Console.InputEncoding, False, bufferSize)
  52.        Console.SetIn(ConsoleUtil.stdIn)
  53.    End Sub
  54.  
  55. #End Region
  56.  
  57. End Class
  58.  
  59. #End Region

Traducción a C#:
Código
  1. public sealed class ConsoleUtil {
  2.  
  3. #region  Constructors
  4.  
  5. /// ----------------------------------------------------------------------------------------------------
  6. /// <summary>
  7. /// Prevents a default instance of the <see cref="ConsoleUtil"/> class from being created.
  8. /// </summary>
  9. /// ----------------------------------------------------------------------------------------------------
  10. [DebuggerNonUserCode]
  11. private ConsoleUtil() { }
  12.  
  13. #endregion
  14.  
  15. #region  Private Members
  16.  
  17. /// <summary>
  18. /// The underlying standard input stream (stdin) used for <see cref="ConsoleUtil.SetInputBufferSize"/> method.
  19. /// </summary>
  20. private static StreamReader stdIn;
  21.  
  22. #endregion
  23.  
  24. #region  Public Methods
  25.  
  26. /// ----------------------------------------------------------------------------------------------------
  27. /// <summary>
  28. /// Sets the buffer size of the standard input stream (std-in)
  29. /// acquired from the <see cref="System.Console.OpenStandardInput"/> function.
  30. /// <para></para>
  31. /// So the <see cref="Console.ReadLine()"/> function can benefit from a larger buffer size.
  32. /// <para></para>
  33. /// Default buffer size is 256.
  34. /// </summary>
  35. /// ----------------------------------------------------------------------------------------------------
  36. /// <param name="bufferSize">
  37. /// Minimum value is: 256.
  38. /// <para></para>
  39. /// Note that the last two characters in the buffer are reserved for
  40. /// <see cref="ControlChars.Cr"/> + <see cref="ControlChars.Lf"/>.
  41. /// </param>
  42. /// ----------------------------------------------------------------------------------------------------
  43. [DebuggerStepThrough]
  44. public static void SetInBufferSize(int bufferSize) {
  45. if (bufferSize < 256) {
  46. throw new ArgumentException(nameof(bufferSize), message:"Value must be equal or greater than 256.");
  47. }
  48.  
  49. ConsoleUtil.stdIn?.Close();
  50. ConsoleUtil.stdIn = new StreamReader(Console.OpenStandardInput(bufferSize), Console.InputEncoding, false, bufferSize);
  51. Console.SetIn(ConsoleUtil.stdIn);
  52. }
  53.  
  54. #endregion
  55.  
  56. }
  57.  
  58. #endregion
  59.  

----------------------

Como alternativa a lo de arriba, en caso de que prefieras no reemplazar el flujo de entrada estándar, puedes definir una función como esta de aquí abajo, que puedes añadir a la clase de arriba, para que sirva como reemplazo de la función Console.ReadLine().

VB.NET:
Código
  1. ''' ----------------------------------------------------------------------------------------------------
  2. ''' <summary>
  3. ''' Reads the next line of characters from the standard input stream.
  4. ''' <para></para>
  5. ''' This function attempts to be a improved replacement for <see cref="System.Console.ReadLine()"/> function.
  6. ''' </summary>
  7. ''' ----------------------------------------------------------------------------------------------------
  8. ''' <param name="bufferSize">
  9. ''' The character limit to read in the next line of characters from the standard input stream.
  10. ''' <para></para>
  11. ''' Minimum value is: 256.
  12. ''' <para></para>
  13. ''' Default value is: <see cref="Short.MaxValue"/> (32767).
  14. ''' <para></para>
  15. ''' Note that the last two characters in the buffer are reserved for
  16. ''' <see cref="ControlChars.Cr"/> + <see cref="ControlChars.Lf"/>.
  17. ''' </param>
  18. ''' ----------------------------------------------------------------------------------------------------
  19. ''' <returns>
  20. ''' The next line of characters from the input stream,
  21. ''' or <see langword="Nothing"/> if no more lines are available.
  22. ''' </returns>
  23. ''' ----------------------------------------------------------------------------------------------------
  24. <DebuggerStepThrough>
  25. Public Shared Function ReadLine(Optional bufferSize As Integer = Short.MaxValue) As String
  26.    If bufferSize < 256 Then
  27.        Throw New ArgumentException(NameOf(bufferSize), message:="Value must be equal or greater than 256.")
  28.    End If
  29.  
  30.    Dim inputStream As Stream = Console.OpenStandardInput(bufferSize)
  31.    Dim bytes(bufferSize - 1) As Byte
  32.    Dim outputLength As Integer = inputStream.Read(bytes, 0, bufferSize)
  33.    Dim chars As Char() = Console.InputEncoding.GetChars(bytes, 0, outputLength)
  34.  
  35.    Return New String(chars).TrimEnd({ControlChars.Cr, ControlChars.Lf})
  36. End Function

Traducción a C#
Código
  1. /// ----------------------------------------------------------------------------------------------------
  2. /// <summary>
  3. /// Reads the next line of characters from the standard input stream.
  4. /// <para></para>
  5. /// This function attempts to be a improved replacement for <see cref="System.Console.ReadLine()"/> function.
  6. /// </summary>
  7. /// ----------------------------------------------------------------------------------------------------
  8. /// <param name="bufferSize">
  9. /// The character limit to read in the next line of characters from the standard input stream.
  10. /// <para></para>
  11. /// Minimum value is: 256.
  12. /// <para></para>
  13. /// Default value is: <see cref="Short.MaxValue"/> (32767).
  14. /// <para></para>
  15. /// Note that the last two characters in the buffer are reserved for
  16. /// <see cref="ControlChars.Cr"/> + <see cref="ControlChars.Lf"/>.
  17. /// </param>
  18. /// ----------------------------------------------------------------------------------------------------
  19. /// <returns>
  20. /// The next line of characters from the input stream,
  21. /// or <see langword="Nothing"/> if no more lines are available.
  22. /// </returns>
  23. /// ----------------------------------------------------------------------------------------------------
  24. [DebuggerStepThrough]
  25. public static string ReadLine(int bufferSize = short.MaxValue) {
  26. if (bufferSize < 256) {
  27. throw new ArgumentException(nameof(bufferSize), message:"Value must be equal or greater than 256.");
  28. }
  29.  
  30. Stream inputStream = Console.OpenStandardInput(bufferSize);
  31. byte[] bytes = new byte[bufferSize];
  32. int outputLength = inputStream.Read(bytes, 0, bufferSize);
  33. char[] chars = Console.InputEncoding.GetChars(bytes, 0, outputLength);
  34.  
  35. return (new string(chars)).TrimEnd(new[] {'\r', '\n'});
  36. }

Modo de empleo en C#:
Código
  1. // Copy very long string to clipboard.
  2. string longString = new string('0', short.MaxValue);
  3. Clipboard.SetText(longString);
  4.  
  5. // Manually paste the string here...
  6. string line = ConsoleUtil.ReadLine(bufferSize:ushort.MaxValue);
  7.  
  8. Console.WriteLine();
  9. Console.WriteLine($"String Length: {line.Length}");
  10.  
  11. Console.WriteLine("Press any key to exit...");
  12. Console.ReadKey();
  13.  
  14. Environment.Exit(0);
14  Foros Generales / Dudas Generales / Re: ¿Cómo copiar la letra de una canción en la página lirik.biz? en: 26 Diciembre 2021, 22:27 pm
Ya hay extensiones para el navegador que cumplen con esta demanda de forma óptima, sin que el usuario tenga que idear scripts ni toquetear javascript ni trastear con detección OCR ni historias semejantes.

Absolute Enable Right Click & Copy:
https://addons.mozilla.org/en-US/firefox/addon/absolute-enable-right-click/
Citar
★ Features :
→ Remove Copy Text Protection On All Website
→ Force Enable Right Click Button
→ Allow Copy And Highlight
→ Disable Annoying Dialog Message (Not Able To Copy Content On This Webpage)
→ Re-Enable Context Menu
→ Include "Absolute Mode" To Force Remove Any Type Of Protection

No solo te permite usar click derecho, sino también seleccionar el texto con click izquierdo, como pone en la cita. Lo bueno de que sea una extensión es que puedes alternar entre activar y desactivar con un simple click, y nunca la pierdes al tenerla ya instalada.

Para Chrome también hay este tipo de extensiones. Hay varias, como las hay para Firefox.

Espero haberte ayudado.

PD: la extensión que yo uso en Firefox se llama 'Enable Right Click & Copy', sin el 'Absolute', pero parece que ya no está listada en la página de Mozilla. Imagino que esa extensión servirá igual e incluso mejor que la que yo uso.
15  Media / Multimedia / Re: Grabar música en: 23 Diciembre 2021, 20:47 pm
algunos discos vienen con hasta 130 canciones :( entonces cómo le hacen?

Ajustando (reduciendo) el bitrate de codificación de los archivos.

Cuanto mayor sea la calidad de codificación de los archivos de música, menos archivos te cabrán en el CD. Depende también de la duración de los archivos en general.

Un bitrate aceptable y común por la mayoría suele ser 128 kbps, al menos para casos donde se le debe dar prioridad a la cantidad de archivos almacenados, que a la calidad de audio de los mismos.

Así que puedes (re)codificar tus archivos a ese bitrate, y probablemente te cabrá casi el triple de canciones de las que te caben actualmente, ya que hoy en día la mayoría de música en formato MP3 se distribuye a 320 kbps, así que probablemente todos o casi todos tus archivos de música estarán codificados a 320 kbps, y eso es casi 3 veces el tamaño de un archivo codificado en 128 kbps.

Si la calidad de audio codificada en 128 kbps no te convence, puedes optar por codificarla a 192 kbps, y dependiendo del dispositivo donde la reproduzcas no deberías notar una gran diferencia en comparación con archivos codificados a 320 kbps.

Para codificar archivos de música yo te recomiendo el programa dbPoweramp:
https://www.dbpoweramp.com/

Y al (re)codificar un archivo, usando el codec LAME, en el programa que sea, asegúrate de que el programa te permita especificar la máxima calidad de codificación en los parámetros de LAME, es decir: "-q 0" (0 = máxima calidad, 10 = la peor calidad posible). Por defecto los programas suelen usar un valor de "1" (-q 1), pero depende del programa. Esto no aumenta el tamaño del archivo, simplemente hace una codificación en mejor calidad. Y muchos dirán que de '-q 1' a '-q 0' no hay diferencia, pero eso da exactamente igual, no cuesta nada usar '-q 0' en vez de '-q 1' para obtener esa mejora ínfima de calidad que prácticamente no implica nada de tiempo adicional de codificación en un PC de hoy en día.
16  Media / Multimedia / Re: Firestick, mirror, teclado y power en: 23 Diciembre 2021, 04:46 am
Hola

Y porque soy capaz d ver otros monitores q no son el mio? Me refiero a q tengo q tener Bluetooth y WiFi activo y veo el monitor d una tal Lucía.


Se le puede cambiar el.nombre? No quiero q vean mi nombre

Una cosa es que te aparezcan las redes / dispositivos disponibles del alcance de tu wifi, y otra muy distinta es que te puedas conectar a ellos (a menos que sepas la contraseña).

De todas formas no soy el más indicado para dar enseñanzas sobre temas de redes y conectividad, puedo equivocarme en muchas cosas. No es mi fuerte.

Con respecto a lo de cambiar el nombre, prueba a hacer lo siguiente.

Si vives en España, te diriges a esta url:
https://www.amazon.es/hz/mycd/digital-console/alldevices
(para EEUU es la misma url pero cambiando el dominio .es por .com )

Seleccionas tu dispositivo:


Y le das a "editar" para cambiar el nombre a mostrar:


Creo que se puede hacer también desde la configuración de la interfaz del FireTV, pero me da pereza ponerme a indagar como.

Espero haberte ayudado. :)
17  Foros Generales / Foro Libre / Re: Le pido perdón al usuario Jason por el tema de Mayo de 2019 en: 23 Diciembre 2021, 02:17 am
Simplemente me dijo que el era Jason, yo era Freddy Krueger.

me dijo que iba a abrir las puertas del infierno.

Con esa clase de comentarios, se le ve una persona simpática y agradable al tal Jason...



y aunque sea tarde me gustaría pedirle perdón

Entonces, ¿Jason ganó?.

de todas manera haya pasado lo que aya pasado has tenido que esperar mas de un año para pedir disculpas ??  :huh:

Será el tiempo que ha de pasar en el infierno hasta que te den la libertad condicional.

------

Ahora en serio, yo creo que los hilos de "bromistas" simpáticos le dan vida a un foro. A mi por lo menos me ha sacado unas carcajadas y eso que estoy preocupado por una cosa que me ha sucedido esta noche. Pero para la próxima habría que mejorar el guion... ¿Freddy vs. Jason?, es que... jajajjaa, así de descarado no le va a durar mucho la broma.
18  Programación / .NET (C#, VB.NET, ASP) / Re: Powershell Ayuda en: 22 Diciembre 2021, 04:56 am
Ese script no te va a funcionar ya que tienes fallos de sintaxis.

Regla básica y fundamental en el uso de parámetros por linea de comandos para cualquier programa:
 - Los argumentos con espacios en blanco hay que encerrarlos entre comillas.

Ej.
Código:
Programa.exe /Parametro "Valor con espacios"

Aparte, el símbolo y nombre de un parámetro se escribe sin espacios en blanco: "/Nombre", no "/ Nombre"

De todas formas todo eso daría igual, ya que si vas a utilizar PowerShell lo más lógico es utilizar sus funcionalidades integradas, no recurrir y depender de programas externos como REG.exe. El compañero EdePC te ha mostrado un ejemplo de cómo hacerlo.

Aun así, si quieres utilizar REG.exe, lo podrías hacer de la siguiente manera:

Código
  1. function AddRegistryValue {
  2.  
  3.    param (
  4.        [Parameter(Mandatory, Position=0, HelpMessage="Enter the registry path.")]
  5.        [string]$path,
  6.  
  7.        [Parameter(Mandatory, Position=1, HelpMessage="Enter the name of the registry value.")]
  8.        [AllowEmptyString()]
  9.        [string]$value,
  10.  
  11.        [Parameter(Mandatory, Position=2, HelpMessage="Enter the value type.")]
  12.        [string]$type,
  13.  
  14.        [Parameter(Mandatory, Position=3, HelpMessage="Enter the value data.")]
  15.        [AllowEmptyString()]
  16.        [string]$data
  17.    )
  18.  
  19.    [int32]$result = 0
  20.  
  21.    $p = New-Object System.Diagnostics.Process
  22.    $p.StartInfo.FileName  = "REG.exe"
  23.    $p.StartInfo.Arguments = "ADD ""$path"" /V ""$value"" /T ""$type"" /D ""$data"" /F"
  24.    $p.StartInfo.UseShellExecute = $false
  25.    $p.StartInfo.CreateNoWindow  = $false
  26.    $p.StartInfo.RedirectStandardOutput = $true
  27.    $p.StartInfo.RedirectStandardError  = $true
  28.  
  29.    $p.Start() | Out-Null
  30.    $stdOut = $p.StandardOutput.ReadToEnd()
  31.    $stdErr = $p.StandardError.ReadToEnd()
  32.    $p.WaitForExit()
  33.    $result = $p.ExitCode
  34.    $p.Close()
  35.  
  36.    Write-Host $p.StartInfo.FileName $p.StartInfo.Arguments
  37.    Write-Host $stdOut
  38.    Write-Host $stdErr
  39.  
  40.    return $result
  41. }
  42.  
  43. function Pause {
  44.    param (
  45.        [Parameter(Mandatory=$false, Position=0, HelpMessage="Enter the message to display.")]
  46.        [string]$message = "Press any key to continue..."
  47.    )
  48.  
  49.    $console = [System.Console]
  50.    $console::WriteLine($message)
  51.    $console::ReadKey($true) | Out-Null
  52.  
  53. }  
  54.  
  55. AddRegistryValue -Path  'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device' `
  56.                 -Value 'DevicePasswordLessBuildVersion' `
  57.                 -Type  'REG_DWORD' `
  58.                 -Data  '0' `
  59.                 | Out-Null
  60.  
  61. Pause
  62. Exit(0)
19  Media / Multimedia / Re: Firestick, mirror, teclado y power en: 22 Diciembre 2021, 02:59 am
es posible protegerlo con aluna contraseña?

Ya está protegido por la contraseña de tu wifi, ¿no?.

un tecaldo inalambrico funcionaría conectado al monitor con este dispositivo?

Este es el que yo tengo para el Fire TV Stick. Funciona genial.

https://www.amazon.es/gp/product/B07RQBRRR7
20  Programación / Programación General / Re: Ayuda para crear un pequeño script en: 16 Diciembre 2021, 20:30 pm
Ni siquiera necesitas desarrollar un script. Puedes usar cualquier editor de texto con soporte de búsqueda de caracteres mediante expresiones regulares (RegEx) para poder hacer una captura de todas las urls en el texto, y por último cortar, o copiar y pegar todas las coincidencias encontradas.

De todas formas, y si lo prefieres, puedes utilizar el motor Regex de tu lenguaje de programación favorito para desarrollar ese script.

Una expresión regular con este patrón de captura: "http.+?\.[a-Z]{3}", en el texto que has mostrado, capturará estos 2 elementos:
(Sólo el dominio)

Si necesitas algo más preciso puedes adaptar el patrón de captura a tus necesidades, y puedes buscar ejemplos más sofisticados en Google...
https://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url

PD: Ten en cuenta que, según el lenguaje de programación que vayas a utilizar, hay pequeñas diferencias de sintaxis en el uso de expresiones regulares. El ejemplo que puse es compatible con Python, y los ejemplos de la url de arriba se supone que todos deberían ser compatibles con javascript.
Páginas: 1 [2] 3 4 5 6 7
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines