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

#3481
Hola

- Está prohibido revivir temas antiguos.
- Es obligatorio formatear un bloque de código, ¡esto es un foro de programación!

Sigue las normas, por favor.

Tema Cerrado

Saludos
#3482
Cita de: erikcatala en  4 Agosto 2016, 22:50 PMHe probado con buscar la palabra y guardar la linea en un .txt y luego reemplazar la parte ro.product.device= por nada pero siempre me queda =libra y no puedo borrar el =.

A ver si alguien me puede ayudar porque no consigo hacer lo que quiero

Hola.

Si ya tienes una solución casi completa, entonces es mejor que muestres tu código para poder corregírtelo y que puedas eliminar el caracter "=".

Saludos!
#3483
Hola

Puedes hacerlo de la siguiente manera:

@Echo Off & Setlocal EnableDelayedExpansion

For %%f In ("*.avi") DO (
   Set "filename=%%~nf"
   Set "filename=!filename: (web.com.ar)=!"
   Echo "%%~nxf" -^> "!filename!%%~xf"
   Rename "%%~ff" "!filename!%%~xf"
)

Pause & Exit


Notas:
- Reemplaza ".avi" por la extensión correcta.
- Si realmente necesitases utilizar la recursión de archivos (For /R), antes de rintentar renombrar el archivo deberías asignar el directorio de trabajo para que sea el mismo directorio donde se encuentra el archivo a renombrar (lo puedes hacer de forma sencilla con el comando PUSHD y POPD y el modificador de la variable de For: %%~pd)

Saludos
#3484
Cita de: TrashAmbishion en  5 Agosto 2016, 06:59 AM
Necesito pasar una estructura:

Usuario
Contraseña
Ip

Pudiera usar la misma idea, verdad?

Por supuesto, la idea que te mostré arriba la puedes implementar con la cantidad de campos que desees. Por otro lado, si por "estructura" también te estás refiriendo a utilizar el tipo Structure, entonces debes tener en cuenta la cantidad de campos que definas, o mejor dicho el tamaño de la estructura, y si los campos se pasan por valor o por referencia.




Cita de: TrashAmbishion en  5 Agosto 2016, 06:59 AMLa duda que tengo y me tiene pensativo es como paso esa estructura de una forma no muy rebuscada (para futuro entendimiento) hacia la otra aplicación y esta la pueda utilizar sin mucha complicación.

Tienes varias opciones para la comunicación entre procesos, pero ya que tu aplicación se basa en el uso de Sockets, entonces lo más directo sería aprovecharte de una metodología basada en Sockets, por ejemplo creando un NetworkStream basado en un Socket.

Teniendo una class como esta de aquí abajo definida tanto en la app cliente como en la app servidor, tienes a tu disposición varias alternativas para llevar a cabo lo mismo (la conversión de tipos):
Código (vbnet) [Seleccionar]
Public NotInheritable Class ClientInfo

   Public ReadOnly Property UserName As String
   Public ReadOnly Property Password As String
   Public ReadOnly Property IpAddress As String

   Private Sub New()
   End Sub

   Public Sub New(ByVal userName As String,
                  ByVal password As String,
                  ByVal ipAddress As String)

       Me.UserName = userName
       Me.Password = password
       Me.IpAddress = ipAddress

   End Sub

   Public Function ToStream() As Stream
       Dim ms As New MemoryStream()

       Using writer As New BinaryWriter(ms, Encoding.Default, leaveOpen:=True)
           With writer
               .Write(3) ' Cantidad de valores.
               .Write(Me.UserName)
               .Write(Me.Password)
               .Write(Me.IpAddress)
           End With
       End Using

       ms.Seek(0, SeekOrigin.Begin)
       Return ms
   End Function

   Public Shared Function FromStream(ByVal sr As Stream) As ClientInfo

       Using reader As New BinaryReader(sr, Encoding.Default, leaveOpen:=True)
           Dim count As Integer = reader.ReadInt32()
           Dim list As New List(Of String)(count)

           For x As Integer = 0 To (count - 1)
               list.Add(reader.ReadString())
           Next x
           sr.Seek(0, SeekOrigin.Begin)

           Return New ClientInfo(username:=list(0), password:=list(1), ipAddress:=list(2))
       End Using

   End Function

   Public Overloads Shared Widening Operator CType(ByVal sender As Stream) As ClientInfo
       Return ClientInfo.FromStream(sender)
   End Operator

   Public Overloads Shared Widening Operator CType(ByVal sender As ClientInfo) As Stream
       Return sender.ToStream()
   End Operator

   Public Overloads Function ToString() As String
       Return String.Format("{0};{1};{2}", Me.UserName, Me.Password, Me.IpAddress)
   End Function

End Class


Ejemplo:
Código (vbnet) [Seleccionar]
Dim ci As New ClientInfo("Elektro", "Contraseña", "255.255.255.255")
Dim clientSocket As Socket = ...
Dim netStream As New NetworkStream(clientSocket, ownsSocket:=True)

Using sr As Stream = ci.ToStream()
   sr.CopyTo(netStream)
End Using


Código (vbnet) [Seleccionar]
Dim ci As ClientInfo = ClientInfo.FromStream(netStream)

Hay varias maneras de hacerlo, también podrías especificar el tamaño de cada string en los primeros bytes para parsearlo de otra manera, como a ti te resulte mejor. O incluso puedes recurrir a técnicas de marshalling con estructuras de un tamaño fijo definido, pero eso lo veo innecesario, rebuscado y sobretodo tedioso.

Lo cierto es que no lo he testeado en profundidad usando un socket, pero espero que esa class y el ejemplo te sirva para hacerte una idea, si sigues teniendo dudas o no te convence esa metodología entonces puedes probar otras:

Saludos!
#3485
Hola

Cita de: llogui en  5 Agosto 2016, 03:01 AMdejo codigo con el error, subrayado

¿Donde está el supuesto mensaje de error?, no lo has compartido.




Cita de: llogui en  5 Agosto 2016, 03:01 AMcomo se soluciona

Sólo has compartido un bloque try/catch incompleto sin mencionar el error, lo único que te puedo decir es que el "fallo" está en que al bloque de código le faltan los brackets de cierre.

Código (csharp) [Seleccionar]
try {

   string nombreUsuario = txtUserName.Value.Trim();
   string clave = txtPassword.Value.Trim();
   UsuarioEntity usuario = new UsuarioEntity();
   usuario.UserName = nombreUsuario;
   usuario.Password = clave;
   UsuarioEntity iniciado = new AccesoLogicaUsuario().accesoUsuario(usuario);
   
   if (iniciado != null) {
       Sesion sesion = new Sesion();
       sesion.Usuario = iniciado;
       Session[SessionSesionActual] = sesion;
       Response.Redirect("Home.aspx");

   } else {
     // Insertar código aquí...

   }

}


PD: De todas formas, debes tener en cuenta que el simple hecho de que Visual Studio no coloree las instrucciones a veces es un error de la propia IDE, el cual se soluciona reiniciándola.

Saludos!
#3486
Yo si que le veo utilidad, me parece una idea muy buena @Tincopasan, un snippet muy practico. Es lo mismo que el típico mensaje de texto (o messagebox) con tiempo de retraso, también con sus diversas utilidades.
Lo único que yo creo que le faltaría a tu código para ser todavía más perfecto, sería un texto advirtiendo del tiempo que falta para terminar, pero bueno, se entiende que el código que has proporcionado es solo un ejemplo didáctico.

PD: Me han entrado ganas de replicar esta funcionalidad en .NET, ¡te copio la idea! :P

Saludos!
#3487
Cita de: 01munrra en  3 Agosto 2016, 14:10 PMpero no se esta deteniendo, como se hace ps????

( hasta que has mostrado la imagen no habia entendido del todo bien tu duda por que no sabía que era eso de tragamonedas, aquí lo llamamos tragaperras xD )

Piensa en lo siguiente: lo único que tienes hecho hasta ahora es un thread que ejecuta un búcle infinito, ¿cómo esperas poder cancelarlo por arte de mágia sin añadir nada más, si de ese búcle nunca sales?

Para que tu thread/backgroundworker se pueda cancelar, debes modificar el código actual (el bloque de código del evento BackgroundWorker.DoWork) para añadir una comprobación que determine si existe una petición/señal de cancelación, y en caso afirmativo, terminar la ejecución de ese bloque de código.

Cuando llamas al método BackgroundWorker.CancelAsync(), se activa el valor de la propiedad booleana BackgroundWorker.CancellationPending, ese es el valor que debes controlar dentro de tu búcle infinito para modificar el comportamiento o flujo de tu BackgroundWorker.

Es algo muy sencillo, pero lo mejor es que leas y estudies la siguiente documentación (sobre todo el primer enlace, y el ejemplo de código que verás ahí) para que aprendas a hacerlo por ti mismo:

PD: ¿realmente el profesor os ha mandado implementar algoritmos de programación asincrónica sin haberos enseñado antes?

Saludos!
#3488
Cita de: 01munrra en  3 Agosto 2016, 05:09 AM

Código (csharp) [Seleccionar]
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
       {
           int i = 1;

           while ( i > 0 )
           {
                      ...
               i++;
           }
       }

Hola

Primeramente, ¿eso exactamente con que intención lo haces?. No es necesario tener una variable-contador intermediaria para llevar a cabo las iteraciones, puedes simplificarlo de la siguiente manera:

Código (csharp) [Seleccionar]
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
   while (true) {
       // Insertar código aquí.
   }
}





Segundo, esto ya depende de gustos, puedes hacerlo como prefieras, pero yo considero que así te quedaría un código más legible e intuitivo: podrías reemplazar toda esa colmena de condicionales lo por un switch:

Código (csharp) [Seleccionar]
private static readonly Random rnd = new Random();
private static Image img;
private static Int32 imgId;


Código (csharp) [Seleccionar]
imgId = rnd.Next(minValue: 0, maxValue: 3);

switch (imgId) {

   case 0:
       img = Traga_monedas_frutas.Properties.Resources.Banana;
       break;

   case 1:
       img = Traga_monedas_frutas.Properties.Resources.Manzana;
       break;

   case 2:
       img = Traga_monedas_frutas.Properties.Resources.Pina;
       break;

   default:
       img = Traga_monedas_frutas.Properties.Resources.Cereza;
       break;
}





Tercero y último, el mensaje de error que has mencionado parece ficticio, tiene faltas de ortografia de principio a fín, y no parece tener ningún sentido razonable entre eso del user-code y la mención a la excepción. Por favor, muestra el mensaje de error real, tal y como te lo muestra Visual Studio (preferiblemente en Inglés si te fuese posible,,puesto que las traducciones de los mensajes de error por parte de Microsoft al Castellano ... son lo peor)

De todas formas, intuyo que posiblemente tengas un conflicto por intentar manipular un control que no fue creado desde el mismo hilo en donde estás ejecutando el BackgroundWorker.

Prueba a intentar utilizar un delegado, de la siguiente manera:

Código (csharp) [Seleccionar]
private static readonly Random rnd = new Random();
private static Image img;
private static Int32 imgId;

public delegate void SetPictureBoxImage(PictureBox pcb, Image img);
public static SetPictureBoxImage PictureBoxDelegate = new SetPictureBoxImage(SetPictureBoxImageMethod);


Código (csharp) [Seleccionar]
public static void SetPictureBoxImageMethod(PictureBox pcb, Image img) {
   pcb.Image = img;
}


Código (csharp) [Seleccionar]
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {

   imgId = rnd.Next(minValue: 0, maxValue: 3);

   switch (imgId) {

       case 0:
           img = Traga_monedas_frutas.Properties.Resources.Manzana;
           break;

       case 1:
           img = Traga_monedas_frutas.Properties.Resources.Pina;
           break;

       case 2:
           img = Traga_monedas_frutas.Properties.Resources.Cereza;
           break;

       default:
           img = Traga_monedas_frutas.Properties.Resources.Banana;
           break;
   }

   form1.Invoke(PictureBoxDelegate, new object[] { pictureBox1, img });

}


Saludos
#3489
Cita de: Lekim en  2 Agosto 2016, 11:50 AMsi estás usando una versión 'Express' supongo que no tienes licencia para poder distribuir software de Microsoft y lucrarte con ello, que supongo es lo que tienes pensado. Lo mismo si usas una versión pirata.

Que la IDE de Visual Studio Professional/Ultimate (producto de pago) sea "pirata" o no lo sea es algo irrelevante puesto que no es la cuestión de la pregunta, sin embargo te diré que la IDE, el framework y las SDKs de Microsoft (productos totalmente gratuitos) son lo que cuenta.

Se puede usar la plataforma .NET para desarrollar y distribuir una aplicación, sitio web, o lo que sea, de forma gratuita, ya sea con Visual Studio Express o edición de pago:



( en los documentos online de los términos de uso para las distintas versiones y ediciones de Visual Studio se puede encontrar más información )




Cita de: Lekim en  2 Agosto 2016, 17:11 PMyo no lo guardaría en un archivo, si no en una nube o servidor. Porque si no el cliente tres días después de activar a la licencia puede tener un problema con la compu, tener que reinstalar el sistema y perdería un la licencia por la que ha pagado.

Aunque el usuario formatee el ordenador y vuelva a instalar, cuando active de nuevo la cuenta, sin pagar y usando email o Nick y contraseña, la comprobación de la licencia se haría Online.

Los problemas que un usuario tenga por un uso indebido, impredecible o incontrolable en su dispositivo, se pueden considerar ajenos a las responsabilidades de "X" aplicación, aunque obviamente si se trata de un programa orientado a la protección de virus informáticos como Norton pues ahí ya es más de sentido común que se anticipen a una posible catástrofe por parte del usuario para proporcionarles una solución de activación alternativa, pues ya saben que tipo de usuarios utilizan su soft y los riesgos que corren...

De todas formas, se trate del tipo de aplicación que se trate, siempre se puede ofrecer más de un método de activación para controlar este tipo de escenarios (cuya responsabilidad, repito, es del usuario, no del software) mediante un método de activación online y otro offline, como hacen hoy en día las compañias de software de renombre (Microsoft, Adobe, Sony, Stardock, etc)

En el caso de que el necesariamente el funcionamiento de una aplicación o la mayoría de sus funciones principales se deban sostener en el uso de Internet, entonces la activación offline se podría descartar puesto que si el usuario necesita una conexión establecida para usar dicha aplicación es extraño ofrecer una alternativa de activación offline, un ejemplo de esto sería (y es) Steam (actualizaciones, descargas de juegos, juegos online, etc).

PD: Se que aprecias mucho mis comentarios y las citas que te hago para explicarte las cosas como son, así que venga, a disfrutarlo, muchacho.




Cita de: djnilo en  2 Agosto 2016, 16:32 PMPara adquirir la licencia mensual, el cliente deberá contarme  y abonar la cuota correspondiente a dicha licencia mensual. Cumplida esta condición, le envíos al cliente un archivo (MiControl.ini, por ejemplo) en el que tengas cifrado el ID del mismo, la fecha de inicio y la de final de la licencia. Este archivo lo copiará en determinada carpeta (por ejemplo, la misma en que tenga ubicada tu aplicación).
En tu aplicación deberás tener preparada una serie de comprobaciones, que se ejecutarán en el arranque del proyecto:

- Comprobar si existe el archivo MiControl.ini.

La metodología del archivo intermediario es totalmente aceptable y usado hoy en día como ya dije arriba (aunque para decirlo todo, Microsoft lo que siempre ha recomendado es utilizar el registro de Windows para almacenar "contraseñas" u otros datos de la aplicación), sin embargo, y teniendo en cuenta que has manifestado la intención de "enviarle" la Id. a dicho usuario en un mensaje, entonces, ¿qué problema hay con un simple copiar y pegar en la aplicación por parte del usuario?, realmente no parece existir la necesidad de forzar a la aplicación a que busque y lea un archivo, cuando el usuario simplemente podría copiar y pegar el código en la app, lo cual probablemente le resultaría una forma mucho más amistosa y satisfactoria.

Mi consejo, en general, es el siguiente:

No te ofusques demasiado, la activación online por supuesto también se puede craquear y se consigue, por que la ingenieria inversa siempre va a existir y los curiosos que se marcan un reto también, así que no es sano intentar que tu software sea incraqueable ...por que no lo será. No te obsesiones con la seguridad, sólo con que añadas una metodología medianamente robusta para evitar un posible craqueo por los crackers aficionados será siempre suficiente para cubrir las necesidades de seguridad de tu software, recuerda que no eres Microsoft ni necesitas desarrollar e implementar un sistema de seguridad que esté a la altura de ellos...

PD: No soy ningún experto en la ingenieria inversa ni nada parecido, pero puedo hablar con conocimiento de causa sobre los aspectos generales de la misma, sobretodo acerca de la protección de un ensamblado .NET (la cual es casi nula, según se mire)

Saludos!
#3490
Foro Libre / Re: ¿Como puede ser legal esto?
1 Agosto 2016, 12:44 PM
Cita de: Orubatosu en  1 Agosto 2016, 12:40 PMEste tipo de "videos" se limita a coger casos extremos y pretenden hacerlos pasar por habitual.

¿Casos "extremos"?, ya, ve y cuéntale eso a los chinos... sabes perfectamente lo que hacen y como lo hacen.

Saludos!