Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#851
Y quien se puede tomar en serio una protesta de 24 horas?... la gente podrá entrar al día siguiente y el tema ya dejará de tener importancia para la mayoría de los afectados. De verdad, me parece un modo ridículo e ineficiente de protestar, si los de Wikipedia quieren hacerse notar pues mejor que pongan un bloqueo de 7 días (por no decir 30 días o indefinidamente), eso al menos, no 24 hrs. de nada...

saludos
#852
Scripting / Re: Problema Permisos en CMD
4 Julio 2018, 13:53 PM
Cita de: Last_squat en  4 Julio 2018, 13:18 PMal intentar escribir en el fichero host me aparece el mensaje de que está activo y acceso denegado.

¿Cúal es el problema?

El código que has mostrado me funciona perfectamente tanto ejecutándolo diréctamente desde la CMD, como desde un batch-script.

Suponiendo que el archivo hosts no tenga aplicado el atributo de solo lectura cuando ejecutas ese batch-script (puedes comprobarlo utilizando el comando ATTRIB), entonces al parecer el mensaje de error podría estar indicando que algún programa (o quizás pueda ser un servicio de Windows) tiene abierto un handle del archivo hosts, es decir, que mientras ese programa tenga abierto el archivo hosts no podrás escribir/realizar modificaciones en él, así que debes averiguar que programa está causando ese problema en tu sistema, quizás pueda ser por culpa de algún antivirus, en cualquier caso herramientas como LockHunter te serviría de ayuda para averiguar que proceso tiene abierto el handle de archivo del archivo hosts...


Saludos!
#853
Cita de: AdriánT95 en  3 Julio 2018, 12:56 PM
Pues sí, la verdad es que es la primera vez que hago Web Scraping, por lo que vi un tutorial en Youtube y para hacerlo utilizo el "simple_html_dom" para PHP, aunque ya había hecho cosas con PHP anteriormente.

Cita de: AdriánT95 en  4 Julio 2018, 09:55 AMPff, pues me temo que esto va a ser muy muy complicado de lograrlo ya que tengo hacer Web Scraping a muchas páginas web, no sólo a una. Si fuera sólo una, me atrevería a intentarlo pero cómo dijiste, será un infierno si son muchas.

Es por eso que existen librerías de terceros que te hacen todo el trabajo sucio para personas con escasos conocimientos en "X" materias, pero claro, depende del lenguaje que estés utilizando, en la plataforma .NET Framework por ejemplo una librería que te ayudaría mucho sería aBot (además es open-source), entre varias otras. Aparte de eso también existe software para el webscrapping, como por ejemplo WebHarvy por nombrar alguno...

Obviamente tener conocimientos te facilitaría mucho el data parsing o análisis de datos de la web que sea, pero tampoco es un motivo para pensar "no puedo hacerlo sin conocimientos", ya que si no sabes hacerlo mediante un lenguaje de programación, como alternativa siempre puedes recurrir a software de web-scrapping (como el ya mencionado WebHarvy) con documentación y tutoriales y etc...

Cita de: AdriánT95 en  4 Julio 2018, 09:55 AM
Web Scraping tiene un problema y es que si cambia la estructura de una web, entonces el código que yo escribí para hacer Web Scraping a dicha web no funcionaría y tendría que rescribirlo.

Bueno, todo el resto del mundo tiene que lidiar con ese problema: manutención de código, es algo que debes asumir, pero la estructura de una página web no tiene por que cambiar muchas veces a corto plazo, quizás durante un año entero no haya cambios, y de haberlos tampoco debes asumir que los cambios realizados en el diseño de la página o en lo que sea vayan a afectar al análisis de los datos que quieras obtener, a veces no ocurre esa "tragedia". Por si te sirve de ánimos, yo llevo manteniendo varios web-crawlers durante años y las veces que he tenido que adaptar/actualizar los algoritmos por culpa de cambios críticos en la estructura de sus webs se cuentan con los dedos de una mano...

Cita de: AdriánT95 en  4 Julio 2018, 09:55 AM
La verdad es que ya intenté buscar alguna API sobre los hoteles en España, sería lo más óptimo para lo que yo quiero hacer, pero no encontré ninguno por la red  :-\

En los primeros resultados de Google se lista un artículo con 110 APIs...


Viendolo solo un poco y por encima, algunas APIs son para servicios de hoteles muy específicos, pero alguna habrá que te deba servir, todo es ponerse a leer las descripciones de cada API una por una a ver para que sirve, supongo que alguna servirá para realizar consultas de precios de hoteles dentro de una base de datos que contenga hoteles de España, claro que dudo mucho que un servicio así vaya a ser gratuito...

Saludos
#854
Cita de: **Aincrad** en 29 Junio 2018, 04:33 AM
Me inmagino que debería definir las letras desde la A hasta la Z en un string saltándome las letras del dico local C y la D. que nunca son de algún dispositivo extraible.

Cita de: **Aincrad** en  3 Julio 2018, 21:59 PM
Con esto ya puedo detectar los discos extraible pero ahora necesito su ayuda para crear un bucle y así poder detectar los nuevos usb que se conectan

No, esa no es la manera de hacerlo.

La forma correcta de hacerlo sería o bien procesando el mensaje de ventana WM_DEVICECHANGE en la función WndProc (WindowProcedure) haciendo uso de la estructura nativa DevBroadcastVolume, o bien suscribiéndote a los eventos de las clases de WMI, concretamente a la clase Win32_DeviceChangeEvent si mal no recuerdo: https://docs.microsoft.com/en-us/windows/desktop/CIMWin32Prov/win32-devicechangeevent - sí, acabo de testearlo, aunque como alternativa al parecer también podrías usar la clase Win32_PnPEntity: https://stackoverflow.com/a/5329524/1248295

¿Ventajas y desventajas?, velocidad de ejecución (WM_DEVICECHANGE) versus flexibilidad de código (WMI); por decirlo de una manera entendible, la infraestructura de WMI propaga los datos de las consultas en intervalos algo largos, en comparación.




No viene mal de vez en cuando revisar/buscar en los códigos de la librería de snippets para VB.NET, aquí compartí un monitor de inserción y extracción de dispositivos basado en lo que te estuve comentando de la estructura DevBroadcastVolume:


Y aquí abajo compartí un código que puedas adaptar para suscribirte a los eventos necesarios de las clases de WMI para conseguir el mismo resultado ( observa los ejemplos de utilización que escribí abajo del todo del comentario, en la query de WMI del primer ejemplo solo tendrías que cambiar el nombre de la clase "Win32_VolumeChangeEvent" por "Win32_DeviceChangeEvent" para tenerlo todo listo ):


Saludos
#855
Cita de: mortygor en  3 Julio 2018, 18:19 PM
Estoy en cruce ahora mismo, me podeis guiar un poco por donde tengo que seguir, porque no lo veo.

Te lo voy a poner bien facilito, código fuente completo y comentado en Español...

Código (vbnet) [Seleccionar]
Public NotInheritable Class Form1 : Inherits Form

   Private srcFolderPath As String = "C:\Folder A" ' Directorio de origen
   Private dstFolderPath As String = "C:\Folder B" ' Directorio de destino

   Private WithEvents SrcCollection As ObservableCollection(Of FileInfo) ' Colección de archivos del directorio de origen
   Private WithEvents DstCollection As ObservableCollection(Of FileInfo) ' Colección de archivos del directorio de destino

   ' Obtiene el nuevo nombre que será asignado al archivo de origen al moverlo al directorio de destino...
   Private ReadOnly Property NewFilename As String
       Get
           Return Me.TextBox1?.Text.Trim()
       End Get
   End Property

   Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

       ' Construimos las colecciones de archivos del directorio de origen y destino,
       ' y enlazamos dichas colecciones a los ListBoxes...

       Dim srcFiles As IEnumerable(Of FileInfo) = New DirectoryInfo(Me.srcFolderPath).EnumerateFiles("*", SearchOption.TopDirectoryOnly)
       Dim dstFiles As IEnumerable(Of FileInfo) = New DirectoryInfo(Me.dstFolderPath).EnumerateFiles("*", SearchOption.TopDirectoryOnly)

       Me.SrcCollection = New ObservableCollection(Of FileInfo)(srcFiles)
       Me.DstCollection = New ObservableCollection(Of FileInfo)(dstFiles)

       Me.ListBox1.Sorted = True
       Me.ListBox1.DisplayMember = "Name"
       Me.ListBox1.DataSource = Me.SrcCollection

       Me.ListBox2.Sorted = True
       Me.ListBox2.DisplayMember = "Name"
       Me.ListBox2.DataSource = Me.DstCollection

   End Sub

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

       ' Verificamos que haya algún elemento seleccionado antes de continuar...
       If (Me.ListBox1.SelectedIndex = -1) Then
           Exit Sub
       End If

       ' Obtenemos el archivo de origen que queremos mover al directorio de destino.
       Dim srcFile As FileInfo = Me.SrcCollection.Single(Function(fi As FileInfo) fi.Name = Me.ListBox1.SelectedItem.ToString())

       ' Construimos el nuevo nombre de archivo para la ruta de destino.
       Dim dstFileName As String = If(String.IsNullOrWhiteSpace(Me.NewFilename), srcFile.Name,
           Me.NewFilename & If(Path.HasExtension(srcFile.Name), Path.GetExtension(srcFile.Name), ""))

       ' Construimos la ruta completa de destino
       Dim dstFullFilePath As String = Path.Combine(Me.dstFolderPath, dstFileName)

       ' Y declaramos un objeto del tipo FileInfo que representa al archivo de destino.
       Dim dstFile As New FileInfo(dstFullFilePath)

       ' Verificamos que el nombre del archivo de origen (con el nuevo nombre de archivo aplicado) no exista en la colección de destino.
       If (Me.DstCollection.FirstOrDefault(Function(fi As FileInfo) fi.Name = dstFileName) IsNot Nothing) Then
           Throw New Exception("File name already exist in the destination collection.")
       End If

       ' Verificamos que el archivo de origen (con el nuevo nombre de archivo aplicado) no exista en el directorio de destino.
       If (dstFile.Exists) Then
           Throw New IOException("File already exist in the destination directory.")
       End If


       Try ' Movemos el archivo de origen a la ruta de destino.
           srcFile.MoveTo(dstFile.FullName)

       Catch ex As Exception
           Throw

       End Try

       ' Actualizamos las colecciones de archivos.
       Me.SrcCollection.Remove(srcFile)
       Me.DstCollection.Add(dstFile)

       ' Restauramos la entrada de datos de los controles.
       Me.TextBox1.Clear()
   End Sub

   Private Sub SrcCollection_CollectionChanged(sender As Object, e As NotifyCollectionChangedEventArgs) Handles SrcCollection.CollectionChanged
        Me.ListBox1.BeginUpdate()
       Me.ListBox1.DataSource = Nothing
       Me.ListBox1.DisplayMember = "Name"
       Me.ListBox1.DataSource = DirectCast(sender, ObservableCollection(Of FileInfo))
        Me.ListBox1.EndUpdate()
   End Sub

   Private Sub DstCollection_CollectionChanged(sender As Object, e As NotifyCollectionChangedEventArgs) Handles DstCollection.CollectionChanged
        Me.ListBox2.BeginUpdate()
       Me.ListBox2.DataSource = Nothing
       Me.ListBox2.DisplayMember = "Name"
       Me.ListBox2.DataSource = DirectCast(sender, ObservableCollection(Of FileInfo))
        Me.ListBox2.EndUpdate()
   End Sub

End Class


En la interfaz de usuario se debe añadir un TextBox, un Button y dos ListBox.

Saludos.
#856
Un hombre compra una laptop en el mercado negro y solo le llega una imagen impresa del laptop, y encima en blanco y negro...



La pregunta es, ¿quieres ser esa persona?...






Yo diría que hay MENOS posibilidades de que te estafen si intentas comprar en eBay el típico USB de los chinos de 2 Terabytes por 5€, 100% real no fake, 46 burros clientes satisfechos...

#857
Los errores que mencionas no tienen que ver con el código que te mostré...

Para solucionar el primer y segundo error:
Código (csharp) [Seleccionar]
using Cursor = System.Windows.Forms.Cursor;
( o bien escribe el namespace completo en las lineas donde se te marca el error )

El tercer (y último) error directamente no te debería ocurrir, asegúrate de que tienes una referencia añadida el ensamblado System.dll (que es la libreria que contiene la función Enum.HasFlag) aunque por supuesto debes tenerla añadida por que de lo contrario tendrías gran cantidad de errores de definiciones de tipos no encontrados... como ya digo ese error en principio no te debería estar ocurriendo, revisa que todas las referencias estén bien.

Saludos
#858
Imagino que quieres poder pulsar la tecla F1 fuera de la aplicación y que se procese en tu programa, de lo contrario si solo quieres que la tecla se procese cuando haces click en la interfaz de usuario de la aplicación entonces es más que suficiente con suscribirse a los eventos Form.KeyDown y Form.KeyUp.

En cualquier caso es innecesario el uso directo de código nativo / llamar a las funciones de la API de Windows, en su lugar puedes usar código administrado expuesto en los miembros la librería de clases de WPF, y aunque estés en Windows Forms (como parece ser el caso). Aquí te muestro la solución:

Código (csharp) [Seleccionar]
using System;
using System.Windows.Forms;

using System.Windows.Input;
using WpfKey = System.Windows.Input.Key;

namespace WindowsFormsApp1 {

   public partial class Form1 : Form {

       public Form1() {
           this.InitializeComponent();
       }

       private void Timer1_Tick(object sender, EventArgs e) {
           Console.WriteLine("timer1 has ticked...");
       }

       private void Timer3_Tick(object sender, EventArgs e) {

           KeyStates keyState = Keyboard.GetKeyStates(WpfKey.F1);

           if (keyState.HasFlag(KeyStates.Down)) {
               if (!(this.Timer1.Enabled)) {
                   this.Timer1.Enabled = true;
                   this.Timer1.Start();
               }

           } else {
               if (this.Timer1.Enabled) {
                   this.Timer1.Stop();
                   this.Timer1.Enabled = false;
               }

           }

       }

   }

}


PD: en tu proyecto debes añadir una referencia al ensamblado WindowsBase.dll y PresentationCore.dll para poder importar y usar los namespaces de WPF.

Espero que te haya servido de ayuda.

Saludos!
#859
Cita de: okik en  1 Julio 2018, 00:20 AM
Decir o hacer hipótesis sobre la posibilidad de que el mundo esté creado por máquinas u otros seres es lo mismo o una versión moderna a decir que ha sido creado por dioses o un dios o diosa. De nuevo el concepto de creación.

¿Y hay algo de malo en el concepto de "creación" quieres decir?, de todas formas, la gente tiene mucho rechazo a esa idea pero yo no le veo nada malo por que el hecho irrefutable de que existimos no va a cambiar por cualquiera que sea el motivo de nuestra existencia o la del universo, probablemente resultaría incómodo si en el futuro descubriesemos que hemos sidos creados ya sea por un Dios, una especie alienígena o de forma virtual en una simulación, a mucha gente le llevaría a la locura y a la desesperación, pero... no creo que fuese algo tan malo si lo piensas bien, de hecho no creo que ningún motivo para nuestra existencia pueda considerarse bueno ni malo.




Cita de: okik en  1 Julio 2018, 00:20 AMluego ¿podríamos ser una realidad dentro de otra realidad que está dentro de otra realidad? Y esto es un no acabar.

Cita de: okik en  1 Julio 2018, 00:20 AMdicho esto ¿por qué esa realidad que nos simula no puede a su vez ser una realidad simulada?

Hay una película muy interesante que trata ese tema exactamente desde ese punto de vista, te recomiendo verla si todavía no la viste...



Saludos!
#860
Bueno, publico este post en especial para Songoku y para cualquiera que pueda estar interesado...

Hace unos días decidí actualizarme al "nuevo" Firefox y al final he conseguido personalizarlo más o menos a mi gusto, aquí comentaré algunas extensiones que no haya comentado anteriormente y que me parecen de lo más util...

Empecemos:




Classical Search Bar

Esta extensión sirve para poder cambiar de forma rápida (con un click del ratón) el motor de búsqueda por defecto, yo sinceramente no se que cojones piensan los desarrolladores de Firefox al haber eliminado esta característica de la interfaz de usuario principal y hacerlo mucho más complicado perdiendo tiempo teniendo que ir al menú de opciones de motores de búsqueda para cambiarlo... en fin, eso se acabó gracias a esta extensión:



El único inconveniente o molestia (aunque para mi no lo es) es que hay que añadir cada motor de forma manual, por ejemplo para añadir a foro-elhacker.net:






Cookie Quick Manager

Hay varios administradores de cookies para Firefox pero son todos una mierd@, incluido este, hay uno que es mucho más bonito estéticamente que te muestra los favicons de cada url, pero Cookie Quick Manager me parece más eficiente en el sentido de ofrecer funcionalidades y hacerlo de un modo sencillo para ahorrar tiempo, lo que me gusta de esta extensión es que puedes hacer click en el icono de la extensión y buscar directamente las cookies para esa página. Está bastante bien...






Extension source viewer

Esta extensión añade un icono a la barra de dirección cuando estemos navegando por el dominio https://addons.mozilla.org/ para poder ver el código fuente de cualquier extensión.




Speed Dial [FVD]

Bueno, un speed dial maravilloso, desde la primera vez que lo vi me enamoré de él, estéticamente es el mejor...








Hoxx VPN Proxy

Un servicio gratuito de VPN, siempre puede venir bien si alguna página nos bloquea el acceso mediante IP...




I don't care about cookies

En teoría esta extensión lo que hace es ocultar en cualquier página web el típico aviso legal de uso de cookies que el usuario tiene que aceptar, a veces resulta molesto ver ese mensaje...




InFormEnter+

Esta extensión me resulta indispensable para rellenar formularios de registro en páginas web. Es como un acceso rápido a palabras/cadenas de texto (previamente definidas por el usuario) para ahorrar tiempo en registrarse en dichos formularios...






Link Status Redux

Esta extensión mostrará arriba de la barra de estado la última fecha en que accediste a un hyperlink / url... util si uno no está seguro de si un enlace ya fue visitado o no xD






mozlz4-edit

Sirve para editar archivos de Firefox con extensión mozlz4, por ejemplo el archivo search.json.mozlz4.




Page Memo

Con esta extensión pueden añadir las típicas notas de texto o sticky notes en cualquier página web!, muy util para colocar cualquier tipo de recordatorio en grupos de trabajo o en el hogar...






WX Download Status Bar

Por el momento este sería el único equivalente de la legendaria extensión Download Status Bar que sirve para mostrar el progreso de cada descarga que hagamos desde Firefox...






Temp Mail - Desechable Email Temporal Gratis

Como su nombre indica sirve para crear una cuenta de email desechable, en realidad no hay que hacer nada más que pinchar en el icono de la extensión, es genial para formularios de registro y tal...




Tengo instaladas más extensiones interesantes pero bueno creo que ya es suficiente con las que fueron mencionadas...

Un saludo!