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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ... 1236
81  Programación / .NET (C#, VB.NET, ASP) / Re: Mejor guardado para XML en: 10 Marzo 2024, 02:52 am
La consulta que realizas se puede interpretar de varias formas. ¿Cual es exactamente el aspecto que buscas mejorar de ese código?. Utilizar directamente el método getter/setter de una o varias propiedades para controlar de forma eventual el cómo y el cuando guardar cierta configuración del usuario, eso podría no suponer mejor estructuración del código, ni tampoco mejora alguna con respecto a la utilización de la clase XmlWriter para llevar a cabo esa tarea.

En cualquier caso, no lo harías utilizando directamente la clase XmlReader para escribir elementos, sino utilizando los métodos de serialización destinados a convertir objetos en sus respectivos valores serializables, mediante la clase XmlSerializer:




En ciertos casos podrías recurrir a utilizar los correspondientes atributos de clase relacionados son la serialización de un tipo (clase o estructura, y sus miembros definidos) en formato Xml, e implementar la interfaz IXmlSerializable en dicho tipo, junto al uso de la clase XmlWriter (aquí, sí) para controlar y personalizar la serialización en formato Xml de sus miembros definidos.

Relacionado con esto, comparto aquí un ejemplo propio, de una clase por nombre "ColorString" que representa el valor de un color ARGB expresado en diferentes representaciones textuales. La clase implementa las interfaces ISerializable e IXmlSerializable:

https://pastebin.com/8C19nZFv

Nota: El código original está escrito en VB.NET; esto es una conversión automática del código a C#, probablemente haya errores de sintaxis en la consersión, y en cualquier caso NO es un código funcional (faltan referencias a otros miembros que no he añadido), es solo un ejemplo. Puedes encontrar otros ejemplos más reducidos y funcionales empezando por este:




O quizás al mencionar los métodos getters/setters más bien te estés refiriendo a la estructura 'Settings' que se encarga de crear código autogenerado con las propiedades que especifiques (en la pestaña "Settings" de las propiedades de tu proyecto .NET 7.0) a través del archivo "app.config" para administrar la configuración de la aplicación.

Lo cierto es que, a menos que tengas alguna razón justificable por la cual prefieras guardar la configuración en formato Xml (o en json, o en binario, me es indiferente) 'Settings' es lo que deberías usar para guardar la configuración del usuario:


PD: Esta característica está disponible desde que surgió .NET 2.0; En caso de que esto sea a lo que te estuvieses refiriendo, decir que hasta ahora estabas usando "la forma antigua" con Xml no sería muy excusable por parte de quien te haya enseñado esa forma :xD, pero tampoco por parte tuya.



Por que no usar json ? si quieres modernizarte, puedes usar : SettingsProvider.net es el que uso en todas mis apps , es realmente bueno.

No lo conocía. ¡Lo probaré a ver que tal!.

Ya que estamos hablando de formas para administrar la configuración del usuario, me gustaría aportar otra alternativa diferente de utilizar JSON para llevar a cabo esa función:


Cita del autor:
"Con Jot, solo necesita declarar qué propiedades de qué objetos desea rastrear y cuándo conservar y aplicar los datos."

Esto implica que no tenemos que escribir ningún código adicional para obtener ni asignar directamente los valores de la configuración. Eso se realiza de forma abstracta, sofistacadamente.

Es muy versatil y, además, ofrece simplicidad de uso mediante el patrón de diseño de interfaz fluida (Fluent interface) que nos permite encadenar varias sentencias en pocas líneas para controlar y condicionar, con belleza y precisión, el funcionamiento y el comportamiento de carga y guardado de los valores de la configuración, pudiendo asignar nombres de eventos en los que se ha de guardar un valor de la configuración, o condiciones especiales para no hacerlo, entre otras cosas, y aislando prácticamente toda esta lógica del código fuente de la interfaz de usuario.
82  Programación / Programación General / Re: Editor para archivos muy largos. en: 10 Marzo 2024, 02:37 am
dividirlo tal como se suele hacer con bases de datos muy grandes.

Lo que propusiste es una solución alternativa. Pero hay que tener en cuenta que, dependiendo del formato que sea el archivo que el usuario pretenda editar, y precisamente al manejar bases de datos, partir el archivo en varias partes de menor tamaño para aumentar la velocidad al acceso de los datos puede conllevar consecuencias negativas, o desventajas si lo queremos llamar así, como por ejemplo imposibilitar, o al menos dificultar la capacidad de realizar operaciones de búsqueda o de reemplazo sobre la totalidad de los elementos, ya que estaremos operando sobre una porción reducida de los elementos del archivo / base de datos.
83  Programación / Programación General / Re: Editor para archivos muy largos. en: 10 Marzo 2024, 01:28 am
Para poder ver y editar un fitchero de más de 150 GB, ¿hay algún editor disponible?

Para encontrar una solución óptima a tus necesidades, es mejor que especifiques el tipo de archivo en cuestión. Si es un archivo de texto plano con algún formato específico o no, ya que el rendimiento para renderizar el contenido del archivo se puede medir de distinta forma. De todas formas, lo suyo es lo que ha mencionado @Serapis, debes evitar cualquier software que cargue en memoria todo el archivo de forma secuencial.

En cualquier caso, en la siguiente respuesta (en la categoría "Free Editors") deberías encontrar todo lo que puedas necesitar:


Aténtamente,
Elektro.
84  Programación / Scripting / Re: Conteo continuo con Batch (Ayuda) en: 9 Marzo 2024, 18:51 pm
he visto que un chico creó un juego llamado "Gem Miner" utilizando puramente Batch

Sin más información, cabe la posibilidad de que parte del código esté escrito en Batch-Script, y parte en otros lenguajes, es decir un código híbrido, para sortear las limitaciones del primero.

También cabe la posibilidad de que el juego dependa del uso de "comados externos" (aplicaciones de terceros por línea de comandos) para llevar a cabo esas tareas limitadas en Batch-Script.

Si no te importase emplear lenguajes adicionales en tu proyecto de Batch para "hibridarlo", entonces te sugiero usar PowerShell para llevar a cabo de forma más fácil y sofisticada lo que quieras hacer.



¿Puedes captar la hora del sistema?

La cuestión no parece ser como asignar la hora actual del sistema a una variable, ni como realizar operaciones aritméticas con los segundos, sino hacerlo con un mínimo de precisión sin interrumpir la ejecución del script.

De todas formas, y para aclarar tu duda, sí, la hora actual del sistema se puede obtener mediante el valor de la variable dinámica %TIME%, y se puede asignar los segundos actuales (00~59) a una variable local.



¿hay algún modo de captar la hora del sistema y restarle la hora inicial?

Veo que ChatGPT es extremadamente inútil hasta para intentar resolver cuestiones básicas de programación por lotes con Batch-Script. Como para confiar en sus afirmaciones y en sus códigos al formularle preguntas sobre lenguajes de programación que no se limiten al uso de treinta comandos contados, documentados y exprimidos al máximo durante décadas. Vaya una IA, ¡no sabe hacer nada de forma óptima!.

Realizar una llamada a las clases de la infrastructura WMI mediante wmic.exe supone una ralentización elevada e innecesaria en el tiempo de respuesta de cualquier aplicación. Supone una interrupción bastante medible (a veces puede tardar hasta 2-3 segundos. Depende de cómo se realice la solicitud a WMI, qué clase y que propiedades), y no hay necesidad de ello pudiendo obtener le hora actual de forma inmediata mediante el valor expuesto a través de la variable dinámica %TIME% como ya expliqué.

Pero estas cosas no son para hacerlas en Batch-script, insisto una vez más, no es la forma óptima, ni tampoco la más sencilla. Sus limitaciones implican recurrir al ingenio para acabar sorteando dichas limtiaciones mediante la creació de algoritmos tediosos (y feos, e imprecisos) que en muchos casos incluso podrían ser simplificados en una sola línea de código en otros lenguajes de programación.
85  Programación / Scripting / Re: Conteo continuo con Batch (Ayuda) en: 9 Marzo 2024, 18:24 pm
Ese es un breve ejemplo que hice
(...)
Pero, el usuario en este caso no puede hacer nada.

Esa es la naturaleza de Batch-script. Los archivos por lotes no entienden de conceptos como hilos que trabajen de forma asincrónica realizando tareas en segundo plano sin interrumpir el flujo de la aplicación. Se puede simular algo, pero es muy limitado.

Lo que solicitas hacer, lo podrías hacer perfectamente en otro lenguaje de programación, pero no puedes hacerlo con la precisión necesaria en una herramienta tan limitada como es Batch. Y cualquier cosa que veas similar a lo que solocitas, será una mera simulación imprecisa haciendo saltos "GoTo" o "Call" entre etiquetas u otras formas muy enrevesadas que se me ocurren, por ejemplo, mediante la ejecución de un script adicional que vaya guardando el tiempo transcurrido en segundos en un archivo intermediario de texto plano, y desde el script principal simplemente lees el contenido del archivo intermediario para obtener los segundos transcurridos...

Aquí abajo te muestro un ejemplo de esa metodología.

De esta forma se logra evitar la interrupción de la ejecución del script principal, pero no esperes precisión en términos de mostrar segundo a segundo (1+1) en pantalla. Y además, tiene sus complicaciones, ya que el archivo intermediario puede estar en uso, siendo escrito por el script adicional, al mismo tiempo que se intenta leer desde el script principal, causando errores (que se pueden silenciar) y mayor imprecisión causando 1 segundo de retraso cada vez que no se pueda leer el archivo, o que el archivo contenga el mismo valor por que el script adicional todavía no haya completado el intervalo de 1 segundo (del comando TIMEOUT) para escribir el nuevo valor en el archivo intermediario.

Con el comando SETX para crear variables de entorno y el modificador /F para extraer el valor desde un archivo de texto, también se puede hacer algo parecido, pero sería incluso más enrevesado.

Este tipo de cosas no son para intentar hacerlas en Batch, insisto. Quizás haya una metodología más eficiente que esta, pero no creo que merezca la pena investigar siendo Batch.

Por último, te muestro el ejemplo:

Timer.cmd
Código
  1. @Echo Off
  2.  
  3. (ECHO+)>"%TEMP%\ElapsedSeconds.tmp"
  4. FOR /L %%# IN (1, 1, 9999999) DO (
  5. (
  6. TIMEOUT /T 1 /NOBREAK
  7.     ECHO:%%#>"%TEMP%\ElapsedSeconds.tmp"
  8.    )1>NUL 2>&1
  9. )
  10.  
  11. Exit /B 0

Script Principal.cmd
Código
  1. @Echo Off
  2. SetLocal EnableDelayedExpansion
  3.  
  4. Start /B "" CMD /K "Call Timer.cmd"
  5.  
  6. SET /A "PreviousValue=0"
  7. SET /A "ElapsedSeconds=0"
  8.  
  9. FOR /L %%# IN (0, 1, 9999999) DO (
  10. (
  11. TIMEOUT /T 1 /NOBREAK
  12. FOR /F "UseBackQ Tokens=* Delims=" %%_ IN (
  13. "%TEMP%\ElapsedSeconds.tmp"
  14. ) DO (
  15. SET /A "ElapsedSeconds=%%_"
  16. )
  17. )1>NUL 2>&1
  18.  
  19. If !ElapsedSeconds! NEQ !PreviousValue! (
  20. ECHO:Elapsed Seconds: !ElapsedSeconds!
  21. SET /A "PreviousValue=!ElapsedSeconds!"
  22. )
  23. )
  24.  



Aténtamente,
Elektro.
86  Programación / Programación General / Re: Buscamos la ayuda de programadores voluntarios para proyecto de bien público en: 9 Marzo 2024, 05:54 am
¿Enviar y recibir mensajes por Whatsapp sin establecer una conexión activa a la red de Whatsapp?, eso a mi me hace explotar la cabeza. Lástima no poder ayudar.

Quizás a aquellas personas que tengan suficientes conocimientos sobre programación orientada a la telefonía móvil o la mensajería instantánea, les ayudaría saber cuales son tus preferencias o las limitaciones sobre el lenguaje de programación en el que pueda estar basada la solución / API.

¡Suerte!.
87  Sistemas Operativos / Windows / Re: Crear carpetas y subcarpetas dentro del menú contextual en: 9 Marzo 2024, 05:38 am
Como siempre me tuve que apañar de aquella manera y sigo haciéndolo, pasas por alto cambios bastante útiles y fáciles.

A veces nos acostumbramos tanto a ciertas formas de trabajar, que pasamos por alto otras posibles formas de hacer lo mismo y que podrían facilitar (o no) nuestra tarea. En este caso, no te has perdido gran cosa.



La gente en general quizás no lo sepa, pero la inmensa mayoría de programas que interactúan con el menú contextual de archivos y carpetas lo hacen registrando un archivo DLL en el sistema operativo para añadir y controlar el comportamiento de un menú. WinRAR (RarExt.dll), 7-zip (7-zip.dll) y cualquier otro programa que se nos ocurra, por que esa es la metodología a la que recurre el programador en la distribución de su programa, es decir, el desarollo de "una DLL". Pero también existe la alternativa menos compleja (la cual ya comenté) para el usuario convencional. Y el programador, para lo que se dedica hacer, que es programar, no tiene por qué conocer ni recurrir a esa alternativa que a pesar de ser menos compleja también es menos sofisticada y eficiente.

Y ya no digo más, que soy muy pesado.

¡Saludos!
88  Foros Generales / Dudas Generales / Re: Historial de shorts de YouTube en Chrome Windows en: 8 Marzo 2024, 23:56 pm
Yo igual, me revisé las opciones de configuración en youtube, y no encontré nada relevante.

@Songoku, no pierdes nada por probar lo que te dije. Es cuestión de descargar el portable, extraerlo / instalarlo, e iniciar sesión en Youtube. En menos de 5 minutos lo tienes hecho. Quizás algo si que cambie, o qizás no, da igual, es precisamente por descartar otras opciones, ya que si con el portable de portableapps también te ocurre lo mismo pues al menos se podrá asumir con mayor seguridad que no se trata de un problema aislado de la configuración de tu instalación original de Chrome en Windows.
89  Sistemas Operativos / Windows / Re: Crear carpetas y subcarpetas dentro del menú contextual en: 8 Marzo 2024, 21:05 pm
Muchas gracias. Una pregunta tonta. ¿Cómo se pone, pues, para

1. Abrir una carpeta
2. Abrir un programa
3. Abrir un archivo con un programa concreto?

De la misma forma en como lo harías de forma tradicional, es decir, agregando una subclave "command" en la clave de registro que haga referencia a la entrada del menú contextual que quieras utilizar para realizar esas acciones, y especificando el comando a llevar a cabo en el valor por defecto ("@") de esa clave.

Por ejemplo, y tomando como punto de referencia el script con el que ilustré mi respuesta anterior; para que la entrada con nombre "Sub Opción 4" inicie el notepad harías los siguientes cambios:

Código
  1. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command6]
  2. "MUIVerb"="Sub Opción 4"
  3.  
  4. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command6\command]
  5. @="notepad.exe"

Para abrir el Explorer de Windows con el elemento/archivo/directorio seleccionado (en este caso sería una unidad de disco):

Código
  1. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command6\command]
  2. @="\"Explorer.exe\" /Select,\"%1\""

O para iniciar notepad o cualquier otro programa pasándole como argumento el elemento seleccionado (en este caso sería una unidad de disco, por lo cual no tiene mucho sentido, pero es solo un ejemplo):

Código
  1. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command6\command]
  2. @="\"notepad.exe\" \"%1\""

Te aconsejo realizar las modificaciones directamente en el Regedit, y luego exportar la clave a un script de registro para evitar cometer errores de sintaxis (al escribir una ruta, por ejemplo, debes escapar el caracter "\" usando el caracter de escape, que es el mismo caracter "\", quedando así: "\\", y al escribir comillas dobles, también: "\"").

Aténtamente,
Elektro.
90  Sistemas Operativos / Windows / Re: Crear carpetas y subcarpetas dentro del menú contextual en: 8 Marzo 2024, 20:44 pm
Con la sugerencia del programa de terceros mencionado por @SonGoku ya estaba todo dicho (yo iba a proponer el mismo programa, por que al final esa es la solución más rápida, intuitiva y óptima para la mayoría de usuarios), sin embargo me veo en la obligación de contrastar cierta información incorrecta que se ha ofrecido:

En cambio para crear submenús hay que crear una dll que debe implementar ciertas interfaces, que utiliza el menú contextual. ...para lo cual hay que programar y no sé si es este tu caso, luego si con la solución que te ofrece Songoku, te basta, como usuario no te hace falta más entonces.

Debo decir que eso es incorrecto, @Serapis. Crear una extensión de shell de un controlador del menú contextual, o expresado como tu dijiste para que lo entienda mejor la gente: "un archivo DLL que implemente ciertas interfaces de programación" - eso no es una obligatoriedad, no es en absoluto un requisito, simplemente es una forma de hacerlo.

Crear menús, con todos los submenús que uno quiera y con sus correspondientes funciones para cada entrada del menú (abrir una carpeta, iniciar un programa, etc), se puede llevar a cabo manipulando el registro de Windows de forma convencional. Y no es para nada algo complejo, simplemente hay que familiarizarse con el concepto de COMANDOS, y luego ya solo es cuestión de su asignación y reutilización en las claves de los menús donde queramos añadir dichos COMANDOS.

A continuación muestro un script del Registro de Windows que creará un menú en cascada con varios submenús, que se mostrará al hacer click derecho sobre una unidad de disco:

Código
  1. Windows Registry Editor Version 5.00
  2.  
  3. [HKEY_CLASSES_ROOT\Drive\shell\Mi Menú]
  4. "MUIVerb"="Menú En Cascada"
  5. "Icon"=""
  6. "Position"="Top"
  7. "SubCommands"="MenúEnCascada.Command1;MenúEnCascada.Command2"
  8.  
  9. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command1]
  10. "MUIVerb"="Opción 1"
  11. "Icon"=""
  12. "Position"="Top"
  13.  
  14. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command2]
  15. "MUIVerb"="Opción 2"
  16. "Icon"=""
  17. "Position"="Top"
  18. "SubCommands"="MenúEnCascada.Command3;MenúEnCascada.Command4"
  19.  
  20. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command3]
  21. "MUIVerb"="Sub Opción 1"
  22. "Icon"=""
  23. "Position"="Top"
  24.  
  25. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command4]
  26. "MUIVerb"="Sub Opción 2"
  27. "Icon"=""
  28. "Position"="Top"
  29. "SubCommands"="MenúEnCascada.Command5;MenúEnCascada.Command6"
  30.  
  31. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command5]
  32. "MUIVerb"="Sub Opción 3"
  33. "Icon"=""
  34. "Position"="Top"
  35.  
  36. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command6]
  37. "MUIVerb"="Sub Opción 4"
  38. "Icon"=""
  39. "Position"="Top"



(Donde pone "Sub Opción 4" y "5" debería poner "3" y "4", eso fue un simple error de escritura que ya está corregido en el script del Registro de Windows de aquí arriba.)

Y un script para eliminar / deshacer las claves y valores de registro generados por el script anterior:

Código
  1. Windows Registry Editor Version 5.00
  2.  
  3. [-HKEY_CLASSES_ROOT\Drive\shell\Mi Menú]
  4. [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command1]
  5. [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command2]
  6. [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command3]
  7. [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command4]
  8. [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command5]
  9. [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\MenúEnCascada.Command6]



Por último, aquí tienen además una forma ligeramente distinta de manipular el registro para llevar a cabo la misma finalidad, mediante el uso de la subclave ExtendedSubCommandsKey:

 - learn.microsoft.com - Cómo crear menús en cascada con la entrada del Registro ExtendedSubCommandsKey
 - learn.microsoft.com - How to Create Cascading Menus with the SubCommands Registry Entry
(son dos artículos con ejemplos diferentes)

Aténtamente,
Elektro.
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ... 1236
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines