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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14
101  Informática / Hardware / Re: ¿Coste de recuperar los datos de un disco duro externo en España? en: 26 Octubre 2022, 03:40 am
¿Cuánto cobran aproximadamente? ¿700 euros?

Si, unos 600€-800€ es la cantidad que yo creo recordar que a mi me pidieron ( aquí: https://www.ontrack.com/es-es ). Y además no es seguro que puedan recuperar nada, si tu disco en antiguo y necesitan buscar piezas de repuesto pues... todo dependerá de la volunad que tengan y lo capaces que sean para conseguir las piezas, y luego ver si después del reemplazo pueden o no hacerlo funcionar y recuperar los datos.

Desconozco si todas las compañías de recuperación de datos trabajarán de la misma manera, pero en mi experiencia personal tú primero debes envíarles el disco por correo, entonces ellos examinan los daños, te hacen un presupuesto muy usurero (600€-800€) y te devuelven el disco a tu casa (sin coste alguno) con la hojita del presupuesto, y por último tu ya decides si estás dispuesto a pagar la desorbitada cantidad que hayan especificado.

Me parece recordar que, una vez aceptes el contrato, se supone que si ellos no llegan al 40% o al 60% de recuperación pagas la mitad, o algo así, no lo recuerdo bien. Pero bueno, tú esas cosas ya se las preguntarás para informarte.

En mi opinión este tipo de servicios no merecen la pena, a menos que tengas el dinero y no te importe gastarlo de esta manera, y siempre y cuando te aseguren que no tendrás que pagar nada a menos que consigan recuperar el 100% o un porcentaje de los datos del disco que sea justo. Es que sino, pueden engañarte y devolverte el disco sin haber intentado recuperarlo, decirte que no han podido hacer nada y cobrarte igualmente.

Saludos.
102  Foros Generales / Dudas Generales / Re: ¿Esto es real? en: 24 Octubre 2022, 10:36 am
Porfavor no me tomen por tonto

Yo te tomaré por alguien crédulo y bastante ingenuo, pero no tonto, por que alguien verdaderamente tonto no se molestaría en registrarse en un foro informático para intentar asegurarse de si algo es legítimo o ilegítimo antes de tomar una decisión. Además, todos hemos pecado de ser muy ingenuos alguna vez en la vida, nos la pueden colar con muchas ideas y no tiene por que estar relacionado con el dinero, si yo te contase de lo que me averguenzo por haber creido en alguna que otra magufada...

Pero a lo que voy. Lamentablemente hay mucha gente tonta que se cree estas cosas y ni siquiera se detienen a consultarlo con alguien (amigo, familiar, o un profesional). Aunque yo creo que la culpa no es toda de esas personas, sino que la mayor culpa la tiene la defectuosa evolución intelectual del ser humano, que por más siglos que pasen seguimos sin poder desarrollar el mínimo sentido común necesario para no seguir tropezando una y otra vez con la misma amenaza, la misma trampa, el mismo tipo de engaño: LAS PERSONAS Y SERVICIOS QUE TE PROMETEN GANAR DINERO O HACERTE RICO DE LA NOCHE A LA MAÑANA A CAMBIO DE NADA, SIN ESFUERZO Y SIN PONER EN RIESGO TU PATRIMONIO.

Amigo, pon de tu parte y reflexiona: ¿realmente crees que si una persona encontrase la fórmula mágica para hacerse multi millonario -en este caso al parecer engañando de forma ilegal a un sistema de pagos de una microwallet para poder recibir cantidades de dinero o de criptomonedas ilimitadas- tú crees que esa persona va a compartir su secreto con el resto del mundo, de forma gratuita / altruista y en un canal aleatorio de Youtube donde solo lo verán cuatro gatos?.

Además dices que todos los canales o la mayoría de ellos son indios. Sabiendo eso no hace falta ni ver los videos del canal. Los indios tienen tanta mala fama de cometer estafas informatizadas al igual que las mafias nigerianas. Huye de esos canales y de cualquier canal en el idioma que sea que imite el contenido y el mensaje de esos canales presuntamente indios.

Las visitas, likes y el 99,9% de los comentarios positivos en cada uno de los videos de esos canales son artificiales. Esto te lo puedo asegurar sin margen de error. Son bots comprados o multicuentas de esa (presunta) mafia.

Quizás la estafa no se cometa infectando tu dispositivo para robarte cuentas bancarias y etc. con los programas que en el video te digan que te tengas que descargar y usar (no he visto los videos, solo muy por encima), parece más probable que la estafa simplemente consistiría en indicarte utilizar cierto servicio -con el que presuntamente quieren hacerte creer que ellos no guardan relación- como sería el tal "Faucetpay" para depositar allí tu dinero con el que en teoría luego podrás hacer "el truco" de ganar más dinero y luego podrás retirar el dinero obtenido desde ese servicio cuando tú quieras, ¿algo así es el mensaje que dan en esos videos, me equivoco? ya te digo que he visto los videos muy por encima, no se mucho sobre el mundo de las aplicaciones de minado.
Bueno, pues digo que en eso debe consistir la estafa por que "Faucetpay" es una entidad muy poco fiable ya que no posee regulación de ningún tipo, así que si depositaste tu dinero ahí, corres mucho peligro de que te estafen. Literalmentesin regulación nada les impide en cualquier momento bloquearte las retiradas de dinero, o simplemente hacer desaparecer todo tu dinero.
Por supuesto si hacen eso sería ilegal por muchas gilipolleces que hayan escrito en sus términos y condiciones de uso del servicio, y en el caso de que a alguien le llegasen a estafar con depósitos SEPA pues hay muchas posibilidades de que pueda recuperar su dinero (postdenuncia y postreclamación bancaria), pero si te piden hacer depósitos con criptomonedas y te estafan... eso ya no lo recuperas jamás. Y por eso muchos exchanges sin regulación que son una completa estafa trabajan así, te piden hacer un depósito con BTC u otra criptomoneda para "verificar tu cuenta" para poder retirar cierta cantidad (que realmente nunca recibirás, ni eso, ni lo que previamente ya hayas depositado) y ahí te estafan, y por mucha denuncia y reclamación estás jodido, así que ten cuidado.

"Faucetpay" dicen estar registrados con el nombre "WALP Entertainment S.R.L", bien, esto es solo algo de lo que encontré:

We did not know about WALP Entertainment S.R.L. until recently. The company supposedly is registered in Costa Rica and is massively involved in crypto gambling. This offshore entity also operates the unlicensed crypto gambling site Pasino (www.pasino.com) and the unregulated crypto payment processor FaucetPay (www.faucetpay.io). WALP Entertainment is also the issuer of the Feyorra (www.feyorra.com) crypto token, which is positioned as a payment token for the gambling industry..

Y esto ya habla por si solo: https://fruitycasinos.com/owner/walp-entertainment-s-r-l/ - "no tengo nada más que añadir, su señoría."

¿Acaso ves a entidades confiables como Paypal o cualquier otra donde te permita manejar activos de criptomonedas y hacer depósitos y retiradas de dinero FIAT, ves a esas compañías con cierta reputación actuando como una mafia clientelar de apuestas montando casinos online y sin ningún tipo de regulación?.

Además, y por si fuese poco todo lo que ya he expuesto, si observas las reseñas negativas de "Faucetpay" en trustpilot encontrarás advertencias de muchísimas personas a quienes les desapareció todo su dinero de la aplicación, algunos dicen que les hackearon la cuenta, otros dicen que incluso con el 2FA activado nadie entró, su dinero simplemente desapareció y no hay registro de movimientos y el servicio de atención al cliente de Faucetpay no les responden.

No se que más evidencias puede necesitar una persona para darse cuenta de que nada de esto es trigo limpio. Si necesitas más evidencias pues yo pienso que es solo cuestión de tiempo que la CNMV (Comisión Nacional del Mercado de Valores) detecten y añadan a "Faucetpay" en su lista gris, es un documento en formato PDF que lo publican cada cierto tiempo en la web de la CNMW con un listado de entidades (donde aparecen las relacionadas con servicios de exchanges de criptomonedas) muy poco o nada fiables ya que no tienen regulación y por ello deberías evitarlas a toda costa para no ser víctima de estafa. Eso sí, a la CNMV puede llevarle mucho tiempo añadir el nombre de "Faucetpay", por que yo se de primera mano de una entidad de depósitos/retiradas de criptomonedas sin regulación con la que tardaron casi dos años en añadirla a la lista. Yo no se como trabaja la CNMV pero supongo que habrá una relación entre el tiempo que tardan según la cantidad de denuncias, si hay pocas denuncias tardarán más en añadir el nombre de "Faucetpay".

El caso es que quienes llevan esos canales de criptomonedas probablemente sean parte de una mafia. Esos "bots" que muestran en sus videos probablemente ni siquiera sean programas funcionales, y probablemente todos los que estén implicados en la administración del contenido de esos canales de Youtube sean trabajadores de la misma entidad que se esconde bajo el nombre "Faucetpay" / "WALP Entertainment S.R.L", y su único cometido sea estafarte, eso no lo dudes.



Todo lo que yo he escrito y manifestado desde el principio hasta el final de este post debe interpretarse como mi opinión personal y otorgando presunción de inocencia hacia "Faucetpay" / "WALP Entertainment S.R.L" y hacia esos canales de Youtube y sus dueños y empleados. Me refiero, que yo he dicho que esos canales de Youtube probablemente estarían implicados en una presunta mafia de presuntos estafadores que formarían parte de "Faucetpay". Eso es lo que yo pienso, que no tiene por que ser así. No quiero hacer ninguna acusación directa e incriminatoria, y en el caso de haberla hecho por mi parte entonces insisto en que cualquier acusación no debe interpretarse como una acusación sino que se debe interpretar como una opinión personal y con presunción de inocencia hacia esos canales de Youtube y hacia las entidades mencionadas "Faucetpay" / "WALP Entertainment S.R.L".

Digo esto solamente para evitarle cualquier tipo de posible problema al administrador del foro, por que siempre puede haber algún usuario troll muy gilipollas y sin ni una pizca de sentido común capaz de hacer cosas insólitas y que cuestan de creer, así que para dejarlo claro: YO ASUMO DE FORMA EXCLUSIVA TODA LA RESPONSABILIDAD Y CULPABILIDAD SOBRE TODAS Y CADA UNA DE LAS PALABRAS QUE HE ESCRITO Y LAS OPINIONES QUE HE EXPRESADO EN ESTE POST.

PD: pero vamos, que visto lo visto está más claro que el agua lo que hacen y lo que son "Faucetpay" / "WALP Entertainment S.R.L" y con que finalidad lo hacen. Presuntamente, digo. :rolleyes:

Espero haberte ayudado a salir de dudas.

Un saludo.
103  Seguridad Informática / Seguridad / Re: Intentando hacer algo con el RegEdit y el antivirus en Windows 10. en: 23 Octubre 2022, 01:02 am
(Publico este nuevo post por que el otro quedó muy largo y ahora voy a hablar desde otro enfoque muy distinto. Perdón a los moderadores.)

Desconozco cuales son tus verdaderas intenciones. Si lo que pretendes es poder hacer uso de un antivirus con capacidad para crear reglas de bloqueo automático para archivos conocidos (conociendo el hash del archivo a bloquear), pues ahí tienes mi respuesta en el post de arriba y a falta de saber si existe alguna alternativa más simple y gratuita.

Ahora bien, si por lo contrario lo que realmente buscas es cualquier tipo de solución -que no tiene por que ser necesariamente el antivirus de Windows 10- capaz de bloquear automaticamente un archivo conocido para impedir su ejecución, pues para eso no necesitas un antivirus. Te sirve por ejemplo este programa:

 - Simple Run Blocker v1.5

De hecho no necesitas utilizar un programa, sería suficiente con activar la política de grupo "DisallowRun" en la clave de registro "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer":

 - http://systemmanager.ru/win2k_regestry.en/93501.htm

Y a continuación editar las entradas de la clave de registro "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisallowRun" para añadir los nombres de archivo de los programas cuya ejecución quieras impedir:

 - http://systemmanager.ru/win2k_regestry.en/93499.htm

( Esto es precisamente lo que hace el programa Simple Run Blocker. )

Nota: es necesario cerrar sesión de usuario o reiniciar el PC para activar el bloqueo. Pero esta característica de Windows es muy simple y limitada, solo sirve para bloquear archivos .exe y solo aquellos que ejecutes desde el explorador de Windows, además solo puedes especificar el nombre de archivo a bloquear (no puedes especificar una ruta completa de achivo, ni un hash), así que para saltarse el bloqueo es tan sencillo como renombrar el archivo. Por supuesto a diferencia del programa Simple Run Blocker, habrá programas que no se basen en esta característica de Windows y por ende permitan poder efectuar bloqueos más sofisticados. Google es tu aliado.
104  Seguridad Informática / Seguridad / Re: Intentando hacer algo con el RegEdit y el antivirus en Windows 10. en: 23 Octubre 2022, 00:23 am
Hasta donde yo se (puedo equivocarme) ninguno de los software de detección de virus/malware más populares y cotidianos del mercado proveen una característica similar a una blacklist o lista de inclusión forzada para falsos negativos. Lo que si que proveen es una lista de exclusión en donde puedes ignorar/permitir una amenaza conocida o un falso positivo, pero no recuerdo ningún antivirus que tenga nada para forzar a dicho antivirus a bloquear un archivo sin que se haya considerado una amenaza.

Sin embargo, Microsoft provee dos productos por nombre "Microsoft Defender for Endpoint" y "Microsoft Defender for Business", que si que integran este tipo de característica tan ausente en otros anvitirus. Por lo que se aprecia en el video de abajo, el programa permite crear reglas de bloqueo automático de archivos tomando como criterio el hash del archivo (hash del tipo SHA-1 en el video, pero imaigino que tendrá soporte para MD5 y otros). A este tipo reglas en el programa se le denominan 'indicadores de compromiso' (IoC).



En la interfaz de usuario del programa se puede apreciar que integra controles para importar un archivo de texto plano (.csv) con hashes de archivos, así que haciendo uso de PowerShell -y a falta de conocer si el programa almacena o no la configuración de las IoC en el registro de Windows para poder añadir una nueva IoC con el uso de un archivo .reg- se podría ingeniar las acrobacias necesarias para automatizar la UI del programa para la inserción de hashes de forma programática mediante el uso de la API de Microsoft UI Automation de .NET (System.Windows.Automation.dll).



Cabe mencionar que estos productos de software no son gratuitos, y están enfocados a nivel empresarial para el uso de administradores de sistemas en un pequeño o mediano negocio o una empresa. Claro que si te llegas a hacer con el producto pues siempre puedes utilizarlo para un uso doméstico aunque ese no sea su enfoque de comercialización.

La edición básica, "Microsoft Defender for Business", funciona mediane plan de suscripción por $3.00 al mes, y la edición más avanzada, "Microsoft Defender for Endpoint", tiene dos planes de suscripción que basicamente consisten en adquirir el plan de suscripción de la edición E3 de Microsoft 365, o la edición E5, valoradas en $36.00 y $57.00 al mes respectivamente.

 - Microsoft Defender for Business
 - Microsoft Defender for Endpoint

Nota: hay varias diferencias entre cada edición, y yo desconozco si la edición "Business" integra servicio de detección en tiempo real para las IoC.



Por último, aquí tienes un poco de documentación sobre ambos productos:

 - What is Microsoft Defender for Business?

 - What is  Microsoft Defender for Endpoint?

 - Create indicators for files
   (Applicable to Microsoft 365 Defender, Microsoft Defender for Business and Microsoft Defender for Endpoint)


-Enjuto Mojamuto "rey de los frikis" a su disposición para futuras dudas.
105  Programación / Scripting / Re: Ganar dinero haciendo Scraping Web en vivo ¿Que lenguaje de programación recomiendan? en: 21 Octubre 2022, 22:45 pm
Eso significa tener que llenar toda el código fuente de comentarios porque con el tiempo si quieres que siga funcionando tendrá que volver a modificar el código para adaptarlo a la forma en que la Web trabaja.

Toda la razón del mundo. Quien haya mantenido durante un periodo extenso un código específico para el uso de una API de terceros ya sabe a lo que se atiene, por que a veces y con el paso del tiempo hacen cambios tan radicales que en el peor de los casos llegan a cambiar casi por completo el modo de utilización de la API, y te cambian el lugar de las funciones y las funciones se renombran por otros nombres que pueden ser menos o más intuitivos, en fin, pueden cambiar muchas cosas en menos de 1 año y debido a esto se puede volver necesario incluso hacer todo de nuevo para adaptar el código a estos cambios. Google es un "genio" en dar por culo de esta manera (al menos en lo que respecta a sus API para .NET).

Un saludo
106  Programación / .NET (C#, VB.NET, ASP) / Re: Como fusionar una archivo de imagen y de texto en uno con vb.net framework3.5 en: 21 Octubre 2022, 08:23 am
Se que ha pasado mucho tiempo desde la última respuesta a este tema, pero me aburro sin nuevos temas de .NET en los que poder ayudar, y ya que he visto que recientemente publicaste un nuevo tema y yo en este tema en concreto te puedo aclarar un par de cosas... pues allá que voy:

1. Lo que pretendes hacer se denomina serialización: https://learn.microsoft.com/en-us/dotnet/standard/serialization/

La serialización es el proceso de convertir un objeto en una secuencia de bytes para almacenarlo o transmitirlo a la memoria, a una base de datos o a un archivo. Su propósito principal es guardar el estado de un objeto para poder volver a crearlo cuando sea necesario. El proceso inverso se denomina deserialización.

La serialización permite al desarrollador guardar el estado de un objeto y volver a crearlo según sea necesario, ya que proporciona almacenamiento de los objetos e intercambio de datos. A través de la serialización, un desarrollador puede realizar acciones como las siguientes:

    Enviar el objeto a una aplicación remota mediante un servicio web
    Pasar un objeto de un dominio a otro
    Pasar un objeto a través de un firewall como una cadena JSON o XML
    Mantener la seguridad o información específica del usuario entre aplicaciones

2. Para serializar en formato binario/raw puedes utilizar la clase "System.Runtime.Serialization.Formatters.Binary.BinaryFormatter"



He escrito estas dos funciones genéricas para que puedas serializar/deserializar en formato binario de forma muy sencilla:

Código
  1. Public Shared Sub Serialize(Of T)([object] As T, outputFile As String)
  2.  
  3.    Using fs As New FileStream(outputFile, FileMode.CreateNew, FileAccess.Write, FileShare.Read),
  4.          ms As New MemoryStream()
  5.  
  6.        Dim bf As New BinaryFormatter()
  7.        bf.Serialize(ms, [object])
  8.        ms.WriteTo(fs)
  9.    End Using
  10.  
  11. End Function

Código
  1. Public Shared Function Deserialize(Of T)(inputFile As String) As T
  2.  
  3.    Using fs As New FileStream(inputFile, FileMode.Open, FileAccess.Read, FileShare.Read)
  4.        Dim bf As New BinaryFormatter()
  5.        Return DirectCast(bf.Deserialize(fs), T)
  6.    End Using
  7.  
  8. End Function

Ejemplo de utilización:

Código
  1. <Serializable>
  2. Friend Class ImageTextData
  3.  
  4.    Public Property Image As Image
  5.  
  6.    Public Property Text As String
  7.  
  8. End Class

Para serializar:
Código
  1. ' Crear un Bitmap de color sólido.
  2. Dim bmp As New Bitmap(128, 128)
  3. Using g As Graphics = Graphics.FromImage(bmp)
  4.    g.Clear(Color.Red)
  5. End Using
  6.  
  7. Dim outputData As New ImageTextData With {
  8.    .Text = "Hello World!",
  9.    .Image = bmp
  10. }
  11.  
  12. Serialize(outputData, "C:\ImageTextData.bin")

Para deserializar:
Código
  1. Dim inputData As ImageTextData = Deserialize(Of ImageTextData)("C:\ImageTextData.bin")
  2.  
  3. Me.PictureBox1.Image = inputData.Image
  4. Me.TextBox1.Text = inputData.Text



Por último, una pequeña advertencia: ten presente que no todos los tipos son serializables por defecto. Dependiendo de tu propósito y las circunstancias puedes llegar a necesitar implementar la interfaz ISerializable y/o IXmlSerializable en la clase cuyos miembros desees serializar, con el fin de diseñar la lógica de serialización de todos o un miembro en particular.

-Enjuto Mojamuto "rey de los frikis" a su disposición para futuras dudas.
107  Programación / .NET (C#, VB.NET, ASP) / Re: como crear una camara virtual en WPF vb.net en: 20 Octubre 2022, 23:52 pm
No se muy bien que es eso de la cámara virtual, no tengo ese programa, pero echando un vistazo rápido al código fuente de OBS Studio parece utilizar la API de DirectShow para renderizar la salida de video:

 - https://github.com/obsproject/obs-studio/blob/master/plugins/win-dshow/virtualcam.c
 - https://github.com/obsproject/obs-studio/blob/master/plugins/win-dshow/virtualcam-module/virtualcam-filter.cpp
 - https://github.com/obsproject/obs-studio/blob/master/libobs/obs-output.c

En cualquier caso, estas cosas no son tan fáciles de hacer como arrastrar un control al diseñador de WPF y listo. Según lo que pretendas hacer se requeriría el uso y aprendizaje de una API o SDK ya sea para trabajar con una salida de video o algo más orientado a trabajar con la web-cam. Como OpenCV, Directshow, Expression SDK, etc.

La librería SharpDX para .NET provee wrappers de la API de DirectShow para poder trabajar con salidas de video de forma relativamente más sencilla: http://sharpdx.org/

Ahora, no me preguntes como conectar la salida de una web-cam o crear una "cámara virtual" (que repito, no me ha quedado claro lo que es eso) mediante SharpDX / Directshow, por que no tengo ni idea. Lo he utilizado para cosas mucho más básicas. Pero hay mil y un ejemplos para practicamente cualquier tipo de escenario y situación usando SharpDX. Es cuestión de buscar en Google.

De todas formas aquí tienes un par de controles de terceros de web-cams que, según lo que pretendas hacer, quizás te sirvan de algo:

 - https://github.com/FrancescoBonizzi/WebcamControl-WPF-With-OpenCV
 - https://www.codeproject.com/Articles/285964/WPF-Webcam-Control
 - https://www.nuget.org/packages/WpfWebcamControl
 - https://www.telerik.com/products/wpf/webcam.aspx (es un UI Framework de pago)
 - https://docs.devexpress.com/WindowsForms/114582/controls-and-libraries/editors-and-simple-controls/camera-control (es otro UI Framework de pago)

-Enjuto Mojamuto "rey de los frikis" a su disposición para futuras dudas.
108  Programación / .NET (C#, VB.NET, ASP) / Re: Agregar propiedades a lista de tareas en: 20 Octubre 2022, 01:46 am
o en el caso del TextBox lo hace con la propiedad MultiLine.

Para WindowsForms es necesario tres cosas fundamentales:

1) Diseñar la clase de un control de usuario.
   -> System.Windows.Forms.UserControl
       (pongo como ejemplo esa clase a heredar, por no poner toda la lista de clases de los controles base.)

2) Diseñar la clase que proporciona servicios en tiempo de diseño para el control de usuario al que esté vinculado.
   -> System.Windows.Forms.Design.ControlDesigner

3) Diseñar la clase que proporciona una lista de acciones o "tareas" para el diseñador de control al que esté vinculado.
   -> System.ComponentModel.Design.DesignerActionList



En las url de arriba tienes ejemplos puntuales del uso de cada clase, y aquí tienes más documentación:

 - Designer Commands and the DesignerAction Object Model for Windows Forms.

 - Simplify UI Development with Custom Designer Actions in Visual Studio.



Por último, aquí abajo comparto el código fuente de un control de usuario heredado de la clase RichTextBox al que le he añadido una acción con nombre "MultiLine" que cumple la misma funcionalidad que la acción "MultiLine" de un TextBox. También le añadí la acción con nombre "Edit Text Lines" donde además demuestro como puedes invocar al editor de lineas mediante el uso de Reflection (aunque yo en el código original no utilizo Reflection, solo lo hice así para simplificar el código, pero si lo prefieres puedes invocar el editor de lineas como en este otro ejemplo: https://stackoverflow.com/a/43826903/1248295 ).

Todo esto ya lo tenía hecho de hace tiempo. El código fuente original de este control de usuario tiene varias miles de lineas. Lo he simplificado al máximo posible recortando todo lo innecesario e irrelevante para resolver tu duda. He recortado la lógica de preservación del texto multilinea al activar y desactivar la acción "MultiLine" ya que era mucho código, aunque por otro lado he dejado intacta la lógica de preservación del tamaño del control al activar y desactivar la acción "MultiLine", ya que eso si que me parece oportuno y relevante y es muy poquito código en comparación.



EnjutoRichTextBox.vb
Código
  1. #Region " EnjutoRichTextBox Class "
  2.  
  3. Namespace Enjuto.UserControls
  4.  
  5.    ''' <summary> A extended <see cref="RichTextBox"/> control.</summary>    
  6.    <DesignTimeVisible(True)>
  7.    <Designer(GetType(EnjutoRichTextBoxDesigner))>
  8.    <ToolboxItemFilter("System.Windows.Forms", ToolboxItemFilterType.Require)>
  9.    Public Class EnjutoRichTextBox : Inherits RichTextBox
  10.  
  11. #Region " Fields "
  12.  
  13.        ''' <summary>Fixed control height for single-line mode.</summary>
  14.        Protected ReadOnly singleLineFixedControlHeight As Integer
  15.  
  16.        ''' <summary>Keeps track of control's height while multi-line is enabled.</summary>
  17.        Protected multiLineCurrentControlHeight As Integer
  18.  
  19. #End Region
  20.  
  21. #Region " Constructors "
  22.  
  23.        <DebuggerStepThrough>
  24.        Public Sub New()
  25.            Me.SuspendLayout()
  26.            Me.DoubleBuffered = True
  27.  
  28.            Using tb As New TextBox(), rtb As New RichTextBox()
  29.                Me.singleLineFixedControlHeight = tb.Size.Height
  30.                Me.Size = rtb.Size
  31.            End Using
  32.  
  33.            Me.ResumeLayout(performLayout:=False)
  34.        End Sub
  35.  
  36. #End Region
  37.  
  38. #Region " Event Invocators "
  39.  
  40.        ''' <summary>Raises the <see cref="EnjutoRichTextBox.MultilineChanged"/> event.</summary>
  41.        Protected Overrides Sub OnMultilineChanged(e As EventArgs)
  42.  
  43.            If Not Me.Multiline Then
  44.                Me.multiLineCurrentControlHeight = Me.Height
  45.                Me.Height = Me.singleLineFixedControlHeight
  46.                Me.SetStyle(ControlStyles.FixedHeight, True)
  47.  
  48.            Else
  49.                Me.SetStyle(ControlStyles.FixedHeight, False)
  50.                Me.Height = Me.multiLineCurrentControlHeight
  51.  
  52.            End If
  53.  
  54.            MyBase.OnMultilineChanged(e)
  55.  
  56.        End Sub
  57.  
  58. #End Region
  59.  
  60.    End Class
  61.  
  62. End Namespace
  63.  
  64. #End Region

EnjutoRichTextBoxDesigner.vb
Código
  1. Imports System.ComponentModel.Design
  2. Imports System.Windows.Forms.Design
  3.  
  4. #Region " EnjutoRichTextBoxDesigner Class"
  5.  
  6. Namespace Enjuto.UserControls
  7.  
  8.    ''' <summary>Provides design-time support for the <see cref="EnjutoRichTextBox"/> control.</summary>
  9.    Friend NotInheritable Class EnjutoRichTextBoxDesigner : Inherits ControlDesigner
  10.  
  11. #Region " Fields "
  12.  
  13.        Private actionListCollection As DesignerActionListCollection
  14.  
  15. #End Region
  16.  
  17. #Region " Properties "
  18.  
  19.        ''' <summary>Gets the design-time action lists supported by the component associated with the designer.</summary>
  20.        Public Overrides ReadOnly Property ActionLists As DesignerActionListCollection
  21.            Get
  22.                If Me.actionListCollection Is Nothing Then
  23.                    Me.actionListCollection = New DesignerActionListCollection From {
  24.                        New EnjutoRichTextBoxActionList(DirectCast(Me.Component, EnjutoRichTextBox))
  25.                    }
  26.                End If
  27.                Return Me.actionListCollection
  28.            End Get
  29.        End Property
  30.  
  31.        ''' <summary>Gets the selection rules that indicate the movement capabilities of a component.</summary>
  32.        Public Overrides ReadOnly Property SelectionRules As SelectionRules
  33.            Get
  34.                Dim rtb As EnjutoRichTextBox = DirectCast(MyBase.Control, EnjutoRichTextBox)
  35.                If rtb Is Nothing Then
  36.                    Return MyBase.SelectionRules
  37.                Else
  38.                    Return If(rtb.Multiline,
  39.                              SelectionRules.AllSizeable Or SelectionRules.Moveable,
  40.                              SelectionRules.LeftSizeable Or  ' Prevents control height resizing at design-time.
  41.                              SelectionRules.RightSizeable Or ' *
  42.                              SelectionRules.Moveable)        ' *
  43.                End If
  44.            End Get
  45.        End Property
  46.  
  47. #End Region
  48.  
  49.    End Class
  50.  
  51. End Namespace
  52.  
  53. #End Region

EnjutoRichTextBoxActionList.vb
Código
  1. Imports System.ComponentModel.Design
  2. Imports System.Diagnostics.CodeAnalysis
  3. Imports System.Reflection
  4. Imports System.Windows.Forms.Design
  5. Imports Enjuto.UserControls
  6.  
  7. #Region " EnjutoRichTextBoxActionList Class"
  8.  
  9. ''' <summary>Provides designer action list support for the <see cref="EnjutoRichTextBox"/> control.</summary>
  10. Friend NotInheritable Class EnjutoRichTextBoxActionList : Inherits DesignerActionList
  11.  
  12. #Region " Private Fields "
  13.  
  14.    <SuppressMessage("CodeQuality", "IDE0052:Remove unread private members", Justification:="Needed for EnjutoRichTextBoxActionList.New(component As EnjutoRichTextBox)")>
  15.    Private ReadOnly designerActionUISvc As DesignerActionUIService
  16.  
  17. #End Region
  18.  
  19. #Region " Properties "
  20.  
  21.    Public Shadows ReadOnly Property Component As EnjutoRichTextBox
  22.        Get
  23.            Return DirectCast(MyBase.Component, EnjutoRichTextBox)
  24.        End Get
  25.    End Property
  26.  
  27.    ''' <summary>Gets or sets a value indicating whether the text of the control can span more than one line.</summary>
  28.    Public Property MultiLine As Boolean
  29.        Get
  30.            Return Me.Component.Multiline
  31.        End Get
  32.        Set(value As Boolean)
  33.            Me.Component.Multiline = value
  34.        End Set
  35.    End Property
  36.  
  37. #End Region
  38.  
  39. #Region " Constructors "
  40.  
  41.    Public Sub New(component As EnjutoRichTextBox)
  42.  
  43.        MyBase.New(component)
  44.  
  45.        ' Cache a reference to DesignerActionUIService, so the DesigneractionList can be refreshed.
  46.        Me.designerActionUISvc = DirectCast(Me.GetService(GetType(DesignerActionUIService)), DesignerActionUIService)
  47.  
  48.    End Sub
  49.  
  50. #End Region
  51.  
  52. #Region " Public Methods "
  53.  
  54.    ''' <summary>Returns the collection of <see cref="DesignerActionItem"/> objects contained in the list.</summary>
  55.    ''' <returns>A <see cref="DesignerActionItem"/> array that contains the items in this list.</returns>
  56.    Public Overrides Function GetSortedActionItems() As DesignerActionItemCollection
  57.  
  58.        Dim items As New DesignerActionItemCollection From {
  59.                New DesignerActionHeaderItem("Behavior"),
  60.                New DesignerActionPropertyItem("MultiLine", "MultiLine", "Behavior",
  61.                                               "Controls whether the text of the control can span more than one line.")
  62.            }
  63.  
  64.        If Me.Component.Multiline Then
  65.            items.Add(New DesignerActionMethodItem(Me, "EditTextLines", "Edit Text Lines...", "Behavior",
  66.                                                       "Display the Lines collection editor.", includeAsDesignerVerb:=False))
  67.        End If
  68.  
  69.        Return items
  70.  
  71.    End Function
  72.  
  73. #End Region
  74.  
  75. #Region " Private Methods "
  76.  
  77.    ''' <summary> Displays a <see cref="MultilineStringEditor"/> to edit the text lines of the control.</summary>
  78.    Friend Sub EditTextLines()
  79.  
  80.        Dim rtb As EnjutoRichTextBox = Me.Component
  81.        Dim designerHost As IDesignerHost = rtb.Site.GetService(GetType(IDesignerHost))
  82.        Dim designer As IDesigner = designerHost.GetDesigner(rtb)
  83.  
  84.        Dim editorServiceContext As Type = GetType(ControlDesigner).Assembly.DefinedTypes.Where(Function(t As Type) t.Name = "EditorServiceContext").Single()
  85.        Dim editValue As MethodInfo = editorServiceContext.GetMethod("EditValue", BindingFlags.Static Or BindingFlags.Public)
  86.  
  87.        editValue.Invoke(Nothing, {designer, rtb, NameOf(rtb.Lines)})
  88.  
  89.    End Sub
  90.  
  91. #End Region
  92.  
  93. End Class
  94.  
  95. #End Region

-Enjuto Mojamuto "rey de los frikis" a su disposición para futuras dudas.
109  Foros Generales / Dudas Generales / Re: PRIMERA CONSULTA en: 19 Octubre 2022, 06:51 am
necesito acceder a una cuenta perdida

"una cuenta perdida". ¡Hagan sus apuestas!:

a) una cuenta bancaria
b) una cuenta de OnlyFans
c) una cuenta de League of Legends
d) una cuenta de usuario de elhacker.net
e) una cuenta de Instagram
f) una cuenta de correo electrónico

 :P
110  Programación / Scripting / Re: Ganar dinero haciendo Scraping Web en vivo ¿Que lenguaje de programación recomiendan? en: 19 Octubre 2022, 06:00 am
¿Que lenguaje de programación recomiendan?

Este proyecto lo desarrollé para un cliente hará unos 5 años:

( Hacer click en la imagen para maximizar... )





Los controles de grillas no contienen ningún dato visible de las apuestas debido a que no he seguido actualizando y manteniendo la aplicación después de haber concluido el trabajo. De hecho, no he vuelto a abrir esta aplicación hasta el día de hoy, por que quería enseñártela para fundamentar mi respuesta, solo para darme cuenta de que la obtención de las apuestas en vivo ha dejado de funcionar debido a que al parecer en algún momento determinado William Hill pasó a requerir contactar con ellos para solicitar una clave de API, y la aplicación primeramente debe ser aprovada por ellos. Y como es evidente yo no he contactado con ellos ni he pedido la aprobación de esta app ni nada de nada durante estos 5 años desde que concluí el desarrollo de esta aplicación.

Pero bueno, espero que las imágenes igual te sirvan como un sketch, mockup o ilustración para que te puedas imaginar la cantidad de mercados y datos de apuestas que habían disponibles en la interfaz de usuario y su representación visual mediante las filas de las grillas. Literalmente estaban representados todos los deportes y partidos disponibles en William Hill. Y con un intervalo de refresco arbitrario de 1 minuto.

 - Lenguaje de programación: VB.NET
 - UI framework: Windows Forms + Telerik UI for WinForms
 - API de precios: William Hill ( "http://pricefeeds.williamhill.com/bet/en-us?action=GoPriceFeed" ) - disponible y gratuita en su día.
 - API de web-scraping: HtmlAgilityPack (es un analizador de HTML escrito en C#, y compatible con XPATH o XSLT).

Esa es mi sugerencia, siempre recurro a .NET para llevar a cabo tareas de web-scrapping, para mi es lo más productivo (rápido y fácil), pero seguro que esto es por simple costumbre de prácticas repetitivas, como lo será también por costumbre para quien esté acostumbrado a trabajar periodica y productivamente con Python u otro lenguaje.

Por supuesto cualquier lenguaje con herramientas capacitadas para analizar html te sirve por igual.

De todas formas y por lo que estoy viendo a simple vista en el buscador de Google, al parecer hoy en día la mayoría de APIs de precios / odds son de pago, algunas son freemium (solo te permiten una cantidad gratuita y limitada de peticiones mensuales, a menos que pagues para poder hacer más peticiones), y más que parsear HTML sería parsear la respuesta JSON de la API que se utilice.

O muy a malas a falta de una API siempre puedes recurrir a hacer web-scrapping directamente en la web de apuestas (como hacen en ese repositorio de GitHub con Python).

Saludos.
Páginas: 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines